Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '---------------- JUMP KUN
- GOSUB @INIT
- WHILE 1
- GOSUB @INIT2
- '-------------------MAIN LOOP
- WHILE 1
- GOSUB @MSGCTR
- GOSUB @BGSCR
- GOSUB @MYCTR
- GOSUB @TEKICTR
- VSYNC 1
- IF OVR THEN BREAK
- WEND
- GOSUB @GOVER
- WEND
- '------------------------INIT
- @INIT
- XSCREEN 0
- DISPLAY -
- GPRIO 1024
- GCLS
- CLS
- GRW=400
- GRH=240
- NONE=999
- BGW=25*8 'BG WIDTH
- BGH=15 'BG HEIGHT
- 'SCL=1.7 'SCALE
- SCL=2
- SZ=FLOOR(16*SCL) 'CHARA SIZE
- SZ(SZ/2)-2
- DIM MAP[BGW,BGH]
- DIM HX[4]
- DIM BY[4]
- HX[0]= 0:HY[0]= 1 '
- HX[1]= 0:HY[1]=-1 '
- HX[2]= 1:HY[2]= 0 '
- HX[3]=-1:HY[3]= 0 '
- CMAX=10
- LVLLOOP=7
- DIM BGTBL[10.4]
- DIM ANINUM[CMAX]
- DIM ANIMAX[CMAX]
- DIM HITPRG$[CMAX]
- RESTORE @ANIDATA
- FOR I=0 TO CMAX-1
- READ ANINUM[I]
- READ ANIMAX[I]
- READ HITPRG$[I]
- NEXT
- @ANIDATA
- DATA 6 ,3,"@SETOVR" '0:(TYPE A)GHOST
- DATA 9 ,2,"@GETCOIN" '1:(TYPE B)COIN
- DATA 11 ,3,"@SETOVR" '2:(TYPE C)ROBOT
- DATA 14 ,3,"@SETOVR" '3:(TYPE D)INO
- DATA 17 ,1,"@SETOVR" '4:(TYPE E)TOGE
- DATA 18 ,2,"@SETOVR" '5:(TYPE F)FIRE BALL
- DATA 20 ,1,"@RIDEBS" '6:(TYPE G)BASE
- DATA 20 ,1,"@RIDEBS" '7:(TYPE H)BASE
- DATA 0 ,1," '8:(TYPE I)
- DATA 0 ,1," '9:(TYPE J)
- SPDEF "@SPDATA"
- @SPDATA
- DATA 22
- DATA 0,144,16,16,8,8,1 '0:BOY R1
- DATA 16,144,16,16,8,8,1 '1:BOY R2
- DATA 32,144,16,16,8,8,1 '2:BOY R3
- DATA 0,144,16,16,8,8,9 '3:BOY L1
- DATA 16,144,16,16,8,8,9 '4:BOY L1
- DATA 32,144,16,16,8,8,9 '3:BOY L3
- DATA 256,240,16,16,8,8,9 '6:GHOST1
- DATA 272,240,16,16,8,8,9 '7:GHOST1
- DATA 288,240,16,16,8,8,9 '8:GHOST1
- DATA 352,64,16,16,8,8,1 '9:COIN1
- DATA 368,64,16,16,8,8,1 '10:COIN2
- DATA 256,224,16,16,8,8,9 '11: ROBOT1
- DATA 272,224,16,16,8,8,9 '12: ROBOT1
- DATA 288,224,16,16,8,8,9 '13: ROBOT1
- DATA 128,224,16,16,8,8,9 '14: INOSHISHI1
- DATA 144,224,16,16,8,8,9 '14: INOSHISHI2
- DATA 160,224,16,16,8,8,9 '14: INOSHISHI3
- DATA 280,304,16,16,8,8,1 '17: TOGE
- DATA 480,112,16,16,8,8,1 '18: FIRE BALL1
- DATA 496,112,16,16,8,8,1 '19: FIRE BALL2
- DATA 480,64,16,16,8,8,1 '20: BASE
- DATA 48,272,16,16,8,8,1 '21
- DIM JMPTBL$[CMAX]
- FOR I=0 TO CMAX-1
- JMPTBL$[I]="@ARG"+STR$(I)
- NEXT
- AN=0 'SPRITE NO.
- DN=1 'xx SPRITE NO.
- DMAX=10
- AA=0 'ANIME COUNTER
- '---GRP
- FOR Y=0 TO GRH STEP 16
- C=(Y/16) MOD 2
- FOR X=0 TO GRW STEP 16
- C=C XOR 1
- GFILL X,Y,X+15,Y+15,RGB(0,0,C*64+64)
- NEXT
- NEXT
- RETURN
- '--------------------- TITLE
- @INIT2
- CLS
- COLOR 15
- BGMSTOP
- BGCLR
- SPCLR
- '
- LOGOSP=255:SPSET LOGOSP,3524:SPHIDE LOGOSP
- '
- SPSET AN,0
- X=GRW/2
- Y=GRH/2
- SPANIM AN,"I",8,0,8,1,8,2,0
- SPANIM AN,"XY",90,X,Y,-20,X,Y-48,-20,X,Y,0
- SPSCALE AN,4,4
- BEEP 12
- @TITLEDAT
- DATA " fancy JUMP KUN graphics"
- DATA " fancy JUMP KUN graphics"
- DATA " fancy JUMP KUN graphics"
- DATA " fancy JUMP KUN graphics"
- DATA ""
- RESTORE @TITLEDAT
- FOR Y=5 TO 99
- READ A$
- IF A$=="" THEN BREAK
- GOSUB @PRTSUB
- NEXT
- '
- SPOFS LOGOSP,200,172,-256:SPSHOW LOGOSP
- '---------------------
- DEBUG=0
- LVL=1
- WHILE 1
- GOSUB @HITANY
- IF BTN AND &HFF0 THEN BREAK
- IF BTN AND 1 THEN LVL=LVL-1
- IF BTN AND 2 THEN LVL=LVL+1
- IF BTN AND (4+8) THEN DEBUG=DEBUG XOR 1
- IF LVL<1 THEN LVL=1
- BEEP 2
- A$="[xx]STAGE ":STR$(LVL)
- Y=20
- GOSUB @PRTSUB
- A$="[xx]"
- IF DEBUG THEN
- A$=A$+"DEBUG MODE"
- ELSE
- A$=A$+"NORMAL MODE"
- ENDIF
- Y=24
- GOSUB @PRTSUB
- WEND
- 'SPHOME DN,SZ/2,SZ/2
- 'SPANIM DN,"UV",8,256,240,8,272,240,8,288,240,0
- 'SPANIM DN,"I",8,6,8,7,8,8,0
- 'END
- SCORE=0
- OVR=0 'GAMEOVER
- GOAL=0 'GOAL
- BXMAX=(BGW*16)-400-1
- '---MAP
- 'W=BGW:H=BGH:PAT=0:TX=0:FY=0
- 'GOSUB @BGCOPY
- GOSUB @READMAP
- '
- SPANIM LOGOSP,"XY",-15,336,40
- '
- RETURN
- '---------MESSAGE
- @MSGCTR
- Y=14
- IF MSG$!="" THEN
- A$=MSG$
- GOSUB @PRTSUB
- MSGCNT=100
- MSG$=""
- ENDIF
- IF MSGCNT THEN
- MSGCNT=MSGCNT-1
- IF MSGCNT<=0 THEN
- A$=" "*20
- GOSUB @PRTSUB
- ENDIF
- ENDIF
- IF MAINCNT MOD 60 THEN RETURN
- IF TIMER>0 THEN DEC TIMER
- GOSUB @PUTSCORE
- IF (TIMER<=0) AND (GOAL==0) THEN OVR=1
- RETURN
- ;--------
- @PUTSCORE
- A$="SCORE:"+FORMAT$("%06D",SCORE)
- A$=A$+" TIME:"+FORMAT$("%03D",TIMER)
- Y=1
- GOSUB @PRTSUB
- RETURN
- '--------
- @GOVER
- BGMPLAY 4
- A$="G A M E O V E R"
- Y=11
- GOSUB @PRTSUB
- SPCHR AN,21
- AY1=-2
- WHILE AY<GRH+32
- AY=AY+AY1
- AY1=AY1+0.05
- SPOFS AN,AX,AY
- VSYNC 1
- WEND
- GOSUB @HITANY
- RETURN
- '---------------------PLAYER
- @MYCTR
- IF GOAL THEN
- IF TIMER>0 THEN
- DEC TIMER
- INC SCORE,10
- GOSUB @PUTSCORE
- ELSE
- GOAL=GOAL+1
- IF GOAL>4*60 THEN
- LVL=LVL+1
- GOSUB @READMAP
- ENDIF
- ENDIF
- ENDIF
- FOR I=0 TO 3
- FOR J=-SZH TO SZH STEP SZH
- X=AX+(HX[I]*(SZH+1))+(HY[I]*J)
- Y=AY+(HY[I]*(SZH+1))+(HX[I]*J)
- GOSUB @BGCHK
- IF CH>32 THEN
- AX=AX-HX[I]
- AY=AY-HY[I]
- IF I<=1 THEN AY1=0
- IF I>=2 THEN AX1=0
- ENDIF
- NEXT
- NEXT
- GOSUB @BTNCTR
- AY=AY+AY1
- AX=AX+AX1
- IF AX<SZH THEN AX=SZH
- SPOFS AN,AX,AY,AZ
- IF AY>GRH THEN OVR=1 'GAMEOVER
- IF BT AND 8 THEN SPCHR AN,FLOOR(AA)
- IF BT AND 4 THEN SPCHR AN,FLOOR(AA)+3
- RETURN
- '-------------BUTTON CONTROL
- @BTNCTR
- 'PRINT "JUMP";JUMP
- BT=STKANDBTN()
- X=AX:Y=AY:GOSUB @JMNCHK
- IF HIT>32 THEN @BTNCTR2
- SPN=SPHITSP(AN)
- IF SPN!=-1 then
- IF SPVAR(SPN,0)>=6 THEN
- SPOFS SPN OUT X,Y
- IF AY<=((Y-SZ)+4) THEN @BTNCTR2
- ENDIF
- ENDIF
- '---IN THE SKY
- G=0.25
- IF BT AND 16 THEN G=0.125
- AY1=AY1+G
- IF BT AND 4 THEN AX1=AX1-0.025
- IF BT AND 8 THEN AX1=AX1+0.025
- RETURN
- '---ON THE GROUND
- @BTNCTR2
- AY1=0
- AX1=AX1-(0.05*SGN(AX1))
- IF BT AND 4 THEN AX1=AX1-0.1
- IF BT AND 8 THEN AX1=AX1+0.1
- IF ABS(AX1)<0.05 THEN AX1=0
- IF ABS(AX1)>2 THEN AX1=SGN(AX1)*2
- IF BT AND 4+8 THEN
- AA=AA+0.3 'ANIME
- IF AA>=3 THEN AA=AA-1
- ENDIF
- IF JUMP THEN
- IF (BT AND 16)==0 THEN JUMP=0
- ELSE
- IF (BT AND 16) THEN
- AY1=-4.5
- BEEP 8,-500
- JUMP=1
- ENDIF
- ENDIF
- RETURN
- '-------------- JIMEN CHECK
- @JMNCHK
- Y=Y+SZH+2
- X=X-SZH:GOSUB @BGCHK
- HIT=CH
- X+X+SZH:GOSUB @BGCHK
- HIT=HIT OR CH
- RETURN
- '----------------- BG CHECK
- @BGCHK
- TX=FLOOR((X+BX)/16)
- TY=FLOOR(Y/16)
- IF TX<0 THEN TX=0
- IF TY<0 THEN TY=0
- IF TX>=BGW THEN TX=BGW-1
- IF TY>=BGH THEN TY=BGH-1
- CH=BGGET(LAY,TX,TY)
- RETURN
- '----------------- BG SCROLL
- @BGSCR
- IF GOAL THEN
- IF AX>GRW-24 THEN AX=GRW-24
- RETURN
- ENDIF
- WHILE 1
- IF AX<GRW/2 THEN BREAK
- AX=AX-1
- 'SLIDE ENEMY
- FOR I=DN TO (DN+DMAX-1)
- SPOFS I OUT X,Y,Z
- IF Y==NONE THEN CONTINUE
- X=X-1
- SPOFS I,X,Y
- NEXT
- IF (BX MOD 16)==0 THEN
- FOR Y=0 TO BGH-1
- X=(BX+400)/16
- IF X>=BXMAX THEN BREAK
- C=MAP[X,Y]-ASC("A")
- IF (X>=0) AND (C<CMAX) THEN
- NX=400+16
- NY=Y*16+16
- NZ=-63
- NC=C
- GOSUB @TEKIBORN
- ENDIF
- 'PRINT "MAP";MAP[X,Y]
- NEXT
- ENDIF
- BX=BX+1
- IF BX>BXMAX THEN
- BX=BXMAX
- IF GOAL==0 THEN
- BGMPLAY 5
- MSG$="G O A L!!"
- GOAL=1
- ENDIF
- ENDIF
- BGOFS LAY,BX,BY
- 'BGOFS 0,BX*2,BY
- 'BGOFS 2,BX/2,BY
- 'BGOFS 3,BX/4,BY
- BGOFS 0,BX,BY
- BGOFS 2,BX,BY
- BGOFS 3,BX,BY
- WEND
- RETURN
- '-----------------------TEKI
- @TEKICTR
- FOR I=DN TO (DN+DMAX-1)
- SPOFS I OUT VX,VY
- IF VY==NONE THEN CONTINUE
- TN =SPVAR(I,0) 'TYPE NO.
- TIM=SPVAR(I,1) 'TIME
- X1 =SPVAR(I,2) 'X1
- Y1 =SPVAR(I,3) 'Y1
- TMP=SPVAR(I,4) 'TEMP
- GOSUB JMPTBL$[TN]
- IF (VX<-32) OR (VX>GRW+128) OR (VY>GRH+32) THEN
- VY=NONE
- ENDIF
- SPOFS I,VX,VY
- ANI=FLOOR(TIM/8) MOD ANImax[TN]
- SPCHR I,ANInum[TN]+ANI
- TIM=TIM+1
- SPVAR I,1,TIM
- SPVAR I,2,X1
- SPVAR I,3,Y1
- SPVAR I,4,TMP
- 'CHECK HIT
- if SPHITSP(i)==AN then
- gosub HITPRG$[tn]
- ENIF
- NEXT
- RETURN
- '-------
- @ridebs
- SxA=SGN(AX-VX)
- SyA=SGN(ay-vy)
- DXA=ABS(AX-VX)
- DYA=ABS(AY-VY)
- if AY<=((vY-SZ)+4) then
- ax=ax+x1
- endif
- IF DYA>DXA THEN
- IF DYA<=(SZ-2) THEN
- AY=AY+((SZ-1)-DYA)*SYA
- ENDIF
- ELSE
- IF DXA<=(SZ-2) THEN
- AX=AX+(SZ-2)-DXA)*SXA
- AX1=0
- ENDIF
- ENDIF
- ENDIF
- return
- '----
- @getcoin
- VY=NONE
- SPOFS I,VX,VY
- BEEP 7
- SCORE=SCORE+100
- return
- '----
- @SETOVR
- IF DEBUG THEN RETURN
- OVR=1
- return
- '-----------
- '0:(TYPE A)GHOST
- @ARG0
- IF TIM==0 THEN
- X1=-1
- ENDIF
- X=VX+X1*SZH:Y=VY
- GOSUB @BGCHK
- IF CH>32 THEN X1=-X1
- X=VX:Y=VY+SZH
- GOSUB @BGCHK
- IF CH>32 THEN Y1=-4
- Y1=Y1+0.1
- VX=VX+X1
- VY=VY+Y1
- RETURN
- '-----------
- '1:(TYPE B)COIN
- @ARG1
- RETURN
- '-----------
- '2:(TYPE C)ROBOT
- @ARG2
- IF TMP==0 THEN
- IF RND(20)==0 THEN X1=-1:TMP=64
- ELSE
- TMP=TMP-1
- IF TMP==0 THEN X1=0
- ENDIF
- X=VX+SZH*X1
- Y=VY
- GOSUB @BGCHK
- IF CH>32 THEN X1=-X1
- X=VX
- Y=VY+SZH
- GOSUB @BGCHK
- IF CH<=32 THEN Y1=Y1+0.1 ELSE Y1=0
- VX=VX+X1
- VY=VY+Y1
- RETURN
- '-----------
- '3:(TYPE D)INO
- @ARG3
- IF X1==0 THEN
- IF ABS(AX-VX)<128) THEN X1=-0.3
- ELSE
- X1=X1-0.03
- ENDIF
- X=VX
- Y=VY+SZH
- GOSUB @BGCHK
- IF CH<=32 THEN Y1=Y1+0.1 ELSE Y1=0
- VX=VX+X1
- VY=VY+Y1
- RETURN
- '-----------
- '4:(TYPE E)TOGE
- @ARG4
- IF Y1==0 THEN
- IF ABS(AX-VX)<48 THEN Y1=1
- TMP=VY
- ELSE
- IF Y1<0 THEN
- IF TMP>=VY THEN Y1=0
- ELSE
- X=VX
- Y=VY+SZH
- GOSUB @BGCHK
- IF CH<=32 THEN
- Y1=Y1+0.1
- ELSE
- Y1=-1
- ENDIF
- ENDIF
- VY=VY+Y1
- ENDIF
- RETURN
- '-----------
- '5:(TYPE F)FIRE BALL
- @ARG5
- IF Y1>=0 THEN
- IF VY>GRH+16 THEN
- ' VY=GRH+16
- IF RND(60)==0 THEN Y1=-5
- RETURN
- ENDIF
- ENDIF
- VY=VY+Y1
- Y1=Y1+0.1
- RETURN
- '-----------
- '6:(TYPE G)BASE
- @ARG6
- IF X1==0 THEN X1=-1
- GOSUB @ARGSLIDE
- RETURN
- '-----------
- '7:(TYPE H)BASE
- @ARG7
- IF X1==0 THEN X1=1
- GOSUB @ARGSLIDE
- RETURN
- '-----------
- @ARGSLIDE
- IF TMP==0 THEN X1=-X1
- TMP=(TMP+1) MOD 96
- VX=VX+X1
- 'if SPHITSP(i)==AN then
- ' if ay<vy then
- ' ax=ax+x1
- ' endif
- 'endif
- RETURN
- '-----------
- '8:(TYPE I)
- @ARG8
- @ARG9
- RETURN
- '-----------
- '9:(TYPE J)
- RETURN
- '------------------TEKI BORN
- @TEKIBORN
- 'PRINT "BORN"
- FOR I=DN TO (DN+DMAX-1)
- SPOFS I OUT VX,VY,VZ
- 'PRINT "SPOF";VX,VY
- IF VY!=NONE THEN CONTINUE
- 'PRINT "SP";I,NX,NY
- SPCHR I,ANInum[NC]
- SPOFS I,NX,NY,NZ
- SPDEF ANInum[NC] OUT U,V,W,H
- SPCOL i,-W/2,-H/2,W,H,TRUE
- SPVAR I,0,NC 'CHARA TYPE NO.
- SPVAR I,1,0 'TIME
- SPVAR I,2,0 'X1
- SPVAR I,3,0 'Y1
- SPVAR I,4,0 'TEMP
- BREAK
- NEXT
- RETURN
- '------------------PRINT SUB
- @PRTSUB
- LOCATE 25-LEN(A$)/2,Y,-200
- PRINT A$
- RETURN
- '-------------HIT ANY BUTTON
- @HITANY
- A$="HIT ANY BUTTON"
- Y=26
- GOSUB @PRTSUB
- VSYNC 20
- WHILE 1
- IF STKANDBTN()==0 THEN BREAK
- WEND
- WHILE 1
- BTN=STKANDBTN()
- IF BTN THEN BREAK
- WEND
- RETURN
- '------
- @READMAP
- BX=0:BY=0:BZ=0
- BGL=4 'BG LAYER MAX
- LAY=1
- LOADSUB "DAT:GAME3"
- BGOFS 0,BX,BY,-200
- BGOFS 1,BX,BY,-62
- BGOFS 2,BX,BY,128
- BGOFS 3,BX,BY,768
- FOR Y=0 TO BGH-1
- FOR X=0 TO BGW-1
- MAP[X,Y]=0
- NEXT
- NEXT
- FOR Y=0 TO BGH-1
- FOR X=0 TO BGW-1
- C=BGGET(LAY,X,Y)
- IF C>=ASC("A") AND C<=ASC("Z") THEN
- MAP[X,Y]=C
- BGPUT LAY,X,Y,0
- ENDIF
- IF C==32 THEN
- BGPUT LAY,X,Y,0
- ENDIF
- NEXT
- NEXT
- SPDEF 0 OUT U,V,W,H
- AX=GRW*1/4:AY=100:AZ=-64
- AX1=0
- AY1=0
- SPSCALE AN,SCL,SCL
- SPCOL AN,-W/2,-H/2,W,H,TRUE
- X=NONE
- Y=NONE
- Z=0
- FOR I=DN TO (DN+DMAX-1)
- SPSET I,6
- SPSCALE I,SCL,SCL
- SPOFS I,X,Y,Z
- NEXT
- MSGCNT=0
- MSG$="S T A G E "+STR$(LVL)
- BGMPLAY 3
- GOAL=0
- CLS
- A$="[x x]MOVE [A]JUMP"
- Y=28
- GOSUB @PRTSUB
- TIMER=300
- RETURN
- '---
- DEF LOADSUB N$
- ID=(ASC("M")<<24)
- ID=(ASC("A")<<16) OR ID
- ID=(ASC("P")<<8) OR ID
- ID=(ASC(":")) OR ID
- H_ID=0:H_VR=1:H_R2=2:H_LY=3
- H_DW=4:H_DH=5:H_MX=6:H_MY=7
- ATRMAX=32*32
- DIM ATR%[ATRMAX]
- HEADMAX=8
- MAPMAX=16383
- ' IF CHKFILE(N$)==FALSE THEN RETURN
- ATRSIZE=ATRMAX DIV 4
- WMAX=HEADMAX+ATRSIZE+(MAPMAX*4)
- DIM W%[WMAX]
- '---
- SDLOAD N$,W%
- ' LOAD N$,W%
- '-- HEADER
- IF W%[H_ID]!=ID THEN
- PRINT "ERROR< BAD ID >"
- RETURN
- ENDIF
- BGL=W%[H_LY]
- DW=W%[H_DW]:DH=W%[H_DH]
- MX=W%[H_MX]:MY=W%[H_MY]
- BGW=DW*MX:BGH=DH*MY:MAX=BGW*BGH
- IF MAX>16383 THEN
- PRINT "BG CHIP OVER:";MAX
- RETURN
- ENDIF
- IF BGL<1 OR BGL>4 THEN RETURN
- '---
- DISPLAY 0
- FOR L=0 TO BGL-1
- ' BGCLR 1
- BGSCREEN L,BGW,BGH
- BGOFS L,0,0,0
- BGSCALE L,1,1
- BGSHOW L
- NEXT
- '--- ATR[]
- TOP=HEADMAX
- FOR I=0 TO ATRMAX-1 STEP 4
- ATR%[I+0]=W%[TOP] AND &HFF
- ATR%[I+1]=(W%[TOP]>>8) AND &HFF
- ATR%[I+2]=(W%[TOP]>>16) AND &HFF
- ATR%[I+3]=(W%[TOP]>>24) AND &HFF
- TOP=TOP+1
- NEXT
- '--- TMP0[]-TMP3[]
- ' DISPLAY 0
- BGCLR
- DIM TMP%[BGH*BGW]
- FOR I=0 TO BGL-1
- FOR Y=0 TO BGH-1
- FOR X=0 TO BGW-1 STEP 2
- O=X+Y*BGW
- TMP%[O+0]=W%[TOP] AND &HFFFF
- TMP%[O+1]=(W%[TOP]>>16) AND &HFFFF
- TOP=TOP+1
- NEXT
- NEXT
- BGLOAD I,TMP%
- NEXT
- END
- '-----
- DEF STKANDBTN()
- SLV=0.2 'THRESHOLD
- BTN=BUTTON()
- STICK OUT SX,SY
- IF (SY>SLV) THEN BTN=BTN OR 1
- IF (SY<-SLV) THEN BTN=BTN OR 2
- IF (SX<-SLV) THEN BTN=BTN OR 4
- IF (SX>SLV) THEN BTN=BTN OR 8
- RETURN BTN
- END
- '----
- '
- '
- '
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement