antoine-source/cogito/Cogito.s

3175 lines
61 KiB
ArmAsm

*--------------------------*
* *
* COGITO *
* *
* Brutal Deluxe *
* *
* Version: 2.0 du 26/08/94 *
*--------------------------*
mx %00
lst off
rel
dsk Cogito.l
use 4/Int.Macs
use 4/Locator.Macs
use 4/Mem.Macs
use 4/Misc.Macs
use 4/Sound.Macs
use 4/Tool220.Macs
use 4/Util.Macs
*--- Parametres Page Zero
Debut = $00
Arrivee = $04
proDOS = $e100a8
*--------------------------
* Initialisations d'entree
*--------------------------
phk
plb
_TLStartUp
pha
_MMStartUp
pla
sta myID
_MTStartUp
_IMStartUp
sep #$20
ldal $e0c022
sta save1
ldal $e0c029
sta save2
ldal $e0c034
sta save3
ldal $e0c035
sta save4
lda #$f0
stal $e0c022
lda #$00
stal $e0c034
stal $e0c035
rep #$20
*--- Libere et compacte la memoire
okIT1 PushLong #0
PushLong #$8fffff
PushWord myID
PushWord #%11000000_00000000
PushLong #0
_NewHandle
_DisposeHandle
_CompactMem
*--- Verifie que l'on ait 512ko libres
PushLong #0
_FreeMem
pla
pla
cmp #8 ; 8*64ko
bcs okIT2
brl memERR3
okIT2 PushLong #0 ; Demande Ecran Shadowing
PushLong #$8000
PushWord myID
PushWord #%11000000_00000011
PushLong #$012000
_NewHandle
pla
pla
bcc okIT3
brl memERR3
okIT3 PushLong #0
PushLong #$10000
PushWord myID
PushWord #%11000000_00011100
PushLong #0
_NewHandle
ldx temp
phd
tsc
tcd
ldy #0
lda [3],y
sta ptrHAPPY,x
ldy #2
lda [3],y
sta ptrHAPPY+2,x
pld
pla
pla
jsr memERR
inx
inx
inx
inx
stx temp
cpx #4*8 ; 8 bancs
bne okIT3
ldx #$7ffe
lda #0
]lp stal $012000,x
dex
dex
bpl ]lp
sep #$20
lda #$c1
stal $e0c029
rep #$20
*--------------------------
* Met les pointeurs
*--------------------------
lda ptrHAPPY
clc
adc #$8000
sta ptrLUDY
lda ptrHAPPY+2
sta ptrLUDY+2
lda ptrPLANET
clc
adc #$8000
sta ptrXENO
lda ptrPLANET+2
sta ptrXENO+2
lda ptrMESSAGE
clc
adc #$8000
sta ptrSPRITES
lda ptrMESSAGE+2
sta ptrSPRITES+2
lda ptrSUPERMAN
clc
adc #$8000
sta ptrUNPACK
lda ptrSUPERMAN+2
sta ptrUNPACK+2
lda ptrTOINET
clc
adc #$8000
sta ptrSOUND1
lda ptrTOINET+2
sta ptrSOUND1+2
*--------------------------
* Presentation
*--------------------------
lda #pHAPPY
ldx ptrUNPACK+1
jsr loadFILE
bcc okIT4
brl initOFF
okIT4 lda ptrHAPPY+1
ldy #$8000
jsr unPACK
lda #pLUDY
ldx ptrUNPACK+1
jsr loadFILE
bcc okIT5
brl initOFF
okIT5 lda ptrLUDY+1
ldy #$8000
jsr unPACK
lda #pPLANET
ldx ptrUNPACK+1
jsr loadFILE
bcc okIT6
brl initOFF
okIT6 lda ptrPLANET+1
ldy #$8000
jsr unPACK
lda #pXENO
ldx ptrUNPACK+1
jsr loadFILE
bcc okIT7
brl initOFF
okIT7 lda ptrXENO+1
ldy #$8000
jsr unPACK
lda #pMESSAGE
ldx ptrUNPACK+1
jsr loadFILE
bcc okIT8
brl initOFF
okIT8 lda ptrMESSAGE+1
ldy #$8000
jsr unPACK
lda #pSPRITES
ldx ptrUNPACK+1
jsr loadFILE
bcc okIT9
brl initOFF
okIT9 lda ptrSPRITES+1
ldy #$8000
jsr unPACK
*-------------------------- Doc
ldal $e102e9 ; 0: francais
cmp #$0202 ; 1: autre
beq okDOC
lda #1
sta fgDOC
bra okDOC
asc 'Good luck to find the Easter Eggs in the game...',8d
*-------------------------- Oliver's presentation
okDOC lda #pCOGITO
ldx ptrUNPACK+1
jsr loadFILE
bcc okIT10
brl initOFF
okIT10 lda ptrSOUND2+1
ldy #$9600
jsr unPACK
lda #pTOINET
ldx ptrUNPACK+1
jsr loadFILE
bcc okIT11
brl initOFF
okIT11 lda ptrTOINET+1
ldy #$8000
jsr unPACK
lda #pSUPERMAN
ldx ptrUNPACK+1
jsr loadFILE
bcc okIT12
brl initOFF
okIT12 lda ptrSUPERMAN+1
ldy #$8000
jsr unPACK
*--- Tool 220 and zikmu
PushWord #220
PushWord #$0105
_LoadOneTool
bcs okIT13
lda #pMUSIC
ldx ptrMUSIC+1
jsr loadFILE
bcc okIT14
okIT13 lda #1 ; Music is not loaded
sta fgMUSIC
*--- It's up to you
okIT14 lda ptrSOUND2+1
jsr do3200 ; show 3200 picture
lda ptrTOINET
sta Debut
lda ptrTOINET+2
sta Debut+2
ldy #$7ffe
]lp tyx
lda [Debut],y
stal $012000,x
dey
dey
bpl ]lp
jsr startNT
jsr startZIK
JSR CADPRES ; OLIVIER ***************
STAL $00C00F ; ELIMINE UNE TOUCHE
pha ; Need to be frequently done
_NTUpdateSound
pla
jsr fadeOUT
*--- Avant de demarrer le jeu
lda #pSOUND1
ldx ptrSOUND1+1
jsr loadFILE
bcc okIT15
lda #1
sta fgSOUND1
okIT15 lda #pSOUND2
ldx ptrSOUND2+1
jsr loadFILE
bcc okIT19
lda #1
sta fgSOUND2
bra okIT19
asc 'What are you doing here again?',8D
*--------------------------
* Le programme
*--------------------------
*--- Debut du jeu niveau 1
okIT19 lda ptrSPRITES+1
sta pntNum5+2
sei
PushLong #myVBL
_SetHeartBeat
PushLong #myRAN
_SetHeartBeat
cli
stz noINTER
PushWord #2
_IntSource
DEBUG lda #1
sta CurDecor ; Image 'HappyLand'
jsr setDecor
lda #1
sta Niveau ; Niveau 00
sta NbCoups
sta fgRANDOM ; mode RANDOM
sta NbCompute
stz ldFlag
FIRST stz Diabolic ; Initialise flags
jsr DoInit ; Initialise dep/dec/nom
jsr DoDecor ; Calcule le decor
jsr DoDeplacement
jsr DoFleches
*--- Deplace l'image a l'ecran (sans les palettes)
SECOND lda ptrDECOR+1 ; Deplace l'image du decor
sta Move+2
lda ptrDECOR
sta Move+1
ldx #$7dfe
Move ldal $012000,x
stal $012000,x
dex
dex
bpl Move
jsr PutArrows ; Met les fleches
jsr ShowAll ; Affiche le plateau
lda ptrDECOR+1 ; Montre le decor
ldy #-1
jsr fadeIN
lda ldFlag
bne ICI
stz Temps
stz Temps+2
stz Temps+4
stz NbCoups
stz NbCompute
ICI jsr OpenPanel ; Ouvre le tableau
jsr ahNIVEAU ; Affiche le niveau
jsr ahCOMPCP ; Ah! Le nombre de deplacement
jsr ahMOICP
jsr ahTIME2
lda #1
sta noINTER
*--- On a demarre, maintenant melange
lda ldFlag
bne FIFTH
jsr ComputeIt ; Deplace a l'ecran
AMEN lda firstENTRY
bne JESUISLA
lda #1
sta firstENTRY
JMP INITMOUS
JESUISLA jsr SAUV
lda CurDecor
dec
asl
tax
lda myTable,x
JMP PICT1
THIRD sta MyArrow ; Sauve numero de fleche
jsr TestArrow ; Est-ce que ca existe ?
bcc SIXTH
FIFTH jsr SAUV
jmp SOURIS1
SIXTH lda fgWHICH
beq SEVENTH
lda fgSOUND1
bne SEVENTH
lda #0
jsr playSND
SEVENTH lda NbCoups
inc
sta NbCoups
jsr ahMOICP ; Affiche mes coups
jsr ChoixMelange ; Fait le deplacement
jsr TestEnd ; Regarde si fin de niveau
bcs FIFTH
*--- Is sound possible
lda fgWHICH
beq noSND
lda fgSOUND2
bne noSND
lda #1
jsr playSND
*--- Fin de niveau
noSND stz noINTER
lda fgRANDOM
beq PRR
jsr Random
and #3
inc
sta CurDecor
jsr setDecor
PRR stz ldFlag
inc Niveau
lda Niveau
cmp #121
bne NEXT
JSR JAMAIS ; GAGNE !!! (OPTIMISTE)
lda #1 ; End of game
sta Niveau
NEXT jsr fadeOUT
brl FIRST
asc 'There is nothing interesting here! Truly!!',8D
*--- End of game
keyEND stz noINTER
sei
PushLong #myRAN
_DelHeartBeat
PushLong #myVBL
_DelHeartBeat
cli
*--- On quitte le programme
initOFF ldx #$7ffe
lda #0
]lp stal $012000,x
dex
dex
bpl ]lp
initOFF1 sep #$20
lda save4
stal $e0c035
lda save3
stal $e0c034
lda save2
stal $e0c029
lda save1
stal $e0c022
rep #$20
lda fgMUSIC
bne initOFF2
_NTStopMusic
_NTShutDown
PushWord #220
_UnloadOneTool
initOFF2 _SoundShutDown
_IMShutDown
_MTShutDown
PushWord myID
_DisposeAll
_MMShutDown
_TLShutDown
jsl proDOS
dw $2029
adrl proQuit
asc 'Just for U: code 100 for The Tinies is MUADIBU',8D
*--- Chargement du fichier TEMP
TEMPload lda #pTEMP
ldx ptrUNPACK+1
jsr loadFILE
bcs TPload1
lda ptrUNPACK
sta $00
lda ptrUNPACK+2
sta $02
ldy #0
]lp lda [$00],y
sta Probleme,y
iny
iny
cpy #342
bne ]lp
lda #1
sta ldFlag
sta vivaTOINET
clc
rts
TPload1 stz ldFlag
sec
rts
*--------------------------
* Routines melange
*--------------------------
ChoixMelange lda WhichDep
cmp #1 ; Normal
bne melan2
lda MyArrow
asl
sta MyColumn
jsr DoScroll
rts
*---
melan2 cmp #2 ; 2 cases dans la meme direction
bne melan3
lda MyArrow
asl
sta MyColumn
jsr DoScroll
jsr DoScroll
rts
*---
melan3 cmp #3 ; Inversion N/E, S/O
bne melan4
lda MyArrow
asl
tax
lda TblMel38,x
asl
sta MyColumn
jsr DoScroll
rts
*---
melan4 cmp #4 ; Normal sans fleches
bne melan5
lda MyArrow
asl
sta MyColumn
jsr DoScroll
rts
*---
melan5 cmp #5 ; Inversion N/S, E/O
bne melan6
lda MyArrow
asl
tax
lda TblMel5,x
asl
sta MyColumn
jsr DoScroll
rts
*---
melan6 cmp #6 ; N1=S9, E1=O9
bne melan7
lda MyArrow
asl
tax
lda TblMel67,x
asl
sta MyColumn
jsr DoScroll
rts
*---
melan7 cmp #7 ; N1=N1+S9, N2=N2+S8
bne melan8
lda MyArrow
asl
sta MyColumn
jsr DoScroll
lda MyArrow
asl
tax
lda TblMel67,x
asl
sta MyColumn
jsr DoScroll
rts
*---
melan8 cmp #8 ; N1=N1+E1, S1=S1+O1
bne melan9
lda MyArrow
asl
sta MyColumn
jsr DoScroll
lda MyArrow
asl
tax
lda TblMel38,x
asl
sta MyColumn
jsr DoScroll
rts
*---
melan9 cmp #9 ; N1=N1+N9, N2=N2+N8
bne melan10
lda MyArrow
asl
sta MyColumn
jsr DoScroll
lda MyArrow
asl
tax
lda TblMel9,x
asl
sta MyColumn
jsr DoScroll
rts
*---
melan10 cmp #10 ; Manque fleches, sinon comme 8
bne melan11
lda MyArrow
asl
sta MyColumn
jsr DoScroll
lda MyArrow
asl
tax
lda TblMel38,x
asl
sta MyColumn
jsr DoScroll
rts
*---
melan11 cmp #11 ; N1=N1+N2, O1=O1+O2
bne melan12
lda MyArrow
asl
sta MyColumn
jsr DoScroll
lda MyArrow
asl
tax
lda TblMel11,x
asl
sta MyColumn
jsr DoScroll
rts
*---
melan12 lda MyArrow ; N4=N4+N2, N9=N9+N7
asl
sta MyColumn
jsr DoScroll
lda MyArrow
asl
tax
lda TblMel12,x
asl
sta MyColumn
jsr DoScroll
rts
asc 'Nice sunday at Olivier s home: drinking Pepsi, eating Pizza, reading Playboy (US edition) !!!',8D
*--- Regarde si la fleche X existe
TestArrow lda MyArrow
asl
tax
lda Fleches2,x
bne TstArr1
sec ; Fleche n'existe pas
rts
TstArr1 clc ; Fleche existe
rts
*--- L'ordinateur choisit
ComputeIt jsr Random
beq ComputeIt
cmp #37
bcs ComputeIt
dec ; Pour 0-36
cmp MyArrow
beq ComputeIt
sta MyArrow
jsr TestArrow ; Fleche existe ?
bcs ComputeIt ; non, si C=1
komp1 lda NbCompute
inc
sta NbCompute
jsr ahCOMPCP ; Ah! Le nombre de deplacement
jsr ChoixMelange ; Melange
komp2 lda NbCompute
cmp NbMelange
bne ComputeIt
jsr TestEnd ; Plateau=Probleme ?
bcc ComputeIt ; C=0, oui, recommence
lda Diabolic
bne komp3
rts
komp3 stz Diabolic ; Re-affiche le plateau
lda #$0001 ; Apres avoir melange suivant Diabolic
sta Arrivee+2
lda ptrSPRITES+2
sta Debut+2
ldx #0 ; Write Big plateau
]lp phx
lda Plateau,x
jsr WriteBig
plx
inx
inx
cpx #81*2
bne ]lp
rts
*--- Compare les deux plateaux
TestEnd ldx #0
]lp lda Plateau,x ; C=1, c'est le meme
cmp Probleme,x ; C=0, different
bne TstEnd1
inx
inx
cpx #81*2
bne ]lp
clc
rts
TstEnd1 sec ; Erreur
rts
*--- Initialise les donnees de decor, deplacement et nom
DoInit lda Niveau
dec
asl
tax
lda ChoixDeplace,x
sta WhichDep ; Type de deplacement
lda ChoixDecor,x
sta WhichDecor ; Type de decor pour la creation
lda CurDecor ; Adresse du decor
dec
asl
tax
lda sprDecor,x
sta AdrDecor
rts
*--- Prepare le decor
DoDecor lda ldFlag
bne noDec
lda WhichDecor
dec
asl
tax
jsr (AdrCalcDec,x)
noDec rts
*--- Prepare les deplacements
DoDeplacement lda ldFlag
bne noDep
lda WhichDep
dec
asl
tax
lda TblDeplacement,x
sta NbMelange
ldx #0
cmp #500
bne Dep1
inx
Dep1 stx Diabolic
noDep rts
*--- Prepare les fleches suivant le deplacement
DoFleches lda Niveau
cmp #24
bcs FlechesA
ldx #0 ; On deplace sur 9
lda #9
]lp sta Fleches,x
inx
inx
cpx #36*2
bne ]lp
brl FlechesE
*---
FlechesA cmp #48
bcs FlechesB
ldx #0 ; On deplace sur 5
lda #5
]lp sta Fleches,x
inx
inx
cpx #36*2
bne ]lp
brl FlechesE
*---
FlechesB cmp #72
bcs FlechesC
ldx #0 ; On deplace sur 6 et 4
]lp lda #6
sta Fleches,x
sta Fleches+36,x
lda #4
sta Fleches+18,x
sta Fleches+54,x
inx
inx
cpx #9*2
bne ]lp
brl FlechesE
*---
FlechesC cmp #99
bcs FlechesD
ldx #0 ; On deplace sur 6, 4, 7 et 3
]lp lda #6
sta Fleches,x
lda #4
sta Fleches+18,x
lda #7
sta Fleches+36,x
lda #3
sta Fleches+54,x
inx
inx
cpx #9*2
bne ]lp
lda #3
sta Fleches+6
sta Fleches+8
sta Fleches+10
lda #7
sta Fleches+24
sta Fleches+26
sta Fleches+28
brl FlechesE
*---
FlechesD ldx #0 ; On deplace sur 8 et 3
]lp lda #8
sta Fleches,x
sta Fleches+36,x
lda #3
sta Fleches+18,x
sta Fleches+54,x
inx
inx
cpx #9*2
bne ]lp
*---
FlechesE lda WhichDep
cmp #4
beq FlechesG
cmp #10
beq FlechesG
FlechesF ldx #0
lda #1
]lp sta Fleches2,x
inx
inx
cpx #36*2
bne ]lp
rts
FlechesG jsr FlechesF
stz Fleches2+2 ; Inhibe des fleches
stz Fleches2+12
stz Fleches2+20
stz Fleches2+22
stz Fleches2+30
stz Fleches2+38
stz Fleches2+48
stz Fleches2+56
stz Fleches2+58
stz Fleches2+66
rts
asc 'Special hello to Maria Checa, playmate of the month (Aug.94)',8D
asc 'We love your smile and many more... :-)',8D
*--------------------------
* Routines mathematiques
*--------------------------
ahCOMPCP lda #'00'
sta StrPtr
sta StrPtr+1
PushWord NbCompute
PushLong #StrPtr
PushWord #3
PushWord #0
_Int2Dec
lda CurDecor
dec
asl
tax
lda zeCOMPCP,x
tax
lda #StrPtr
ldy #$640
jsr printNUM
rts
*--- Affiche mon nombre de coups
ahMOICP lda #'00'
sta LgStrPtr
sta LgStrPtr+2
sta LgStrPtr+4
sta LgStrPtr+5
PushLong NbCoups
PushLong #LgStrPtr
PushWord #7
PushWord #0
_Long2Dec
lda CurDecor
dec
asl
tax
lda zeMOICP,x
tax
lda #LgStrPtr
ldy #$140
jsr printNUM
rts
*--- Affiche le niveau
ahNIVEAU jsr chNIVEAU
lda CurDecor
dec
asl
tax
lda zeNIVEAU,x
tax
lda #StrPtr
ldy #$640
jsr printNUM
rts
chNIVEAU lda #'00'
sta StrPtr
sta StrPtr+1
PushWord Niveau
PushLong #StrPtr
PushWord #3
PushWord #0
_Int2Dec
rts
*--- Gestion du temps (interruption VBL)
ahTIME lda CurDecor ; Si le curseur
dec ; est sur le temps, c'est ici
asl
tax
LDA POSY
CMP PanelY2,x
BPL time ; POSY > Y2
CMP PanelY1,x
BMI time
LDA POSX
CMP PanelX2,x
BPL time ; POSX < X2
CMP PanelX1,x
BMI time
JSR DESS1
inc fgTIME ; LE CURSEUR DE LA SOURIS EST SUR LE TEMPS
time lda Temps+4
inc
cmp #60
beq time1
sta Temps+4
brl time6
time1 stz Temps+4
lda Temps+2
inc
cmp #60
beq time2
sta Temps+2
brl time5
time2 stz Temps+2
lda Temps
inc
cmp #60
beq time3
sta Temps
bra ahTIME2
time3 stz Temps
ahTIME2 lda #'00'
sta StrTime
PushWord Temps
PushLong #StrTime
PushWord #2
PushWord #0
_Int2Dec
lda CurDecor
dec
asl
tax
lda zeTEMPS1,x
tax
lda #StrTime
ldy #$140
jsr printNUM
time5 lda #'00'
sta StrTime
PushWord Temps+2
PushLong #StrTime
PushWord #2
PushWord #0
_Int2Dec
lda CurDecor
dec
asl
tax
lda zeTEMPS2,x
tax
lda #StrTime
ldy #$140
jsr printNUM
time6 lda #'00'
sta StrTime
PushWord Temps+4
PushLong #StrTime
PushWord #2
PushWord #0
_Int2Dec
lda CurDecor
dec
asl
tax
lda zeTEMPS3,x
tax
lda #StrTime
ldy #$140
jsr printNUM
lda fgTIME
beq time7
stz fgTIME ; LE CURSEUR EST SUR LE TEMPS
JSR SAUV ; SAUVEGARDE LE FOND
JSR TRACE6 ; DESSINE LE POINTEUR
time7 rts
*--- Charge le decor
setDecor lda CurDecor
dec
asl
tax
lda proDecor,x
asl
asl
tax
lda ptrHAPPY,x
sta ptrDECOR
lda ptrHAPPY+2,x
sta ptrDECOR+2
rts
asc 'Full Apple IIgs Planete: soon... :-O',8D
*--------------------------
* Creation des decors
*--------------------------
Decor1 jsr Random ; couleur 1
beq Decor1
cmp #7
bcs Decor1
sta colorA
]lp jsr Random ; couleur 2
beq ]lp
cmp #7
bcs ]lp
cmp colorA
beq ]lp
sta colorB
ldx #0 ; met le fond
lda colorA
]lp sta Plateau,x
sta Probleme,x
inx
inx
cpx #81*2
bne ]lp
lda colorB ; met le motif
sta Plateau+60
sta Probleme+60
sta Plateau+62
sta Probleme+62
sta Plateau+64
sta Probleme+64
sta Plateau+78
sta Probleme+78
sta Plateau+80
sta Probleme+80
sta Plateau+82
sta Probleme+82
sta Plateau+96
sta Probleme+96
sta Plateau+98
sta Probleme+98
sta Plateau+100
sta Probleme+100
rts
*---
Decor2 jsr Random ; couleur 1
beq Decor2
cmp #7
bcs Decor2
sta colorA
]lp jsr Random ; couleur 2
beq ]lp
cmp #7
bcs ]lp
cmp colorA
beq ]lp
sta colorB
ldx #0 ; met couleur 1
lda colorA
]lp sta Plateau,x
sta Probleme,x
inx
inx
cpx #36*2
bne ]lp
ldx #36*2 ; met couleur 2
lda colorB
]lp sta Plateau,x
sta Probleme,x
inx
inx
cpx #81*2
bne ]lp
rts
*---
Decor3 jsr Random ; couleur 1
beq Decor3
cmp #7
bcs Decor3
sta colorA
]lp jsr Random ; couleur 2
beq ]lp
cmp #7
bcs ]lp
cmp colorA
beq ]lp
sta colorB
]lp jsr Random ; couleur 3
beq ]lp
cmp #7
bcs ]lp
cmp colorA
beq ]lp
cmp colorB
beq ]lp
sta colorC
ldx #0 ; met le motif
]lp lda colorA
sta Plateau,x
sta Probleme,x
sta Plateau+2,x
sta Probleme+2,x
sta Plateau+4,x
sta Probleme+4,x
lda colorB
sta Plateau+6,x
sta Probleme+6,x
sta Plateau+8,x
sta Probleme+8,x
sta Plateau+10,x
sta Probleme+10,x
lda colorC
sta Plateau+12,x
sta Probleme+12,x
sta Plateau+14,x
sta Probleme+14,x
sta Plateau+16,x
sta Probleme+16,x
txa
clc
adc #9*2
tax
cpx #81*2
bne ]lp
rts
*---
Decor4 jsr Random ; couleur 1
beq Decor4
cmp #7
bcs Decor4
sta colorA
]lp jsr Random ; couleur 2
beq ]lp
cmp #7
bcs ]lp
cmp colorA
beq ]lp
sta colorB
]lp jsr Random ; couleur 3
beq ]lp
cmp #7
bcs ]lp
cmp colorA
beq ]lp
cmp colorB
beq ]lp
sta colorC
ldx #0 ; met le motif 1
lda colorA
]lp sta Plateau,x
sta Probleme,x
inx
inx
cpx #27*2
bne ]lp
ldx #27*2 ; met le motif 2
lda colorB
]lp sta Plateau,x
sta Probleme,x
inx
inx
cpx #54*2
bne ]lp
ldx #54*2 ; met le motif 3
lda colorC
]lp sta Plateau,x
sta Probleme,x
inx
inx
cpx #81*2
bne ]lp
rts
*--- Simplification par tableaux deja en memoire
Decor5 lda #AdrDecor5
bra DecorA
Decor6 lda #AdrDecor6
bra DecorA
Decor7 lda #AdrDecor7
bra DecorA
Decor8 lda #AdrDecor8
bra DecorA
Decor9 lda #AdrDecor9
DecorA sta DecorB+1
ldx #0
DecorB lda $ffff,x
sta Plateau,x
sta Probleme,x
inx
inx
cpx #81*2
bne DecorB
rts
*---
Decor10 ldx #0
]lp stz Plateau,x
stz Probleme,x
inx
inx
cpx #81*2
bne ]lp
ldx #0
]lp jsr Random ; Random2
bne Decor10a
inc
Decor10a cmp #7
bcs ]lp
sta Plateau,x
sta Probleme,x
inx
inx
cpx #81*2
bne ]lp
rts
*--- Affiche tous les pions
ShowAll lda #$0001
sta Arrivee+2
lda ptrSPRITES+2
sta Debut+2
ldx #0
]lp phx
lda Plateau,x
jsr WriteBig
plx
phx
lda Probleme,x
jsr WriteSmall
plx
inx
inx
cpx #81*2
bne ]lp
rts
*--- Ouvre le tableau
OpenPanel ldx #0 ; Commence sprite 0 en 1
openPAN1 phx
lda CurDecor
dec
asl
tay
lda zePANEL,y
clc
adc #$2000
sta Panel2+1
lda ptrSPRITES+1
sta Panel1+2
lda ptrSPRITES
clc
adc zePANEL2,x
sta Panel1+1
jsr PutPanel
ldx #1
]lp jsr nextVBL
jsr nextVBL
dex
bpl ]lp
plx
inx
inx
cpx #26
bne openPAN1
rts
*---
PutPanel ldy #19
Panel ldx #18
sep #$20
Panel1 ldal $012000,x
Panel2 stal $012000,x
dex
bpl Panel1
rep #$20
lda Panel1+1
clc
adc #$a0
sta Panel1+1
lda Panel2+1
clc
adc #$a0
sta Panel2+1
dey
bpl Panel
rts
*--- Affiche les fleches
PutArrows lda ptrSPRITES+1
sta NSpnt4+2
sta EOpnt4+2
ldx #0 ; Au nord
]lp phx
lda Fleches2,x
beq nxtArr1
lda Fleches,x
ldy #0
jsr PrintNS
nxtArr1 plx
inx
inx
cpx #18
bne ]lp
ldx #18 ; A l'est
]lp phx
lda Fleches2,x
beq nxtArr2
lda Fleches,x
ldy #0
jsr PrintEO
nxtArr2 plx
inx
inx
cpx #36
bne ]lp
ldx #36 ; Au sud
]lp phx
lda Fleches2,x
beq nxtArr3
lda Fleches,x
ldy #0
jsr PrintNS
nxtArr3 plx
inx
inx
cpx #54
bne ]lp
ldx #54 ; A l'ouest
]lp phx
lda Fleches2,x
beq nxtArr4
lda Fleches,x
ldy #0
jsr PrintEO
nxtArr4 plx
inx
inx
cpx #72
bne ]lp
rts
asc 'Joke of the month: FTA rules... ahahahah',8D
*--- Affichage ecran des boutons
PrintNS sty NSpnt3+1
lda AdrScrBtn,x ; Adresse ecran des boutons
sta NSpnt5+1
cpx #18 ; Si au nord, si au sud
bcs NSpnt1
lda #0 ; on veut sprite 0
beq NSpnt2
NSpnt1 lda #8 ; on veut sprite 8
NSpnt2 clc
NSpnt3 adc #0
tax
lda sprButtn,x ; Adresse planche de sprites des buttns
clc
adc AdrDecor
clc
adc ptrSPRITES
sta NSpnt4+1
ldy #7
]lp ldx #6
NSpnt4 ldal $012000,x
NSpnt5 stal $012000,x
dex
dex
bpl NSpnt4
lda NSpnt4+1
clc
adc #$a0
sta NSpnt4+1
lda NSpnt5+1
clc
adc #$a0
sta NSpnt5+1
dey
bpl ]lp
rts
*--- Affichage bouton E/O
PrintEO sty EOpnt3+1
lda AdrScrBtn,x ; Adresse ecran des boutons
sta EOpnt5+1
cpx #36 ; Si a l'est, si a l'ouest
bcs EOpnt1
lda #4 ; on veut sprite 4
bra EOpnt2
EOpnt1 lda #12 ; on veut sprite 12
EOpnt2 clc
EOpnt3 adc #0
tax
lda sprButtn,x ; Adresse planche de sprites des buttns
clc
adc AdrDecor
clc
adc ptrSPRITES
sta EOpnt4+1
ldy #13
]lp ldx #2
EOpnt4 ldal $012000,x
EOpnt5 stal $012000,x
dex
dex
bpl EOpnt4
lda EOpnt4+1
clc
adc #$a0
sta EOpnt4+1
lda EOpnt5+1
clc
adc #$a0
sta EOpnt5+1
dey
bpl ]lp
rts
*--------------------------
* Routines scrolls
*--------------------------
DoScroll lda MyColumn ; Ma colonne
cmp #18
bcs scrol1
brl ScrollNorth
scrol1 cmp #36
bcs scrol2
brl ScrollEast
scrol2 cmp #54
bcs scrol3
brl ScrollSouth
scrol3 brl ScrollWest
*--- Scroll plateau haut->bas
ScrollNorth ldx MyColumn
lda TblPlateau,x
sta MyArrivee
lda Fleches,x
dec
asl
tax
lda TblPlateau2,x
clc
adc MyArrivee
sta MyDepart
ldx MyDepart
lda Plateau,x
tay
]lp txa
sec
sbc #18
tax
lda Plateau,x
sta Plateau+18,x
cpx MyArrivee
bne ]lp
tya
sta Plateau,x
lda Diabolic
bne noScrN
jsr ScrNorth
noScrN rts
*--- Scroll plateau droite->gauche
ScrollEast ldx MyColumn
lda TblPlateau,x
clc
adc #2
sta MyArrivee
lda Fleches,x
asl
sta PlaEast1+1
lda MyArrivee
sec
PlaEast1 sbc #$0000
sta MyDepart
ldx MyDepart
lda Plateau,x
tay
]lp lda Plateau+2,x
sta Plateau,x
inx
inx
cpx MyArrivee
bne ]lp
tya
sta Plateau-2,x
lda Diabolic
bne noScrE
jsr ScrEast
noScrE rts
*--- Scroll plateau bas->haut
ScrollSouth ldx MyColumn
lda TblPlateau,x
sta MyArrivee
lda Fleches,x
dec
asl
tax
lda TblPlateau2,x
sta PlaSouth1+1
lda MyArrivee
sec
PlaSouth1 sbc #$ffff
sta MyDepart
ldx MyDepart
lda Plateau,x
tay
]lp lda Plateau+18,x
sta Plateau,x
txa
clc
adc #18
tax
cpx MyArrivee
bne ]lp
tya
sta Plateau,x
lda Diabolic
bne noScrS
jsr ScrSouth
noScrS rts
*--- Scroll plateau gauche->droite
ScrollWest ldx MyColumn
lda TblPlateau,x
sta MyArrivee
lda Fleches,x
asl
clc
adc MyArrivee
sec
sbc #2
sta MyDepart
ldx MyDepart
lda Plateau,x
tay
]lp dex
dex
lda Plateau,x
sta Plateau+2,x
cpx MyArrivee
bne ]lp
tya
sta Plateau,x
lda Diabolic
bne noScrW
jsr ScrWest
noScrW rts
*--------------------------
* Routines scrolls ecran
*--------------------------
*--- Scroll plateau haut->bas
ScrNorth ldx MyArrivee
lda scrBig,x
sta MyScrArr
lda MyDepart
clc
adc #18
tax
lda scrBig,x
sec
sbc #$a0
sta MyScrDep
ldy #13
scrN1 ldx MyScrDep
ldal $012000,x
sta Buffer
ldal $012002,x
sta Buffer+2
ldal $012004,x
sta Buffer+4
ldal $012006,x
sta Buffer+6
]lp txa
sec
sbc #$a0
tax
ldal $012000,x ; Deplace vers le haut
stal $0120a0,x
ldal $012002,x
stal $0120a2,x
ldal $012004,x
stal $0120a4,x
ldal $012006,x
stal $0120a6,x
cpx MyScrArr
bne ]lp
ldx MyScrArr
lda Buffer
stal $012000,x
lda Buffer+2
stal $012002,x
lda Buffer+4
stal $012004,x
lda Buffer+6
stal $012006,x
jsr nextVBL
dey
bpl scrN1
rts
*--- Scroll plateau droite->gauche
ScrEast lda MyArrivee
sec
sbc #2
tax
lda scrBig,x
clc
adc #7
sta MyScrArr
ldx MyDepart
lda scrBig,x
sta MyScrDep
lda MyScrArr
sec
sbc MyScrDep
sta MyScrLth
lda #7
sta CSEtemp
*---
scrE1 lda #$0001
sta Arrivee+2
sta Debut+2
lda #$2000
clc
adc MyScrDep
sta Arrivee
inc
sta Debut
ldx #13
scrE2 sep #$30
ldy #0
lda [Arrivee],y
sta Buffer
]lp lda [Debut],y
sta [Arrivee],y
iny
cpy MyScrLth
bne ]lp
lda Buffer
sta [Arrivee],y
rep #$30
lda Arrivee
clc
adc #$a0
sta Arrivee
inc
sta Debut
dex
bpl scrE2
jsr nextVBL
dec CSEtemp
bpl scrE1
rts
*--- Scroll plateau bas->haut
ScrSouth lda MyArrivee
clc
adc #18
tax
lda scrBig,x
sec
sbc #$a0
sta MyScrArr
ldx MyDepart
lda scrBig,x
sta MyScrDep
ldy #13
scrS1 ldx MyScrDep
ldal $012000,x
sta Buffer
ldal $012002,x
sta Buffer+2
ldal $012004,x
sta Buffer+4
ldal $012006,x
sta Buffer+6
]lp ldal $0120a0,x ; Deplace vers le haut
stal $012000,x
ldal $0120a2,x
stal $012002,x
ldal $0120a4,x
stal $012004,x
ldal $0120a6,x
stal $012006,x
txa
clc
adc #$a0
tax
cpx MyScrArr
bne ]lp
ldx MyScrArr
lda Buffer
stal $012000,x
lda Buffer+2
stal $012002,x
lda Buffer+4
stal $012004,x
lda Buffer+6
stal $012006,x
jsr nextVBL
dey
bpl scrS1
rts
*--- Scroll plateau gauche->droite
ScrWest ldx MyArrivee
lda scrBig,x
sta MyScrArr
ldx MyDepart
lda scrBig,x
clc
adc #7
sta MyScrDep
lda MyScrDep
sec
sbc MyScrArr
sta MyScrLth
lda #7
sta CSEtemp
*---
scrW1 lda #$0001
sta Arrivee+2
sta Debut+2
lda #$2000
clc
adc MyScrArr
sta Arrivee
dec
sta Debut
ldx #13
scrW2 sep #$30
ldy MyScrLth
lda [Arrivee],y
sta Buffer
]lp lda [Debut],y
sta [Arrivee],y
dey
bpl ]lp
iny
lda Buffer
sta [Arrivee],y
rep #$30
lda Arrivee
clc
adc #$a0
sta Arrivee
dec
sta Debut
dex
bpl scrW2
jsr nextVBL
dec CSEtemp
bpl scrW1
rts
*--------------------------
* Sprites routines
*--------------------------
WriteBig dec
asl ; Calcule adresse du sprite big
tay
lda sprBig,y
clc
adc AdrDecor
clc
adc ptrSPRITES
sta Debut
lda scrBig,x ; Calcule adresse arrivee
clc
adc #$2000
sta Arrivee
ldx #$000d
]lp ldy #0
lda [Debut],y ; Arriv: destination
sta [Arrivee],y ; Debut: source
iny
iny
lda [Debut],y
sta [Arrivee],y
iny
iny
lda [Debut],y
sta [Arrivee],y
iny
iny
lda [Debut],y
sta [Arrivee],y
lda Debut
clc
adc #$a0
sta Debut
lda Arrivee
clc
adc #$a0
sta Arrivee
dex
bpl ]lp
rts
*--- Affiche un petit sprite
WriteSmall dec
asl ; Calcule adresse du sprite small
tay
lda sprSmall,y
clc
adc AdrDecor
clc
adc ptrSPRITES
sta Debut
lda scrSmall,x ; Calcule adresse arrivee
clc
adc #$2000 ; $2140
sta Arrivee
ldx #$0006
]lp ldy #0
lda [Debut],y ; Arriv: destination
sta [Arrivee],y ; Debut: source
iny
iny
lda [Debut],y
sta [Arrivee],y
lda Debut
clc
adc #$a0
sta Debut
lda Arrivee
clc
adc #$a0
sta Arrivee
dex
bpl ]lp
rts
asc 'BIG Shit to Yoshi, you, little lamer',8D
asc 'Do something for the IIgs before you criticize us :-D',8D
*--------------------------
* Routines sonores
*--------------------------
startNT tdc
clc
adc #$100
pha
_NTStartUp
rts
startZIK PushLong ptrMUSIC
_NTInitMusic
_NTLaunchMusic
rts
stopZIK _NTStopMusic
rts
stopNT _NTStopMusic
_NTShutDown
rts
*---
startSND tdc
clc
adc #$0100
pha
_SoundStartUp
rts
playSND cmp #1
beq playEND
ldx ptrSOUND1
ldy ptrSOUND1+2
lda #$28
bra playZEN
playEND ldx ptrSOUND2
ldy ptrSOUND2+2
lda #$eb
playZEN stx pZIKptr
sty pZIKptr+2
sta pZIKptr+4
PushWord #%01111111_11111111
_FFStopSound
PushWord #$0201
PushLong #pZIKptr
_FFStartSound
rts
stopSND _SoundShutDown
rts
pZIKptr ds 4
ds 2
dw $1b7
dw $8000
dw $6
ds 4
dw $ff
*--------------------------
* Routines gs/os
*--------------------------
loadFILE sta proOpen+4
stx proRead+5
loadFILE1 jsl proDOS
dw $2010
adrl proOpen
bcs loadERR
lda proOpen+2
sta proGetEof+2
sta proRead+2
jsl proDOS
dw $2019
adrl proGetEof
lda proGetEof+4
sta sizeEOF
sta proRead+8
lda proGetEof+6
sta proRead+10
jsl proDOS
dw $2012
adrl proRead
bcs loadERR
loadFILE2 jsl proDOS
dw $2014
adrl proClose
clc
rts
loadERR jsr loadFILE2
nop
nop
PushWord #0
PushLong #proSTR1
PushLong #proSTR2
PushLong #proSTR3
PushLong #proSTR4
_TLTextMountVolume
pla
cmp #1
bne loadERR1
brl loadFILE1
loadERR1 sec
rts
*---
saveFILE jsl proDOS
dw $2005
adrl proInfo
jsl proDOS
dw $2002
adrl proKill
jsl proDOS
dw $2001
adrl proCreate
bcs saveERR
lda #pTEMP
sta proOpen+4
lda #^pTEMP
sta proOpen+6
jsl proDOS
dw $2010
adrl proOpen
lda proOpen+2
sta proWrite+2
sta proClose+2
jsl proDOS
dw $2013
adrl proWrite
saveFILE2 jsl proDOS
dw $2014
adrl proClose
rts
saveERR PushWord #0
PushLong #proSTR11
PushLong #proSTR2
PushLong #proSTR31
PushLong #proSTR41
_TLTextMountVolume
pla
cmp #1
bne saveFILE2
brl saveFILE
asc 'Whose turn is it now??',8D
*--------------------------
* Routines diverses
*--------------------------
*--- Erreur de memoire
memERR bcs memERR1 ; Erreur de memoire
rts
memERR1 PushWord #0
PushLong #memSTR1
PushLong #memSTR2
PushLong #proSTR3
PushLong #proSTR4
_TLTextMountVolume
pla
memERR2 jmp initOFF
memERR3 lda #$6060
sta memERR2
jsr memERR1
brl initOFF1
*--- Attend une synchro ecran
nextVBL lda #150
jsr waitSPOT
jsr waitVBL
rts
waitSPOT lsr
sta waitSPOT2+1
waitSPOT1 ldal $e0c02e
and #$7f
waitSPOT2 cmp #150
blt waitSPOT1
cmp #100
bge waitSPOT1
rts
waitVBL ldal $e0c019
and #$80
beq waitVBL
rts
*--- unPACK un fichier
unPACK sta decPIC+1
lda ptrUNPACK+1
sta decBUF+1
sty decSIZ
PushWord #$0000
PushLong decBUF
PushWord sizeEOF
PushLong #decPIC
PushLong #decSIZ
_UnPackBytes
pla
rts
*--- Genere un nombre aleatoire
Random ldal $e0c02e
xba
clc
adc VBLCounter0
sta VBLCounter0
and #$ff
rts
*--- Attend A secondes
nowWait dec
tax
lda #0
]lp clc
adc #60
cpx #0
beq Wait1
dex
bra ]lp
Wait1 pha
jsr waitVBL
bcc Wait2
]lp ldal $e0c019
and #$80
bne ]lp
pla
dec
bne Wait1
sec
rts
Wait2 plx
clc
rts
*--------------------------
* Interruption VBL
*--------------------------
myVBL ds 4
VBLcnt da 60
da $a55a
phb
phk
plb
rep #$30
lda #60
sta VBLcnt
lda noINTER
beq noVBL
jsr ahTIME
noVBL sep #$30
plb
clc
rtl
mx %00 ; A laisser pour avoir suite en 16 bits
*---
myRAN ds 4 ;link
RANcnt da 1 ;count
da $a55a ;signature
phb
phk
plb
rep #$30
inc VBLCounter0
lda #1
sta RANcnt
sep #$30
plb
clc
rtl
mx %00
*--------------------------
* Routines graphiques
*--------------------------
*--- Affiche une chaine de nombres (petits caracteres)
printNUM sta pntNum1+1
txa
sta pntNum4+1
sty pntNum3+1
pntNum1 lda $ffff ; Prend caractere
and #$00ff
bne pntNum2
rts
pntNum2 cmp #$20
bne pntNum2a
lda #'0'
pntNum2a sec
sbc #'0'
asl
tax ; Adresse du caractere
lda sprNum,x
sta pntNum3A+1
lda CurDecor ; Rajoute adresse decor
dec
asl
tax
lda sprDecor,x
clc
adc ptrSPRITES
clc
pntNum3 adc #$ffff
clc
pntNum3A adc #$ffff
sta pntNum5+1
pntNum4 lda #$ffff
clc
adc #$2000 ; +$2000, debut d'ecran
sta pntNum6+1
inc pntNum1+1
ldy #4
ldx #0
pntNum5 ldal $012000,x
pntNum6 stal $012000,x
lda pntNum5+1
clc
adc #$a0
sta pntNum5+1
lda pntNum6+1
clc
adc #$a0
sta pntNum6+1
dey
bpl pntNum5
lda pntNum4+1
clc
adc #2
sta pntNum4+1
brl pntNum1
*--- fade in
fadeIN sta fadeIN1+2
clc
adc #$007e
sta fadeIN5+2
sta fadeIN7+2
sta fadeIN9+2
cpy #-1
beq fadeIN2
ldx #$7dfe
fadeIN1 ldal $062000,x
stal $012000,x
dex
dex
bpl fadeIN1
fadeIN2 ldy #$000f
fadeIN3 ldx #$01fe
fadeIN4 ldal $019e00,x
and #$000f
sta temp
fadeIN5 ldal $069e00,x
and #$000f
cmp temp
beq fadeIN6
ldal $019e00,x
clc
adc #$0001
stal $019e00,x
fadeIN6 ldal $019e00,x
and #$00f0
sta temp
fadeIN7 ldal $069e00,x
and #$00f0
cmp temp
beq fadeIN8
ldal $019e00,x
clc
adc #$0010
stal $019e00,x
fadeIN8 ldal $019e00,x
and #$0f00
sta temp
fadeIN9 ldal $069e00,x
and #$0f00
cmp temp
beq fadeIN10
ldal $019e00,x
clc
adc #$0100
stal $019e00,x
fadeIN10 dex
dex
bpl fadeIN4
jsr nextVBL
dey
bpl fadeIN3
rts
*---
fadeOUT ldy #$000f
fadeOUT1 ldx #$01fe
fadeOUT2 ldal $019e00,x
and #$000f
beq fadeOUT3
ldal $019e00,x
sec
sbc #$0001
stal $019e00,x
fadeOUT3 ldal $019e00,x
and #$00f0
beq fadeOUT4
ldal $019e00,x
sec
sbc #$0010
stal $019e00,x
fadeOUT4 ldal $019e00,x
and #$0f00
beq fadeOUT5
ldal $019e00,x
sec
sbc #$0100
stal $019e00,x
fadeOUT5 dex
dex
bpl fadeOUT2
jsr nextVBL
dey
bpl fadeOUT1
ldx #$7ffe
lda #$0000
]lp stal $012000,x
dex
dex
bpl ]lp
rts
*-------------------------- Routine 3200
do3200 stz Debut
stz Debut+2
sta Debut+1
sep #$20
lda #$1e
stal $e0c035
rep #$20
ldx #$7ffe
lda #0
]lp stal $012000,x
stal $e12000,x
dex
dex
bpl ]lp
ldy #$7d00
ldx #0
]lp lda [Debut],y
stal $012000,x
iny
iny
inx
inx
cpx #$1900
bne ]lp
sep #$20
ldx #$00
do32001 lda #$0f
]lp stal $019d00,x
stal $e19d00,x
inx
cpx #$c8
beq do32002
dec
bpl ]lp
bra do32001
do32002 lda #0
stal $e0c035
rep #$20
ldy #$7cfe
]lp tyx
lda [Debut],y
stal $e12000,x
dey
dey
bpl ]lp
phd
tsc
sta mySTACK
sei
stz temp
*--- Main routine 3200
ldal $e0c068
ora #$30
stal $e0c068
do32003 ldy #0
lda #$1f00
tcd
do32004 ldal $e0c02e
and #$ff
cmp affTBL,y
bne do32004
iny
iny
lda #$9fff
tcs
tdc
clc
adc #$0100
tcd
]affPOS1 = $00
lup $80
pei ]affPOS1
]affPOS1 = ]affPOS1+2
--^
tdc
clc
adc #$0100
tcd
]affPOS1 = $00
lup $80
pei ]affPOS1
]affPOS1 = ]affPOS1+2
--^
cpy #$1a
beq do32005
brl do32004
do32005 lda temp
inc
sta temp
cmp #150
beq do32006
brl do32003
do32006 ldal $e0c068
and #$cf
stal $e0c068
*--- End of routine
cli
lda mySTACK
tcs
pld
phk
plb
rts
*-------------------------- Olivier's place
put Cogito.Main
put Cogito.Bout
*--------------------------
* All the datas
*--------------------------
*--- Parametres du jeu
Probleme ds 162
Plateau ds 162
Niveau ds 2
NbCoups ds 4
NbCompute ds 2
Temps ds 6
CurDecor ds 2
hex 8d8d
asc '------------- Cogito -------------',8d
asc 'Programme original: Jerome Cretaux',8d
asc 'Version Apple //gs: Antoine Vignau',8d
asc ' Olivier Zardini',8d
asc '----------- 26 08 1994 -----------',8d,8d
*--- Tables des adresses des datas
AdrCalcDec da Decor1,Decor2,Decor3,Decor4,Decor5
da Decor6,Decor7,Decor8,Decor9,Decor10
*--- Adresses des sprites
sprDecor da $0000,$1900,$3200,$4b00
sprBig da $0b41,$0b4a,$0b53,$0b5c,$0b65,$0b6e
sprSmall da $0b77,$0b7c,$0b81,$0b86,$0b8b,$0b90
sprButtn da $0141,$014a
da $0153,$015c
da $0165,$016e
da $0177,$0180
sprNum da $49,$4c,$4f,$52,$55,$58,$5b,$5e,$61,$64
*--- Correspondance de tables
myTable dw 2,4,1,3
firstENTRY ds 2
*--- Adresses ecrans
scrBig da $172a,$1732,$173a,$1742,$174a,$1752,$175a,$1762,$176a
da $1fea,$1ff2,$1ffa,$2002,$200a,$2012,$201a,$2022,$202a
da $28aa,$28b2,$28ba,$28c2,$28ca,$28d2,$28da,$28e2,$28ea
da $316a,$3172,$317a,$3182,$318a,$3192,$319a,$31a2,$31aa
da $3a2a,$3a32,$3a3a,$3a42,$3a4a,$3a52,$3a5a,$3a62,$3a6a
da $42ea,$42f2,$42fa,$4302,$430a,$4312,$431a,$4322,$432a
da $4baa,$4bb2,$4bba,$4bc2,$4bca,$4bd2,$4bda,$4be2,$4bea
da $546a,$5472,$547a,$5482,$548a,$5492,$549a,$54a2,$54aa
da $5d2a,$5d32,$5d3a,$5d42,$5d4a,$5d52,$5d5a,$5d62,$5d6a
da $65ea,$65f2,$65fa,$6602,$660a,$6612,$661a,$6622,$662a
da $6eaa,$6eb2,$6eba,$6ec2,$6eca,$6ed2,$6eda,$6ee2,$6eea
scrSmall da $5432,$5436,$543a,$543e,$5442,$5446,$544a,$544e,$5452
da $5892,$5896,$589a,$589e,$58a2,$58a6,$58aa,$58ae,$58b2
da $5cf2,$5cf6,$5cfa,$5cfe,$5d02,$5d06,$5d0a,$5d0e,$5d12
da $6152,$6156,$615a,$615e,$6162,$6166,$616a,$616e,$6172
da $65b2,$65b6,$65ba,$65be,$65c2,$65c6,$65ca,$65ce,$65d2
da $6a12,$6a16,$6a1a,$6a1e,$6a22,$6a26,$6a2a,$6a2e,$6a32
da $6e72,$6e76,$6e7a,$6e7e,$6e82,$6e86,$6e8a,$6e8e,$6e92
da $72d2,$72d6,$72da,$72de,$72e2,$72e6,$72ea,$72ee,$72f2
da $7732,$7736,$773a,$773e,$7742,$7746,$774a,$774e,$7752
*--- Adresses messages
AdrScrBtn da $30ea,$30f2,$30fa,$3102,$310a,$3112,$311a,$3122,$312a
da $3773,$4033,$48f3,$51b3,$5a73,$6333,$6bf3,$74b3,$7d73
da $872a,$8732,$873a,$8742,$874a,$8752,$875a,$8762,$876a
da $3725,$3fe5,$48a5,$5165,$5a25,$62e5,$6ba5,$7465,$7d25
*--- Adresses pour les donnees du tableau
zePANEL da $0bc8,$0202,$2f58,$45d2
zePANEL2 da $026b,$116b,$1fcb,$2e2b,$3c8b,$4aeb,$594b,$67ab
da $0254,$1154,$1fb4,$2e14,$3c74
zeTEMPS1 da $0c6b,$02a5,$2ffb,$4675
zeTEMPS2 da $0c70,$02aa,$3000,$467a
zeTEMPS3 da $0c75,$02af,$3005,$467f
zeNIVEAU da $1029,$0663,$33b9,$4a33
zeCOMPCP da $1035,$066f,$33c5,$4a3f
zeMOICP da $13eb,$0a25,$377b,$4df5
*--- Couleurs
colorA ds 2
colorB ds 2
colorC ds 2
*--- Pour les textes
String asc " ",00
LgStrPtr asc '1234567',00
StrPtr asc '123',00
StrTime asc '12',00
CSEtemp ds 2
*--- Pour deplacements
MyArrow ds 2
MyColumn ds 2
MyDepart ds 2
MyArrivee ds 2
MyScrDep ds 2
MyScrArr ds 2
MyScrLth ds 2
Buffer ds 8
WhichDep ds 2
WhichDecor ds 2
WhichName ds 2
AdrDecor ds 2
NbMelange ds 2
Melange ds 2
noINTER ds 2
fgTIME ds 2
ldFlag ds 2
vivaTOINET ds 2
Diabolic ds 2
fgMUSIC ds 2
fgSOUND1 ds 2
fgSOUND2 ds 2
fgWHICH ds 2 ; 0: NT, 1: Sound Tool Set
fgDOC ds 2 ; 0: french, 1: other
fgRANDOM ds 2
*--- Messages
memSTR1 str 'Can'27't allocate (screen) memory'
memSTR2 str 'Press a key to quit.'
proSTR1 str 'Can'27't load file'
proSTR11 str 'Can'27't save file'
proSTR2 str 'Do what now ?'
proSTR3 str '[RET] Continue'
proSTR31 str '[RET] Retry'
proSTR4 str '[ESC] Quit'
proSTR41 str '[ESC] Cancel'
*--- Prodos
proQuit dw 2
ds 4
ds 2
proOpen dw 2
ds 2
adrl pCOGITO
proGetEof dw 2
ds 2
ds 4
proRead dw 4
ds 2
ds 4
ds 4
ds 4
proClose dw 1
ds 2
proCreate dw 7
adrl pTEMP ; Pathname
dw $e3 ; AccessCode
dw $5a ; FileType
ds 4 ; AuxType
dw $02 ; Type d'enregistrement
adrl 340 ; Data segment
ds 4 ; Resource segment
proKill dw 1
adrl pTEMP ; Pathname
proInfo dw 4
adrl pTEMP ; Pathname
dw $e3 ; AccessCode
dw $5a ; FileType
ds 4 ; AuxType
proWrite dw 5
ds 2 ; Id
adrl Probleme ; Where
adrl 340 ; Length
ds 4 ; Written
ds 2
sizeEOF ds 2
*--- Nom des fichiers
pCOGITO strl '1/Cogito.Datas/Cogito'
pTOINET strl '1/Cogito.Datas/Toinet'
pSUPERMAN strl '1/Cogito.Datas/Superman'
pMESSAGE strl '1/Cogito.Datas/Messages'
pSPRITES strl '1/Cogito.Datas/Sprites'
pHAPPY strl '1/Cogito.Datas/Happyland'
pLUDY strl '1/Cogito.Datas/Ludyland'
pPLANET strl '1/Cogito.Datas/Planetlast'
pXENO strl '1/Cogito.Datas/Xenolast'
pTEMP strl '1/Cogito.Datas/Temp'
pSOUND1 strl '1/Cogito.Datas/Sound.1'
pSOUND2 strl '1/Cogito.Datas/Sound.2'
pMUSIC strl '1/Cogito.Datas/Music'
*---
PanelX1 HEX 0E01,4200,EE00,E200
PanelX2 HEX 3201,6600,1201,0601
PanelY1 HEX 0C00,0000,4600,6A00
PanelY2 HEX 1800,0900,5100,7500
*--- Memoire
myID ds 2
mySTACK ds 2
proDecor dw 8,9,0,1
ptrDECOR ds 4
ptrHAPPY ds 4
ptrPLANET ds 4
ptrMESSAGE ds 4
ptrSUPERMAN ds 4
ptrTOINET ds 4
ptrSOUND2 ds 4
ptrMUSIC ds 4
ds 4
ptrLUDY ds 4
ptrXENO ds 4
ptrSPRITES ds 4
ptrUNPACK ds 4
ptrSOUND1 ds 4
save1 ds 1
save2 ds 1
save3 ds 1
save4 ds 1
VBLCounter0 ds 2
affTBL dw $e4,$84,$8c,$94,$9c,$a4,$ac
dw $b4,$bc,$c4,$cc,$d4,$dc
*--- Decompactage
decBUF adrl $00002000
decPIC adrl $00060000
decSIZ dw $8000
temp ds 2
*--- Fleches
Fleches ds 72
Fleches2 ds 72
*--- Tableau
TblPlateau da 0,2,4,6,8,10,12,14,16
da 16,34,52,70,88,106,124,142,160
da 144,146,148,150,152,154,156,158,160
TblPlateau2 da 0,18,36,54,72,90,108,126,144
*--- Tables pour le choix des deplacements
TblDeplacement da 35,35,80,60,80,60,60,60,35,500,35,30
TblMel38 da 9,10,11,12,13,14,15,16,17
da 0,1,2,3,4,5,6,7,8
da 27,28,29,30,31,32,33,34,35
da 18,19,20,21,22,23,24,25,26
TblMel5 da 18,19,20,21,22,23,24,25,26
da 27,28,29,30,31,32,33,34,35
da 0,1,2,3,4,5,6,7,8
da 9,10,11,12,13,14,15,16,17
TblMel67 da 26,25,24,23,22,21,20,19,18
da 35,34,33,32,31,30,29,28,27
da 8,7,6,5,4,3,2,1,0
da 17,16,15,14,13,12,11,10,9
TblMel9 da 8,7,6,5,4,3,2,1,0
da 17,16,15,14,13,12,11,10,9
da 26,25,24,23,22,21,20,19,18
da 35,34,33,32,31,30,29,28,27
TblMel11 da 1,2,3,4,5,6,7,8,0
da 10,11,12,13,14,15,16,17,9
da 19,20,21,22,23,24,25,26,18
da 28,29,30,31,32,33,34,35,27
TblMel12 da 7,8,0,1,2,3,4,5,6
da 16,17,9,10,11,12,13,14,15
da 25,26,18,19,20,21,22,23,24
da 34,35,27,28,29,30,31,32,33
*--- Correspondance niveau/deplacement
ChoixDeplace da 1,2,3,4,5,6,7,8,9,10,11,12
da 1,2,3,4,5,6,7,8,9,10,11,12
da 1,2,3,4,5,6,7,8,9,10,11,12
da 1,2,3,4,5,6,7,8,9,10,11,12
da 1,2,3,4,5,6,7,8,9,10,11,12
da 1,2,3,4,5,6,7,8,9,10,11,12
da 1,2,3,4,5,6,7,8,9,10,11,12
da 1,2,3,4,5,6,7,8,9,10,11,12
da 1,2,3,4,5,6,7,8,9,10,11,12
da 1,2,3,4,5,6,7,8,9,10,11,12
ChoixDecor da 1,1,1,1,1,1,1,1,1,1,1,1
da 2,2,2,2,2,2,2,2,2,2,2,2
da 3,3,3,3,3,3,3,3,3,3,3,3
da 4,4,4,4,4,4,4,4,4,4,4,4
da 5,5,5,5,5,5,5,5,5,5,5,5
da 6,6,6,6,6,6,6,6,6,6,6,6
da 7,7,7,7,7,7,7,7,7,7,7,7
da 8,8,8,8,8,8,8,8,8,8,8,8
da 9,9,9,9,9,9,9,9,9,9,9,9
da 10,10,10,10,10,10,10,10,10,10,10,10
*---
AdrDecor5 da 1,1,1,1,1,1,1,1,1
da 1,2,2,2,6,3,3,3,1
da 1,2,2,2,6,3,3,3,1
da 1,2,2,2,6,3,3,3,1
da 1,6,6,6,6,6,6,6,1
da 1,4,4,4,6,5,5,5,1
da 1,4,4,4,6,5,5,5,1
da 1,4,4,4,6,5,5,5,1
da 1,1,1,1,1,1,1,1,1
AdrDecor6 da 1,2,3,4,5,6,1,2,3
da 1,2,3,4,5,6,1,2,3
da 1,2,3,4,5,6,1,2,3
da 1,2,3,4,5,6,1,2,3
da 1,2,3,4,5,6,1,2,3
da 1,2,3,4,5,6,1,2,3
da 1,2,3,4,5,6,1,2,3
da 1,2,3,4,5,6,1,2,3
da 1,2,3,4,5,6,1,2,3
AdrDecor7 da 2,4,4,6,5,6,4,4,2
da 4,2,4,6,5,6,4,2,4
da 4,4,2,6,3,6,2,4,4
da 6,6,6,2,1,2,6,6,6
da 5,5,3,1,2,1,3,5,5
da 6,6,6,2,1,2,6,6,6
da 4,4,2,6,3,6,2,4,4
da 4,2,4,6,5,6,4,2,4
da 2,4,4,6,5,6,4,4,2
AdrDecor8 da 2,2,2,5,5,5,4,4,4
da 2,2,2,5,5,5,4,4,4
da 2,2,2,5,5,5,4,4,4
da 3,3,3,6,6,6,3,3,3
da 3,3,3,6,6,6,3,3,3
da 3,3,3,6,6,6,3,3,3
da 4,4,4,1,1,1,2,2,2
da 4,4,4,1,1,1,2,2,2
da 4,4,4,1,1,1,2,2,2
AdrDecor9 da 1,1,1,1,1,1,1,1,1
da 3,1,1,1,1,1,1,1,4
da 3,3,6,6,6,6,6,4,4
da 3,3,6,1,1,1,6,4,4
da 3,3,6,6,6,6,6,4,4
da 3,3,6,2,2,2,6,4,4
da 3,3,6,6,6,6,6,4,4
da 3,2,2,2,2,2,2,2,4
da 2,2,2,2,2,2,2,2,2
*--- Lignes
Ligne = *
]Ligne = $0
lup 200
da ]Ligne
]Ligne = ]Ligne+160
--^
*--- Fin du code...