Super-Mario-HP© assembly game with sources
Copyright © Julien Meyer - 21 nov 1999

browse | download | Back

CODE
{
DC MKSTR $05B7D
DC ECRAN $8068D

DEFINE SMAX #15
DEFINE LMAX #4

DCCP 4 FLAG01
DCCP 3 VIE
DCCP 2 MCLIPH
DCCP 2 MCLIPB
DCCP 5 MX
DCCP 5 MY
DCCP 3 COIN
DCCP 1 SCROL.COUNTER
DCCP 5 LEVEL.SURFACE
DCCP 5 LEVEL.DATA
DCCP 2 TICK
DCCP 2 TICK.COUNTER
DCCP 2 M.ANIM
DCCP 2 T.ANIM
DCCP 5 @LIFT
DCCP 3 POSX
DCCP 3 STAGE
DCCP 5 LEVEL
DCCP 5 CUBES
DCCP 2 MJUMP
DCCP 5 STACK
DCCP 5 START

DCCP 5 STABLE
DCCP 2 STYPE
DCCP 3 SDATA
DCCP 5 SX
DCCP 5 SY
DCCP 5 AX
DCCP 5 AY


SAVE
INTOFF

LA(3)#1
D0=(5)STAGE DAT0=A.X
AD1EX D0=(5)STACK DAT0=A.A

*NEXTUP
D0=(5)STACK A=DAT0.A
D1=A A=DAT1.A
?A=0.A GOYES BAD
D0=A A=DAT0 A
LC(5)$02A2C
?C=>A.A GOYES BAD

SKIP
{
*BAD
{ GOSUBL KEYS UPC }
GOLONG QUIT
}

A=DAT1.A A+16.A
D0=(5)LEVEL DAT0=A.A

LC(5)#4800*#2
GOSBVL =MKSTR
AD0EX D0=A R0=A.W

LC(5)#4800-#1/#16
A=0.W
{
DAT0=A.W
D0+16
C-1.A UPNC
}

A=R0.A
A+1.A ABIT=0.0
D0=(5)@LIFT DAT0=A.A
LC(5)#200 A+C.A
D0=(5)STABLE DAT0=A.A
LC(5)#200 A+C.A
R0=A.W
LC(5)$880 A+C.A
R1=A.W
LC(5)$880 A+C.A
D0=(5)LEVEL.SURFACE DAT0=A A
LC(5)$880 A+C.A
D0=(5)LEVEL.DATA DAT0=A.A

SKUBL {
INCLUDE GFX
} C=RSTK C+20.A R2=C.W

SKUBL {
INCLUDE DATAS
} C=RSTK C+20.A
D0=(5)CUBES DAT0=C.A

D1=00128 LC 3F DAT1=C B
D1=0010C A=DAT1.P ABIT=0.3 DAT1=A.P
A=R0.A
D0=00120 DAT0=A.A

GOSUBL RESET.CONTER
GOTOL PRESENTATION

*REPLAY
D1=(5)LEVEL A=DAT1.A D1=A
D0=(5)LEVEL.DATA A=DAT0.A D0=A
LC 500 B=C.X
LC 30
{
A=DAT1 B
?C#A.B { A=0.B }
DAT0=A B
D0+2 D1+2
B-1.X UPNC
}

GOSUBL CL_LIFT
GOSUBL CLEAR.STABLE
CLRST

A=0.A
D0=(5)FLAG01 DAT0=A 4
D0=(5)SCROL.COUNTER DAT0=A.P

% VARIABLE ANIM
D0=(5)M.ANIM DAT0=A.B
D0=(5)T.ANIM DAT0=A.B

% VARIABLE CLIP MARIO
D0=(5)MCLIPH DAT0=A.B
D0=(5)MCLIPB DAT0=A.B

% FPS
LA(2)#04
D0=(5)TICK DAT0=A.B
D0=(5)TICK.COUNTER DAT0=A.B

%INITIALIZE DISPLAY
GOSUBL DISP.COL.D
GOSUBL DISP.LEVEL
GOSUBL DISP.PANEL
GOSUBL VIES
GOSUBL COINS
GOSUBL STAGES
GOSUBL FLIP

%MAIN GAME LOOP
{
GOSUBL FLAGS
GOSUBL LIFTS
GOSUBL MARIO
GOSUBL SPRITES
GOSUBL FLIP

% LC 04000 { C-1.A UPNC }

LC 010 OUT=C=IN
?CBIT=1.0 EXIT
UP
}
*STOP
{ GOSUBL KEYS UPC }
GOSUBL RESET.CONTER
GOLONG PRESENTATION

*QUIT
P=0 SETHEX
%END GAME BACK RPL
{ GOSUBL KEYS UPC }
LC 37
D0=00128 DAT0=C.P
%LES INDICATEURS
D1=0010C A=DAT1.P
ABIT=1.3 DAT1=A.P
%LA MEMOIRE VIDEO
D0=(5)ECRAN A=DAT0.A
D0=00120 DAT0=A.A
INTON2
LOADRPL

*MARIO
%DECALAGE DES OBJETS
ST=0.7

% MARIO=>BACK-BUFFER
D0=(5)MCLIPB
C=DAT0.B D=C.B

% READ SPRITE
A=R2.A C=0.A
D1=(5)M.ANIM C=DAT1.B
C+C.A C+C.A A+C.A
% SET CLIP UP
C=0.A
D1=(5) MCLIPH C=DAT1.B
B=C.A CSL.A C+B.A
C+C.A A+C.A
R4=A.W

LC 09
?B<C.B
{
GOTO BIG_CLIP
}
C-B.B B=C.B

% SET CLIP DOWN
C=D.B
?C=>B.B GOYES BIG_CLIP
B-C.B

A=0.A C=0.A
D0=(5)MX A=DAT0.B
D0=(5)MY C=DAT0.B
GOSUBL DISP.A.C.R4.B

*BIG_CLIP

%MOVEMENTS FROM KEYS
GOSUBL TESTD
GOSUBL TESTG
%NO MOVE=>STAND-BY
GOSUBL KEYS
SKIPC
{
A=0.B
D0=(5)M.ANIM DAT0=A.B
}
% JUMPING
LC 040 OUT=C=IN
?CBIT=0.4
{
%DEJA PRESSED
?ST=1.2 EXIT
ST=1.2
%DEJA ON AIR
?ST=1.0 EXIT
?ST=1.3 EXIT

ST=1.0
%SAUT OU CHUTE
ST=1.1
A=0.B
D0=(5)MJUMP DAT0=A.B
}
SKELSE
{
ST=0.2
}
%ON GERE LE SAUT/CHUTE
?ST=1.0
{
?ST=1.3 GOYES AC
GOSUBL SOL
SKIPC
{
*AC
ST=1.0
%SAUT OU CHUTE
ST=0.1
LA 08
D0=(5)MJUMP DAT0=A.B
}
}
SKELSE
{
GOSUBL JUMPING
}
% TEST LOST %%%%%%%%%%
{
D0=(5)MCLIPB A=DAT0.B
LC 09
?A<C.B EXIT
GOLONG MLOST
}
RTN

*FLIP
%BACK-BUFFY=>FRONT-BUFY
A=R1.A
D0=00120 DAT0=A.A
%WAIT VBL
A=0.W
D0=00128
{
A=DAT0.6
?A=>0.W UP
}
%CLEAR NEW BACK-BUFFY
D0=(5)LEVEL.SURFACE A=DAT0.A
D1=A A=R0.A D0=A LC 3F
{
A=DAT1.W DAT0=A.W
D0+16 D1+16
A=DAT1.10 DAT0=A.10
D0+18 D1+18
C-1.B UPNC
}
%FLIP VIDEO POINTERS
A=R0.A AR1EX.A
R0=A.W
RTN

*JUMPING
%MARIO SE POSE?
?ST=1.1
{
?ST=1.3 EXIT
GOSUBL SOL EXITNC
ST=0.0
% REAJUSTE MY
GOSUBL FIXSOL
RTN
}
SKELSE
{
%MARIO SE COGNE?
?ST=1.3 EXIT
GOSUBL CIEL
EXITNC
ST=0.0
% REAJUSTE MY
GOSUBL FIXCIEL
RTN
}
% EQS VALUES
SKUB
{
$/05 $/05 $/04
$/03 $/03 $/02
$/01 $/01 $/01
$/00 $/00 $/00
}
C=RSTK A=0.A
D0=(5)MJUMP A=DAT0.B
A+A.A C+A.A D0=C
C=0.A C=DAT0.B
%MOVE SPRITE
D0=(5)MY A=DAT0.B
?ST=1.1
{
D=C.B
D1=(5)MCLIPH C=DAT1.B
?C=0.B
{
?C>D.B
{
C=0.B DAT1=C.B
D-C.B C=D.B
A+C.B DAT0=A.B
}
SKELSE
{
C-D.B DAT1=C.B
}
}
SKELSE
{
C=D.B
A+C.B
}
}
SKELSE
{
?C>A.B
{
A-C.B
}
SKELSE
{
D1=(5)MCLIPH A=DAT1.B
A+C.B DAT1=A.B
A=0.B
}
}
%CLIPPING UP&DOWN
LC 40 ?A=>C.B
{ A=C.B }
LC 36 ?A=>C.B
{
B=C.B C=A.B
C-B.B
D1=(5)MCLIPB DAT1=C.B
}
DAT0=A.B
%UPDATE JUMP
D0=(5)MJUMP A=DAT0.B
%SAUT OU CHUTE
?ST=0.1
{
LC(2)#11 ?A=>C.B
{ ST=0.0 }
SKELSE
{ A+1.B DAT0=A.B }
}
SKELSE
{
?A=0.B =>
{
%PAS DE SOL => CHUTE
?ST=1.3 EXIT
GOSUBL SOL EXITNC
ST=0.0
% REAJUSTE MY
GOSUBL FIXSOL
}
SKELSE
{
A-1.B DAT0=A.B
}
}
RTN

*MLOST
C=RSTK C=RSTK
GOSUBL FLIP

%ON SE REMET AU DEBUT
A=0.A C=0.A
D1=(5)LEVEL.DATA
D0=(5)POSX A=DAT0.X
LC(3)$40 ?A<C.X
{
A=0.A D1=(5)LEVEL.DATA
D0=(5)POSX A=DAT0.X
A+A.A C=DAT1.A
C-A.A DAT1=C.A
GOSUBL RESET.1
}
SKELSE
{
A=0.A D1=(5)LEVEL.DATA
D0=(5)POSX A=DAT0.X
A+A.A C=DAT1.A
C-A.A DAT1=C.A
GOSUBL RESET.1
}
D0=(5)VIE A=DAT0.B
?A=>0.B =>
{
A-1.B
DAT0=A.B
}
SKELSE
{
%GAME-OVER
GOLONG STOP
}
GOLONG REPLAY

*DISP.LEVEL
D0=(5)LEVEL.SURFACE A=DAT0.A
R3=A.W

LC(2)#13 D=C.B % X
LC(2)#08 B=C.B % Y

D0=(5)LEVEL.DATA A=DAT0.A D0=A
CD0EX RSTK=C D0=C

*BCL
A=0.A A=DAT0.B
%SI CEST MARIO
LC(2)#25 ?A=>C.B
{
LA(2)#13 C=D.B A-C.B
ASL.A ASRB.A
D0=(5)MX DAT0=A.B

LA(2)#08 C=B.B A-C.B
ASL.A ASRB.A A-2.B
D0=(5)MY DAT0=A.B
A=0.A
GOTO NODISP
}
%SI CEST UNE TORTUE
LC(2)#26 ?A=>C.B
{
LA(2)#1
LC(3)$264
GOSUBL ADDOBJET

A=0.A
GOTO NODISP
}
%SI CEST UN KOOPA
LC(2)#44 ?A=>C.B
{
LA(2)#2
LC(3)$270
GOSUBL ADDOBJET

A=0.A
GOTO NODISP
}
%SI CEST UN LIFT
LC(2)#35 ?A=>C.B
{
GOSUBL ADD_LIFT
A=0.A
GOTO NODISP
}

*NODISP
D1=(5)CUBES C=DAT1.A
ASL.A A+A.A
C+A.A D1=C
A=R3.A D0=A
LC 7
{
A=DAT1.B DAT0=A.B
D0+34 D1+4 C-1.P
UPNC
}
*NDISP
A=R3.A A+2.A R3=A.W
C=RSTK C+2.A RSTK=C
D0=C

D-1.B
?D=>0.B =>
{ GOTO BCL }

LC(2)#13 D=C.B

C=RSTK
LA 00140 C+A.A
C-16.A C-10.A
RSTK=C D0=C

A=R3.A A-16.A A-10.A
LC 00110 A+C.A R3=A.W

B-1.B ?B=>0.B => { GOTO BCL }
C=RSTK
RTN

*DISP.COL.D

D0=(5)LEVEL.SURFACE C=DAT0.A
C+26.A D=C.A

LC(2)#8 B=C.B % Y

D0=(5)LEVEL.DATA A=DAT0.A
A+26.A R4=A.W
{
C=R4.A D0=C
A=0.A A=DAT0.B

%TORTUE ?
LC(2)#26 ?A=>C.B
{
LA(2)#1
LC(3)$264
GOSUBL ADDOBJET2

A=0.A
GOTO NODISP2
}
%KOOPA ?
LC(2)#44 ?A=>C.B
{
LA(2)#2
LC(3)$270
GOSUBL ADDOBJET2

A=0.A
GOTO NODISP2
}
%SI CEST UN LIFT
LC(2)#35 ?A=>C.B
{
GOSUBL ADD2_LIFT
A=0.A
GOTO NODISP2
}

*NODISP2

D1=(5)CUBES C=DAT1.A
ASL.A A+A.A
C+A.A D1=C
C=D.A
D0=C
LC 7
{
A=DAT1.B DAT0=A.B
D0+34 D1+4 C-1.P
UPNC
}

LC 00110 D+C.A

C=R4.A
LA 00140 C+A.A
R4=C.W
B-1.B ?B=0.B { UP2 }
}
RTN

*SCROLG
% POUR LES OBJETS
ST=1.7
%UN POINTER SUR COLONE
D0=(5)LEVEL.SURFACE A=DAT0.A D0=A
LC 3F
{
A=DAT0.W ASRB.W DAT0=A.15
D0+15 A=DAT0.14 ASRB.W
DAT0=A.13
D0+19
C-1.B UPNC
}
%ON COMPTE LES SCROLS
D0=(5)SCROL.COUNTER A=DAT0.P
LC 7 ?A=C.P
{
A+1.P DAT0=A.P
}
SKELSE
{
%UNE NOUVELLE COLONNE
A=0.P DAT0=A.P

D0=(5)POSX A=DAT0.X
LC(3)$92 ?A<C.X
{
ST=1.4
D0=(5)SCROL.COUNTER
LC 8 DAT0=C.P
}
SKELSE
{
A+1.X DAT0=A.X
D0=(5)LEVEL.DATA A=DAT0.A
A+2.A DAT0=A.A
}
GOSUBL DISP.COL.D
}
RTN

*DISP.PANEL
C=R2.A C+26.A D1=C
D=C.A
A=R0.A A+26.A D0=A
LC 3F
{
A=DAT1.8 DAT0=A.8
D0+34 D1+34
C-1.B UPNC
}
C=D.A D1=C
A=R1.A
A+16.A A+10.A D0=A
LC 3F
{
A=DAT1.8 DAT0=A.8
D0+34 D1+34
C-1.B UPNC
}
RTN

*NUMBER.AC
?C=0.P RTNYES

% A/B=NUMBER C/D=SIZE
% R4.A = POS

B=A.W
D=C.P
C=0.A C=D.P C-1.A
A=R4.A A+C.A R4=A.W
%FONT DS TABLE SPRITES
A=R2.A
LC 00176 A+C.A
R3=A.W

{
?D=0.P EXIT
C=R3.A
A=0.A A=B.P
C+A.A D1=C

A=R4.A D0=A LC 5
{
A=DAT1.P DAT0=A.P
D1+34 D0+34 C-1.P
UPNC
}
C=R4.A C-1.A R4=C.W
BSR.W D-1.P UP
}
RTN

*SPRITES
C=0.A R3=C.W
LC(1)#15
{
RSTK=C
C=R3.A
GOSUBL SP.LOAD SKIPC
{
GOSUBL DISP.SPRITE
C=R3.A
GOSUBL SP.SAVE
}
C=R3.A C+11.A R3=C.W
C=RSTK ?C=0.P EXIT
C-1.P
UP
}
RTN

*LIFTS
C=0.A R3=C.W
LC(1)LMAX
{
RSTK=C
C=R3.A
GOSUBL LOAD_L SKIPC
{
GOSUBL LIFT
C=R3.A
GOSUBL SAVE_L
}
C=R3.A C+6.A R3=C.W
C=RSTK ?C=0.P EXIT
C-1.P
UP
}
RTN

*DISP.A.C.R4.B
D=C.A
C=B.B RSTK=C
B=A.A
C=D.A
% D0 POINTER ON SCREEN
A=C.A CSL.A C+A.A
C+C.A
A=R1.A A+C.A C=B.A
D=C.A CSRB.A CSRB.A
A+C.A D0=A
% D1 POINTER ON SPRITE
A=R4.A D1=A
% AFFICHAGE SPRITE
C=RSTK B=C.B
{
D1+2

A=0.X
A=DAT1.B
C=D.P
?CBIT=1.0 => { A+A.X }
?CBIT=1.1 => { A+A.X A+A.X }

A=-A-1.X
C=DAT0.X
C&A.X
RSTK=C
D1-2

A=0.X
A=DAT1.B
C=D.P
?CBIT=1.0 => { A+A.X }
?CBIT=1.1 => { A+A.X A+A.X }

C=RSTK
A!C.X
DAT0=A.X
D0+34 D1+34
B-1.P UPNC
}
RTN

*CLEARED
C=RSTK C=RSTK C=RSTK
D0=(5)STAGE A=DAT0.X
A+1.X DAT0=A.X

D0=(5)STACK A=DAT0.A
A+5.A DAT0=A.A
GOLONG NEXTUP

*ADD_LIFT
%FIND PLACE
D0=(5)@LIFT
A=DAT0.A D0=A

C=0.P
{
LA(1)LMAX
?C=A.P RTNYES
A=DAT0.P ?A=0.P EXIT
D0+6 C+1.P UP
}

LC 1 DAT0=C.P D0+1
%CALCUL POSITION

LA(2)#13 C=D.B A-C.B
ASL.A ASRB.A
DAT0=A.B
D0+2
LA(2)#08 C=B.B A-C.B
ASL.A ASRB.A
DAT0=A.B
RTN

*ADD2_LIFT
%FIND PLACE
D0=(5)@LIFT
A=DAT0.A D0=A

C=0.P
{
LA(1)LMAX
?C=A.P RTNYES
A=DAT0.P ?A=0.P EXIT
D0+6 C+1.P UP
}

LC 1 DAT0=C.P D0+1
%CALCUL POSITION

LA(2)#13
ASL.A ASRB.A
DAT0=A.B D0+2

LA(2)#8 C=B.B A-C.B
ASL.A ASRB.A
DAT0=A.B
RTN

*DISP.SPRITE
?ST=0.7 GOYES NDT.2
%ON SCROL LE SPRITE
D0=(5)SX A=DAT0.B
?A=>0.B
{
ST=0.5 % DEAD SPRITE
}
SKELSE
{
A-1.B DAT0=A.B
}
*NDT.2

C=R3.A
D0=(5)STABLE A=DAT0.A
A+C.A D0=A D0+1 A=0.A
A=DAT0.B A-1.A
C=A.A A+A.A A+C.A A+A.A

SKUBL {
GOLONG OBJ.TORTLE
GOLONG OBJ.KOOPA
GOLONG OBJ.CHAMP.UP
GOLONG OBJ.STAR.UP
GOLONG OBJ.HEART.UP

} C=RSTK C+A.A PC=C
*FIN

RTN

*SP.LOAD
D0=(5)STABLE A=DAT0.A
A+C.A D0=A A=DAT0.P
?A=>0.P
{
ST=0.5 RTNSC
}
ST=1.5

ST=0.9 ST=0.10
{
LC 1 ?A=>C.P { ST=0.6 EXIT2 }
LC 2 ?A=>C.P { ST=1.6 EXIT2 }
LC 3 ?A=>C.P { ST=1.9 EXIT2 }
LC 4 ?A=>C.P { ST=0.6 ST=1.9 ST=1.10 EXIT2 }
LC 5 ?A=>C.P { ST=1.6 ST=1.9 ST=1.10 EXIT2 }
}
D0+1 %TYPE
D0+2 %DATA
A=0.A A=DAT0.X R4=A.W
D0+3

A=DAT0.B D0+2
D1=(5)SX DAT1=A.B

A=DAT0.B D0+2
D1=(5)SY DAT1=A.B

A=DAT0.P
?ABIT=0.2 { ST=0.8 }
SKELSE { ST=1.8 }
RTNCC

*SP.SAVE
D0=(5)STABLE A=DAT0.A
A+C.A D0=A

?ST=1.5
{
%SPRITE DEATH
C=0.P
}
SKELSE
{
?ST=1.6
{
LC 1
}
SKELSE
{
LC 2
}
%MODE CARAPACE
?ST=1.10 => { C+3.P EXIT2 }
?ST=1.9 => { LC 3 }
}
DAT0=C.P
D0+1
D0+2
D0+3

D1=(5)SX A=DAT1.B
DAT0=A.B D0+2

D1=(5)SY A=DAT1.B
DAT0=A.B D0+2

A=DAT0.P
?ST=0.8 => { ABIT=0.2 }
SKELSE { ABIT=1.2 }
DAT0=A.P
RTN

*CL_LIFT
D0=(5)@LIFT
A=DAT0.A D0=A
C=0.W
LA(1)LMAX
{
?A=0.P EXIT
A-1.P
DAT0=C.6 D0+6
UP
}
RTN

*TORTLE_HIT
?ST=1.9
{
%APPLATIE
ST=1.9
}
SKELSE
{
ST=1.10
%POUSSEE: SENS ?
D0=(5)SX A=DAT0.B
D0=(5)MX C=DAT0.B
?A>C.B
{
ST=0.6
}
SKELSE
{
ST=1.6
}
}
%MARIO REBONDIT
?ST=1.3 RTNYES
ST=1.0
ST=1.1
LA 02
D0=(5)MJUMP DAT0=A.B
RTN

*LOST_LIFE
?ST=1.3 RTNYES
LC 08000 { C-1.A UPNC }
ST=1.3

ST=1.0
ST=1.1
A=0.B
D0=(5)MJUMP DAT0=A.B
RTN

*KEYS
LC 1FF
OUT=C=IN
?C=0.B { RTNSC }
RTNCC

*SOL
A=0.A C=0.A
D0=(5)MCLIPH C=DAT0.B
?C=0.B
{
% LA(2)#8 ?C=>A.B
% { A=0.B EXIT2 }
% A-C.B
A=0.B
}
SKELSE
{
D0=(5)MY A=DAT0.B
}
A+2.B
C=A.B
ASRB.A ASRB.A ASRB.A
ASL.A ASRB.A C-A.A
LA(2)#5 ?C>A.B
=> { RTNCC }

ST=1.12
ST=0.11

D0=(5)MY A=DAT0.B
LC(2)#54 ?A=>C.B
=> { RTNCC }

%D0=(5)MCLIPB A=DAT0.B
%?A=0.B { RTNCC }

A=0.A
D0=(5)MCLIPH A=DAT0.B
LC 0A ?A=>C.B { RTNCC }
LC(5)#10 C-A.A

A=0.A D0=(5)SCROL.COUNTER
A=DAT0.P A+5.A

B=A.A D=C.A

% (Y/8)*320+(X/8)*2
C=0.A
D0=(5)MY C=DAT0.B
C+D.A

CSRB.A CSRB.A CSRB.A
CSL.A A=C.A CSL.A
A+A.A A+A.A C+A.A

A=0.A
D0=(5)MX A=DAT0.B
A+B.A
ASRB.A ASRB.A ASRB.A
A+A.A C+A.A

% ON LIT LE CUBE
D0=(5)LEVEL.DATA A=DAT0.A
A+C.A D0=A
A=0.A A=DAT0.B

%SUR UN PIC ?
LC(2)#04 ?A=>C.B
{
GOSUBL LOST_LIFE
RTNCC
}
LC(2)#03 ?A=>C.B
{
%MARIO REBONDIT
?ST=1.3 RTNYES
ST=1.0
ST=1.1
A=0.B %LA 04
D0=(5)MJUMP DAT0=A.B
RTNSC
}
%PIECE
LC(2)#07 ?A=>C.B { GOLONG COINUP }

D1=(5)CUBES C=DAT1.A
ASL.A A+A.A
C+A.A D1=C
D1+2 A=DAT1.B

?ABIT=1.1 => { RTNSC }
RTNCC


*FIXSOL
D0=(5)MY A=DAT0.B

% A+3.B %% ...

A+2.B
ASRB.B ASRB.B ASRB.B
ASL.A ASRB.A
LC(2)#02 ?A<C.B
{
A-2.B
}
SKELSE
{
D1=(5)MCLIPH DAT1=C.B
A=0.B
}
DAT0=A.B
RTN

*FIXCIEL
D0=(5)MY A=DAT0.B
A+8.B
ASRB.B ASRB.B ASRB.B
ASL.A ASRB.A
A-2.B
DAT0=A.B
RTN

*MURD
ST=1.12
ST=0.11

A=0.A D0=(5)SCROL.COUNTER
A=DAT0.P A+8.A

LC(5)#03

B=A.A D=C.A

% (Y/8)*320+(X/8)*2
C=0.A
D0=(5)MY C=DAT0.B
C+D.A
CSRB.A CSRB.A CSRB.A
CSL.A A=C.A CSL.A
A+A.A A+A.A C+A.A

A=0.A
D0=(5)MX A=DAT0.B
A+B.A %A+4.A
ASRB.A ASRB.A ASRB.A
A+A.A C+A.A

% ON LIT LE CUBE
D0=(5)LEVEL.DATA A=DAT0.A
A+C.A D0=A
A=0.A A=DAT0.B

LC(2)#07 ?A=>C.B { GOLONG COINUP }

D1=(5)CUBES C=DAT1.A
ASL.A A+A.A
C+A.A D1=C
D1+2 A=DAT1.B

?ABIT=1.3 => { RTNSC }
RTNCC
%GOLONG TESTING_UP

*MURG
ST=1.12
ST=1.11

D0=(5)MX A=DAT0.B
LC 01 ?A<C.B => { RTNCC }

A=0.A D0=(5)SCROL.COUNTER
A=DAT0.P

LC(5)#03

B=A.A D=C.A

% (Y/8)*320+(X/8)*2
C=0.A
D0=(5)MY C=DAT0.B
C+D.A
CSRB.A CSRB.A CSRB.A
CSL.A A=C.A CSL.A
A+A.A A+A.A C+A.A

A=0.A
D0=(5)MX A=DAT0.B
A+B.A A-1.A
ASRB.A ASRB.A ASRB.A
A+A.A C+A.A

% ON LIT LE CUBE
D0=(5)LEVEL.DATA A=DAT0.A
A+C.A D0=A
A=0.A A=DAT0.B

LC(2)#07 ?A=>C.B { GOLONG COINUP }

D1=(5)CUBES C=DAT1.A
ASL.A A+A.A
C+A.A D1=C
D1+2 A=DAT1.B

LC(2)#07 ?A=>C.B { GOLONG COINUP }

?ABIT=1.2 => { RTNSC }
RTNCC
%GOLONG TESTING_UP

*SOL_T
ST=0.12
ST=0.11

LC(5)#08

A=0.A D0=(5)SCROL.COUNTER
A=DAT0.P A+4.A

B=A.A D=C.A

% (Y/8)*320+(X/8)*2
C=0.A
D0=(5)SY C=DAT0.B
C+D.A

CSRB.A CSRB.A CSRB.A
CSL.A A=C.A CSL.A
A+A.A A+A.A C+A.A

A=0.A
D0=(5)SX A=DAT0.B
A+B.A %A+4.A
ASRB.A ASRB.A ASRB.A
A+A.A C+A.A

% ON LIT LE CUBE
D0=(5)LEVEL.DATA A=DAT0.A
A+C.A D0=A
A=0.A A=DAT0.B

D1=(5)CUBES C=DAT1.A
ASL.A A+A.A
C+A.A D1=C
D1+2 A=DAT1.B

?ABIT=1.1 => { RTNSC }
RTNCC
%GOLONG TESTING_DW

*MURD_T
ST=0.12
ST=0.11

A=0.A D0=(5)SCROL.COUNTER
A=DAT0.P A+8.A

LC(5)#00

B=A.A D=C.A

% (Y/8)*320+(X/8)*2
C=0.A
D0=(5)SY C=DAT0.B
C+D.A
CSRB.A CSRB.A CSRB.A
CSL.A A=C.A CSL.A
A+A.A A+A.A C+A.A

A=0.A
D0=(5)SX A=DAT0.B
A+B.A %A+4.A
ASRB.A ASRB.A ASRB.A
A+A.A C+A.A

% ON LIT LE CUBE
D0=(5)LEVEL.DATA A=DAT0.A
A+C.A D0=A
A=0.A A=DAT0.B

D1=(5)CUBES C=DAT1.A
ASL.A A+A.A
C+A.A D1=C
D1+2 A=DAT1.B

?ABIT=1.3 => { RTNSC }
RTNCC
%GOLONG TESTING_UP

*MURG_T
ST=0.12
ST=0.11

D0=(5)SX A=DAT0.B
LC 01 ?A<C.B => { RTNCC }

A=0.A D0=(5)SCROL.COUNTER
A=DAT0.P

LC(5)#00

B=A.A D=C.A

% (Y/8)*320+(X/8)*2
C=0.A
D0=(5)SY C=DAT0.B
C+D.A
CSRB.A CSRB.A CSRB.A
CSL.A A=C.A CSL.A
A+A.A A+A.A C+A.A

A=0.A
D0=(5)SX A=DAT0.B
A+B.A A-1.A
ASRB.A ASRB.A ASRB.A
A+A.A C+A.A

% ON LIT LE CUBE
D0=(5)LEVEL.DATA A=DAT0.A
A+C.A D0=A
A=0.A A=DAT0.B

D1=(5)CUBES C=DAT1.A
ASL.A A+A.A
C+A.A D1=C
D1+2 A=DAT1.B

?ABIT=1.2 => { RTNSC }
RTNCC
%GOLONG TESTING_UP

*CIEL
ST=1.12
ST=0.11

D0=(5)MCLIPH A=DAT0.B
?A=0.B { RTNCC }

A=0.A D0=(5)SCROL.COUNTER
A=DAT0.P A+4.A
C=0.A
B=A.A D=C.A

% (Y/8)*320+(X/8)*2
C=0.A
D0=(5)MY C=DAT0.B
C+D.A

CSRB.A CSRB.A CSRB.A
CSL.A A=C.A CSL.A
A+A.A A+A.A C+A.A

A=0.A
D0=(5)MX A=DAT0.B
A+B.A
ASRB.A ASRB.A ASRB.A
A+A.A C+A.A

% ON LIT LE CUBE
D0=(5)LEVEL.DATA A=DAT0.A
A+C.A D0=A
A=0.A A=DAT0.B

LC(2)#02 ?A=>C.B
{
%on met un bloc banal
LC(2)#5 DAT0=C.B
GOLONG ADD.CHAMP
}
LC(2)#07 ?A=>C.B { GOLONG COINUP }

D1=(5)CUBES C=DAT1.A
ASL.A A+A.A
C+A.A D1=C
D1+2 A=DAT1.B

?ABIT=1.0 => { RTNSC }
RTNCC
%GOLONG TESTING_UP

*VIES
A=R0.A
LC 00193 A+C.A
R4=A.W
D0=(5)VIE A=DAT0.B
LC 2
GOSUBL NUMBER.AC

A=R1.A
LC 00193 A+C.A
R4=A.W
D0=(5)VIE A=DAT0.B
LC 2
GOLONG NUMBER.AC

*COINS
A=R0.A
LC 0045C A+C.A
R4=A.W
D0=(5)COIN A=DAT0.X
LC 3
GOSUBL NUMBER.AC

A=R1.A
LC 0045C A+C.A
R4=A.W
D0=(5)COIN A=DAT0.X
LC 3
GOLONG NUMBER.AC

*STAGES
A=R0.A
LC 00726 A+C.A
R4=A.W
D0=(5)STAGE A=DAT0.X
LC 3
GOSUBL NUMBER.AC

A=R1.A
LC 00726 A+C.A
R4=A.W
D0=(5)STAGE A=DAT0.X
LC 3
GOLONG NUMBER.AC

*COINUP
%SORTUE ?
?ST=1.12 { RTNCC }

%CLS IN STRING
A=0.B DAT0=A.B
%CLEAR COIN
C=0.A
D0=(5)MY C=DAT0.B
C+D.A

CSRB.A CSRB.A CSRB.A
CSL.A CSRB.A

A=C.A CSL.A C+A.A
C+C.A
D0=(5)LEVEL.SURFACE A=DAT0.A
A+C.A C=0.A
D0=(5)MX C=DAT0.B
C+B.A

?ST=0.11
{
C-1.A ST=0.11
}

CSRB.A CSRB.A CSRB.A
CSL.A CSRB.A

B=A.A
D0=(5)SCROL.COUNTER
A=0.A A=DAT0.P
C-A.A D=C.P
A=B.A

CSRB.A CSRB.A A+C.A
D0=A

SKUB {

} C=RSTK D1=C

LC 7 B=C.P
{
A=DAT1.X
C=D.P
?CBIT=0.0 { A+A.X }
?CBIT=0.1 { A+A.X A+A.X }
A=-A-1.X
C=DAT0.X
A&C.X
DAT0=A.X
D0+34
B-1.P UPNC
}

D0=(5)COIN A=DAT0.X
LC 99
?A<C.B
{
A=0.X DAT0=A.X
D0=(5)VIE A=DAT0.B
SETDEC A+1.B SETHEX
DAT0=A.B
GOSUBL COINS
GOSUBL VIES
RTNCC
}
SETDEC A+1.X SETHEX

DAT0=A.X
GOSUBL COINS
RTNCC

*RESET.CONTER
%VIE
LA 04
D0=(5)VIE DAT0=A.B
%COIN
A=0.X
D0=(5)COIN DAT0=A.X
*RESET.1
%SCROLL X
A=0.X
D0=(5)POSX DAT0=A.X
RTN

*PRESENTATION
A=0.A
D0=(5)START DAT0=A.A

SKUBL {
INCLUDE PRE
} C=RSTK C+20.A R4=C.W

*PRES
A=0.W
D0=(5) $00128
{
A=DAT0 6
?A#0.W UP
}
A=R4.A D1=A
GOSUBL AF
A=0.W
D0=(5) $00128
{
A=DAT0 6
?A#0 W UP
}
A=R4.A
LC 00880 A+C.A D1=A
GOSUBL AF
A=0.W
D0=(5) $00128
{
A=DAT0 6
?A#0 W UP
}
A=R4.A
LC 00880 A+C.A D1=A
GOSUBL AF

D0=(5)START A=DAT0.A
A+1.A DAT0=A.A
LC(5)#8000
?A=>C.A
{
A=R0.A LC(5)$72C
A+C.A D0=A
LC 8 A=0.W
{
DAT0=A.W D0+16
DAT0=A.W D0+16
DAT0=A.B
C-1.P UPNC
}
}
%TEST LA TOUCHE ENTER
LC 010 OUT=C=IN
?CBIT=0.4
{
GOLONG REPLAY
}

%TEST LA TOUCHE DROP
LC 010 OUT=C=IN ?CBIT=0.0
{
GOLONG QUIT
}
GOTO PRES

*AF
A=R0.A D0=A LC 87
{
A=DAT1.W DAT0=A.W
D0+16 D1+16
C-1.B UPNC
}
RTN

*LOAD_L
D0=(5)@LIFT
A=DAT0.A A+C.A D0=A
A=DAT0.P ?A=>0.P
{
ST=0.5 RTNSC
}
ST=1.5

LC 1 ?A=>C.P { ST=0.6 }
LC 2 ?A=>C.P { ST=1.6 }

D0+1 D1=(5)SX
A=DAT0.B DAT1=A.B
D0+2 D1=(5)SY
A=DAT0.B DAT1=A.B
D0+2 A=DAT0.P

?A=0.P { ST=0.8 }
SKELSE { ST=1.8 }
RTNCC

*SAVE_L
D0=(5)@LIFT
A=DAT0.A A+C.A D0=A
?ST=1.5
{
C=0.P
}
SKELSE
{
?ST=1.6
{
LC 1
}
SKELSE
{
LC 2
}
}
DAT0=C.P
D0+1 D1=(5)SX
A=DAT1.B DAT0=A.B
D0+2 D1=(5)SY
A=DAT1.B DAT0=A.B
D0+2
?ST=0.8 => { A=0.P }
SKELSE { LA 1 }
DAT0=A.P
RTN

*LIFT
?ST=1.7 =>
{
%ON SCROL LE LIFT
D0=(5)SX A=DAT0.B
?A=>0.B
{
ST=0.5 % DEAD LIFT
}
SKELSE
{
A-1.B DAT0=A.B
}
}

% READ SPRITE
A=R2.A LC(5)$00374
A+C.A R4=A.W

LC 03 B=C.B

A=0.A C=0.A
D0=(5)SX A=DAT0.B
LC 60 ?A>C.B
{
D0=(5)SY C=DAT0.B
GOSUBL DISP.A.C.R4.B
}

% LOOK AROUND LIFT
ST=0.13
D0=(5)SX A=DAT0.B
D0=(5)MX C=DAT0.B
{
C+6.B ?C<A.B EXIT
A+11.B ?C>A.B EXIT
D0=(5)SY A=DAT0.B
D0=(5)MY C=DAT0.B
C+10.B ?C<A.B EXIT
C-4.B ?C>A.B EXIT
{
?ST=1.1 EXIT
?ST=0.0 EXIT
?ST=1.3 EXIT
ST=0.0
GOSUBL FIXSOL
}
ST=1.13
}

% MOVE LIFT %%%%%%%%%%

?ST=0.8 RTNYES

?ST=0.6
{
%VERS LA DROITE
GOSUBL MURD_T
SKIPNC
{
ST=0.6 EXIT2
}
D0=(5)SX A=DAT0.B
LC(2)
?A=>C.B
{
ST=0.6 EXIT2
}
A+1.B DAT0=A.B

?ST=0.13 => { EXIT2 }

C=ST RSTK=C %R4=C.X
ST=0.7
GOSUBL YD
?ST=0.7
{
GOSUBL LIFT.LEFT
D0=(5)SX A=DAT0.B
A-1.B DAT0=A.B
}
C=RSTK %C=R4.X
?ST=1.4 => { CBIT=1.4 }
ST=C
}
SKELSE
{
%VERS LA GAUCHE
GOSUBL MURG_T
SKIPNC
{
ST=1.6 EXIT2
}
D0=(5)SX A=DAT0.B
?A=>0.B
{
ST=1.6 EXIT2
}
A-1.B
DAT0=A.B

?ST=0.13 EXIT
GOSUBL YG
}
RTN

*TESTD
%SI ON A PERDU 1 VIE
?ST=1.3 GOYES YD

LC 040 OUT=C=IN
?CBIT=1.0 { GOTO ND }
*YD
?ST=1.3 GOYES AH
GOSUBL MURD
SKIPNC { GOTO ND }
*AH
D0=(5)MX A=DAT0.B
LC 40 ?A<C.B
{
%ON EST ARRIVE !
?ST=1.4 GOYES E
GOSUBL SCROLG
}
SKELSE
{
*E
LC 5F ?A<C.B
{
GOLONG CLEARED
}
A+1.B DAT0=A.B
}
% ANIMATION DROITE
D0=(5)TICK.COUNTER A=DAT0.B
?A=0.B
{
A-1.B DAT0=A.B
}
SKELSE
{
D1=(5)TICK A=DAT1.B
DAT0=A.B
% FRAME
D0=(5)M.ANIM A=DAT0.B
LC 04 ?A=>C.B
{ A+1.B }
SKELSE
{ LA 01 }
DAT0=A.B
}
*ND
RTN

*TESTG
LC 040 OUT=C=IN
?CBIT=1.2 { GOTO NG }
*YG
?ST=1.3 GOYES AI
GOSUBL MURG
SKIPNC { GOTO NG }
*AI
D0=(5)MX A=DAT0.B
?A=>0.B { GOTO NG }
A-1.B DAT0=A.B
% ANIMATION GAUCHE
D0=(5)TICK.COUNTER A=DAT0.B
?A=0.B
{
A-1.B DAT0=A.B
}
SKELSE
{
D1=(5)TICK A=DAT1.B
DAT0=A.B
% FRAME
D0=(5)M.ANIM A=DAT0.B
LC 01 ?A=>C.B
{ A-1.B }
SKELSE
{ LA 04 }
DAT0=A.B
}
*NG
RTN

*LIFT.LEFT

D0=(5)@LIFT
A=DAT0.A D0=A

C=0.P
{
LA(1)LMAX
?C=A.P EXIT
A=DAT0.P ?A=0.P
{
D0+1 A=DAT0.B
?A=>0.B
{
A=0.P D0-1 DAT0=A.P
EXIT2
}
A-1.B DAT0=A.B
D0-1
}
D0+6 C+1.P UP
}

D0=(5)STABLE
A=DAT0.A D0=A

C=0.B
{
LA(2)SMAX
?C=A.B EXIT
A=DAT0.P ?A=0.P
{
D0+1
D0+2 D0+3
A=DAT0.B
?A=>0.B
{
A=0.P D0-1
D0-2 D0-3
DAT0=A.P
EXIT2
}
A-1.B DAT0=A.B
D0-1
D0-2 D0-3
}
D0+11 C+1.B UP
}
RTN

*ADD.CHAMP
%met bloc banal

C=R1.A RSTK=C
D0=(5)LEVEL.SURFACE A=DAT0.A R1=A.W

A=R2.A
LC(5)$18A A+C.A R4=A.W

A=0.A C=0.A
D0=(5)MX A=DAT0.B

ASRB.A ASRB.A ASRB.A
ASL.A ASRB.A B=A.A

A=0.A C=0.A
D0=(5)SCROL.COUNTER C=DAT0.P
D0=(5)MX A=DAT0.B
C+A.A

LA(5)#8 C+4.A
%%%%% C modulo A %%%%%
{ ?C<A.A EXIT C-A.A UP }

LA(5)#4 ?C=>A.A
{
A=0.A
D0=(5)MX A=DAT0.B
C-4.A A-C.A B=A.A
}
SKELSE
{
A=0.A
D0=(5)MX A=DAT0.B
C-4.A A-C.A B=A.A
}
A=B.A R3=A.W

LC(2)#7 B=C.B

C=0.A
D0=(5)MY C=DAT0.B
CSRB.A CSRB.A CSRB.A
CSL.A CSRB.A
GOSUBL DISP.A.C.R4.B
C=RSTK R1=C.W

LC(5)$41E R4=C.W

D0=00104 A=DAT0.A
D0=A A=0.B
A=DAT0.P ASRB.P ASRB.P
?A=0.P RTNYES
A+2.P B=A.B
%LC(2)#3 B=C.B

A=R3.A

C=0.A
D0=(5)MY C=DAT0.B
C-8.A RTNC
CSRB.A CSRB.A CSRB.A
CSL.A CSRB.A
GOLONG ADDOBJ.A.C.B.R4
RTN

*CLEAR.STABLE
D0=(5)STABLE A=DAT0.A D0=A
LC(2)#15 A=0.W
{
DAT0=A.11 D0+11
C-1.B UPNC
}
RTN

*OBJ.TORTLE
% READ SPRITE
A=R2.A C=R4.A A+C.A

%MODE CARAPACE
?ST=1.9 => { A+8.A }
SKELSE
{
%GAUCHE OU DROITE
?ST=0.6 { A+4.A }
}
%C=0.A
%D1=(5)T.ANIM C=DAT1.B
%C+C.A C+C.A A+C.A
R4=A.W

LC 07 B=C.B

A=0.A C=0.A
D0=(5)SX A=DAT0.B
LC 60 ?A>C.B
{
D0=(5)SY C=DAT0.B
GOSUBL DISP.A.C.R4.B
}

% LOOK AROUND MARIO
D0=(5)SX A=DAT0.B
D0=(5)MX C=DAT0.B
{
C+4.B ?C<A.B EXIT
A+8.B ?C>A.B EXIT

D0=(5)SY A=DAT0.B
D0=(5)MCLIPH C=DAT0.B
A+C.B
D0=(5)MY C=DAT0.B

C+8.B ?C<A.B EXIT
C-8.B ?C>A.B EXIT

C+6.B
?C<A.B
{
?ST=1.0 GOYES AA2
?ST=1.9 =>
{ ?ST=0.10 GOYES AA2 }
%MARIO MORDU
GOSUBL LOST_LIFE
EXIT2
}
SKELSE
{
%TORTUE FRAPPEE
*AA2
GOSUBL TORTLE_HIT
}
}

{
?ST=0.9 EXIT
?ST=1.10 EXIT
RTN
}

?ST=1.10
{
?ST=0.8 RTNYES
}

?ST=0.6
{
%VERS LA DROITE
GOSUBL MURD_T
SKIPNC
{
ST=0.6 EXIT2
}
D0=(5)SX A=DAT0.B
% LC 5F ?A<C.B
% {
% ST=0.6 EXIT2
% }
A+1.B
DAT0=A.B
}
SKELSE
{
%VERS LA GAUCHE
GOSUBL MURG_T
SKIPNC
{
ST=1.6 EXIT2
}
D0=(5)SX A=DAT0.B
?A=>0.B
{
ST=1.6 EXIT2
}
A-1.B
DAT0=A.B
}
?ST=0.10
{
GOSUBL SOL_T
SKIPC
{
D0=(5)SY A=DAT0.B
LC 37 ?A=>C.B =>
{
ST=0.5 %DEATH
}
SKELSE
{
A+1.B DAT0=A.B
}
}
GOTO CHUTE2
}
%PAS DE CHUTE
?ST=0.6
{
GOSUBL SOL_T
SKIPC
{
ST=0.6
}
}
SKELSE
{
GOSUBL SOL_T
SKIPC
{
ST=1.6
}
}
*CHUTE2

GOLONG FIN

*OBJ.KOOPA
% READ SPRITE
A=R2.A C=R4.A
A+C.A R4=A.W

LC 07 B=C.B

A=0.A C=0.A
D0=(5)SX A=DAT0.B
LC 60 ?A>C.B
{
D0=(5)SY C=DAT0.B
GOSUBL DISP.A.C.R4.B
}

?ST=0.8 RTNYES

?ST=0.6
{
%VERS LA DROITE
GOSUBL MURD_T
SKIPNC
{
ST=0.6 EXIT2
}
D0=(5)SX A=DAT0.B
A+1.B DAT0=A.B
}
SKELSE
{
%VERS LA GAUCHE
GOSUBL MURG_T
SKIPNC
{
ST=1.6 EXIT2
}
D0=(5)SX A=DAT0.B
?A=>0.B
{
ST=1.6 EXIT2
}
A-1.B
DAT0=A.B
}

% LOOK AROUND MARIO
D0=(5)SX A=DAT0.B
D0=(5)MX C=DAT0.B
{
C+4.B ?C<A.B EXIT
A+8.B ?C>A.B EXIT

D0=(5)SY A=DAT0.B
D0=(5)MCLIPH C=DAT0.B
A+C.B
D0=(5)MY C=DAT0.B

C+8.B ?C<A.B EXIT
C-8.B ?C>A.B EXIT

C+8.B %C+6.B
?C<A.B
{
?ST=1.0 GOYES AA3
%MARIO MORDU
GOSUBL LOST_LIFE
EXIT2
}
SKELSE
{
%KOOPA FRAPPEE
*AA3
% GOSUBL TORTLE_HIT
ST=0.5
}
}

GOSUBL SOL_T
SKIPC
{
D0=(5)SY A=DAT0.B
LC 37 ?A=>C.B =>
{
ST=0.5 %DEATH
}
SKELSE
{
A+1.B DAT0=A.B
}
}

GOLONG FIN

GOLONG FIN


*ADDOBJ.A.C.B.R4
D=C.A
C=B.B RSTK=C
B=A.A
C=D.A

%FIND PLACE
D0=(5)STABLE A=DAT0.A D0=A

C=0.B
{
LA(2)SMAX
?C=>A.B { C=RSTK RTN }
A=DAT0.P ?A=0.P EXIT
D0+11 C+1.P UP
}
%get this free field
LC 1 DAT0=C.P D0+1

%type=1 (tortle)
C=RSTK DAT0=C.B D0+2

%set data position
C=R4.A DAT0=C.X D0+3

%compute X position
A=B.B DAT0=A.B D0+2

%compute Y position
C=D.B DAT0=C.B D0+2

%set X&Y move
P=0 C=0.P DAT0=C.P
RTN

*ADDOBJET2

D0=(5)STYPE DAT0=A.B
D0=(5)SDATA DAT0=C.X

%compute X position
LA(2)#13
ASL.A ASRB.A
D0=(5)AX DAT0=A.B

GOTO NEXT.ADDOBJET

*ADDOBJET

D0=(5)STYPE DAT0=A.B
D0=(5)SDATA DAT0=C.X

%compute X position
LA(2)#13 C=D.B A-C.B
ASL.A ASRB.A
D0=(5)AX DAT0=A.B

*NEXT.ADDOBJET
%compute Y position
LA(2)#08 C=B.B A-C.B
ASL.A ASRB.A
D0=(5)AY DAT0=A.B

%FIND PLACE
D0=(5)STABLE A=DAT0.A
D0=A C=0.B
{
LA(2)SMAX
?C=A.B RTNYES
A=DAT0.P ?A=0.P EXIT
D0+11 C+1.B UP
}
%get this free field
LC 1 DAT0=C.P D0+1

%type=
D1=(5)STYPE C=DAT1.B
DAT0=C.B D0+2

%set data position
D1=(5)SDATA C=DAT1.X
DAT0=C.X D0+3

%compute X position
D1=(5)AX C=DAT1.B
DAT0=C.B D0+2

%compute Y position
D1=(5)AY C=DAT1.B
DAT0=C.B D0+2

%set X&Y move
P=0 C=0.P DAT0=C.P
RTN

*OBJ.HEART.UP
% READ SPRITE
A=R2.A C=R4.A
A+C.A R4=A.W

LC 07 B=C.B

A=0.A C=0.A
D0=(5)SX A=DAT0.B
LC 60 ?A>C.B
{
D0=(5)SY C=DAT0.B
GOSUBL DISP.A.C.R4.B
}

?ST=0.8 RTNYES

?ST=0.6
{
%VERS LA DROITE
GOSUBL MURD_T
SKIPNC
{
ST=0.6 EXIT2
}
D0=(5)SX A=DAT0.B
% LC 5F ?A<C.B
% {
% ST=0.6 EXIT2
% }
A+1.B
DAT0=A.B
}
SKELSE
{
%VERS LA GAUCHE
GOSUBL MURG_T
SKIPNC
{
ST=1.6 EXIT2
}
D0=(5)SX A=DAT0.B
?A=>0.B
{
ST=1.6 EXIT2
}
A-1.B
DAT0=A.B
}

%LOOK AROUND CHAMP
D0=(5)SX A=DAT0.B
D0=(5)MX C=DAT0.B
{
C+4.B ?C<A.B EXIT
A+8.B ?C>A.B EXIT

D0=(5)SY A=DAT0.B
D0=(5)MCLIPH C=DAT0.B
A+C.B
D0=(5)MY C=DAT0.B

C+4.B ?C<A.B EXIT
A+8.B ?C>A.B EXIT

%CHAMP UP
D0=(5)VIE A=DAT0.B
SETDEC A+1.B SETHEX
DAT0=A.B
%PLUS DE CHAMPIGNON
ST=0.5
%UN PANEL A AFFICHER
D0=(5)FLAG01
A=DAT0.4
ABIT=1.0
DAT0=A.4
}

GOSUBL SOL_T
SKIPC
{
D0=(5)SY A=DAT0.B
LC 37 ?A=>C.B =>
{
ST=0.5 %DEATH
}
SKELSE
{
A+1.B DAT0=A.B
}
}

GOLONG FIN

*OBJ.CHAMP.UP
% READ SPRITE
A=R2.A C=R4.A
A+4.A
A+C.A R4=A.W

LC 07 B=C.B

A=0.A C=0.A
D0=(5)SX A=DAT0.B
LC 60 ?A>C.B
{
D0=(5)SY C=DAT0.B
GOSUBL DISP.A.C.R4.B
}

?ST=0.8 RTNYES

?ST=0.6
{
%VERS LA DROITE
GOSUBL MURD_T
SKIPNC
{
ST=0.6 EXIT2
}
D0=(5)SX A=DAT0.B
% LC 5F ?A<C.B
% {
% ST=0.6 EXIT2
% }
A+1.B
DAT0=A.B
}
SKELSE
{
%VERS LA GAUCHE
GOSUBL MURG_T
SKIPNC
{
ST=1.6 EXIT2
}
D0=(5)SX A=DAT0.B
?A=>0.B
{
ST=1.6 EXIT2
}
A-1.B
DAT0=A.B
}

%LOOK AROUND CHAMP
D0=(5)SX A=DAT0.B
D0=(5)MX C=DAT0.B
{
C+4.B ?C<A.B EXIT
A+8.B ?C>A.B EXIT

D0=(5)SY A=DAT0.B
D0=(5)MCLIPH C=DAT0.B
A+C.B
D0=(5)MY C=DAT0.B

C+4.B ?C<A.B EXIT
A+8.B ?C>A.B EXIT
GOTO CCC
}
SKIP {
*CCC
%+20 COINS
D0=(5)COIN A=DAT0.X
LC 90
?A<C.B
{
A=0.X DAT0=A.X
D0=(5)VIE A=DAT0.B
SETDEC A+1.B SETHEX
DAT0=A.B
%UN PANEL A AFFICHER
D0=(5)FLAG01
A=DAT0.4
ABIT=1.0
ABIT=1.1
DAT0=A.4
}
SKELSE
{
SETDEC A+16.X SETHEX
DAT0=A.X
%UN PANEL A AFFICHER
D0=(5)FLAG01
A=DAT0.4
ABIT=1.1
DAT0=A.4
}
%PLUS DE CHAMPIGNON
ST=0.5
}

GOSUBL SOL_T
SKIPC
{
D0=(5)SY A=DAT0.B
LC 37 ?A=>C.B =>
{
ST=0.5 %DEATH
}
SKELSE
{
A+1.B DAT0=A.B
}
}

GOLONG FIN

*OBJ.STAR.UP
% READ SPRITE
A=R2.A C=R4.A
A+8.A
A+C.A R4=A.W

LC 07 B=C.B

A=0.A C=0.A
D0=(5)SX A=DAT0.B
LC 60 ?A>C.B
{
D0=(5)SY C=DAT0.B
GOSUBL DISP.A.C.R4.B
}

?ST=0.8 RTNYES

?ST=0.6
{
%VERS LA DROITE
GOSUBL MURD_T
SKIPNC
{
ST=0.6 EXIT2
}
D0=(5)SX A=DAT0.B
% LC 5F ?A<C.B
% {
% ST=0.6 EXIT2
% }
A+1.B
DAT0=A.B
}
SKELSE
{
%VERS LA GAUCHE
GOSUBL MURG_T
SKIPNC
{
ST=1.6 EXIT2
}
D0=(5)SX A=DAT0.B
?A=>0.B
{
ST=1.6 EXIT2
}
A-1.B
DAT0=A.B
}

%LOOK AROUND CHAMP
D0=(5)SX A=DAT0.B
D0=(5)MX C=DAT0.B
{
C+4.B ?C<A.B EXIT
A+8.B ?C>A.B EXIT

D0=(5)SY A=DAT0.B
D0=(5)MCLIPH C=DAT0.B
A+C.B
D0=(5)MY C=DAT0.B

C+4.B ?C<A.B EXIT
A+8.B ?C>A.B EXIT
SKIP
{
%CHAMP UP
D0=(5)VIE A=DAT0.B
SETDEC A+1.B SETHEX
DAT0=A.B
}
%PLUS DE CHAMPIGNON
ST=0.5
%UN PANEL A AFFICHER
D0=(5)FLAG01
A=DAT0.4
ABIT=1.0
DAT0=A.4
}

GOSUBL SOL_T
SKIPC
{
D0=(5)SY A=DAT0.B
LC 37 ?A=>C.B =>
{
ST=0.5 %DEATH
}
SKELSE
{
A+1.B DAT0=A.B
}
}
GOLONG FIN

*DIVISION
%A/C=D+B
D=0.A
{
?A=>C.A =>
{ A-C.A D+1.A UP2 }
SKELSE
{ B=A.A }
}
RTN

*FLAGS
D0=(5)FLAG01 A=DAT0.4
?ABIT=0.0
{
ABIT=0.0 DAT0=A.4
GOSUBL VIES
}
D0=(5)FLAG01 A=DAT0.4
?ABIT=0.1
{
ABIT=0.1 DAT0=A.4
GOSUBL COINS
}
RTN

}


Back