mirror of
https://github.com/antoinevignau/source.git
synced 2024-11-15 13:05:18 +00:00
8bcb0f957b
b/c I've lost the English translation...
2192 lines
31 KiB
ArmAsm
2192 lines
31 KiB
ArmAsm
*
|
|
* Bill Palmer
|
|
*
|
|
* (c) 1987, François Coulon
|
|
* (c) 2021, Brutal Deluxe
|
|
*
|
|
|
|
lst off
|
|
rel
|
|
dsk palmer.l
|
|
|
|
mx %00
|
|
xc
|
|
xc
|
|
|
|
*----------------------------------- Macros
|
|
|
|
use 4/Ctl.Macs
|
|
use 4/Desk.Macs
|
|
use 4/Event.Macs
|
|
use 4/Int.Macs
|
|
use 4/Line.Macs
|
|
use 4/Locator.Macs
|
|
use 4/Mem.Macs
|
|
use 4/Menu.Macs
|
|
use 4/MIDISyn.Macs
|
|
use 4/Misc.Macs
|
|
use 4/Print.Macs
|
|
use 4/Qd.Macs
|
|
use 4/QdAux.Macs
|
|
use 4/Resource.Macs
|
|
use 4/Scrap.Macs
|
|
use 4/Sound.Macs
|
|
use 4/Std.Macs
|
|
use 4/TextEdit.Macs
|
|
use 4/Util.Macs
|
|
use 4/Window.Macs
|
|
|
|
*----------------------------------- Constantes
|
|
|
|
*-------------- Softswitches
|
|
|
|
RDVBLBAR = $E0C019
|
|
GSOS = $e100a8
|
|
|
|
*-------------- GUI
|
|
|
|
wMAIN = 1
|
|
alertQUIT = 1
|
|
alertRESTART = 2
|
|
|
|
refIsPointer = $0
|
|
refIsHandle = $1
|
|
refIsResource = $2
|
|
|
|
appleKey = $0100
|
|
|
|
*--------------
|
|
|
|
dpFROM = $00
|
|
dpTO = dpFROM+4
|
|
Second = dpTO+4
|
|
dpSTR = Second+4
|
|
dpBUF = dpSTR+4
|
|
dpSALLE = dpBUF+4
|
|
|
|
*---
|
|
|
|
TRUE = 255
|
|
FALSE = 0
|
|
|
|
*----------------------------------- Entry point
|
|
|
|
phk
|
|
plb
|
|
|
|
_TLStartUp
|
|
pha
|
|
_MMStartUp
|
|
pla
|
|
sta myID
|
|
|
|
tdc
|
|
sta myDP
|
|
|
|
*--- Version du systeme
|
|
|
|
jsl GSOS
|
|
dw $202a
|
|
adrl proVERS
|
|
|
|
lda proVERS+2
|
|
and #%01111111_11111111
|
|
cmp #$0402
|
|
bcs okVERS
|
|
|
|
pha
|
|
PushLong #verSTR1
|
|
PushLong #verSTR2
|
|
PushLong #errSTR1
|
|
PushLong #errSTR2
|
|
_TLTextMountVolume
|
|
pla
|
|
brl meQUIT1
|
|
|
|
*--- 64K pour les images des scènes
|
|
|
|
okVERS jsr make64KB
|
|
bcc okMEM1
|
|
|
|
koMEM pha
|
|
PushLong #memSTR1
|
|
PushLong #errSTR2
|
|
PushLong #errSTR1
|
|
PushLong #errSTR2
|
|
_TLTextMountVolume
|
|
pla
|
|
brl meQUIT1
|
|
|
|
okMEM1
|
|
sty ptrIMAGE
|
|
sty ptrToSourceLocInfo+2
|
|
stx ptrIMAGE+2
|
|
stx ptrToSourceLocInfo+4
|
|
|
|
sep #$10 ; save ptrIMAGE+2
|
|
stx saveBACK1+3 ; for interactions
|
|
stx loadBACK1+3 ; with the toolbox
|
|
rep #$10
|
|
|
|
*--- 64K pour les images compressees et les icônes
|
|
|
|
jsr make64KB
|
|
bcs koMEM
|
|
|
|
sty ptrUNPACK
|
|
stx ptrUNPACK+2
|
|
stx ptrICONS+2 ; ptrICONS is set to $8000
|
|
stx iconToSourceLocInfo+4
|
|
|
|
*--- Chargement des outils
|
|
|
|
pha
|
|
pha
|
|
PushWord myID
|
|
PushWord #refIsResource
|
|
PushLong #1
|
|
_StartUpTools
|
|
PullLong SStopREC
|
|
bcc okTOOL
|
|
|
|
pha
|
|
PushLong #tolSTR1
|
|
PushLong #errSTR2
|
|
PushLong #errSTR1
|
|
PushLong #errSTR2
|
|
_TLTextMountVolume
|
|
pla
|
|
brl meQUIT
|
|
|
|
*--- Et la musique...
|
|
|
|
okTOOL
|
|
jsr initMIDI
|
|
|
|
*--- Charge les images nécessaires du jeu
|
|
|
|
lda #pICONS
|
|
ldx ptrUNPACK+2
|
|
ldy ptrUNPACK
|
|
jsr loadFILE
|
|
bcc okMEM2
|
|
|
|
pha
|
|
PushLong #filSTR1
|
|
PushLong #errSTR2
|
|
PushLong #errSTR1
|
|
PushLong #errSTR2
|
|
_TLTextMountVolume
|
|
pla
|
|
brl meQUIT1
|
|
|
|
okMEM2
|
|
tya
|
|
jsr unpackLZ4
|
|
|
|
PushLong ptrIMAGE
|
|
PushLong ptrICONS
|
|
PushLong #32768
|
|
_BlockMove
|
|
|
|
*--- Affichage desktop
|
|
|
|
_HideMenuBar
|
|
|
|
PushWord #0
|
|
PushWord #%11111111_11111111
|
|
PushWord #0
|
|
_FlushEvents
|
|
pla
|
|
|
|
_InitCursor
|
|
|
|
*----------------------------------------
|
|
* INITIALISATIONS
|
|
*----------------------------------------
|
|
|
|
memOK
|
|
PushLong #0
|
|
PushWord #5 ; SetDeskPat
|
|
PushWord #$4000
|
|
PushWord #$00F0
|
|
_Desktop
|
|
pla
|
|
pla
|
|
|
|
pha
|
|
pha
|
|
PushLong #0
|
|
PushLong #wMAIN
|
|
PushLong #PAINTMAIN
|
|
PushLong #0
|
|
PushWord #refIsResource
|
|
PushLong #wMAIN
|
|
PushWord #$800e
|
|
_NewWindow2
|
|
PullLong wiMAIN
|
|
|
|
*----------------------------------------
|
|
* DEBUT DU JEU
|
|
*----------------------------------------
|
|
|
|
jsr debut
|
|
jsr chargement_image
|
|
jsr doSOUNDON
|
|
|
|
*----------------------------------------
|
|
* TASK MASTER
|
|
*----------------------------------------
|
|
|
|
taskLOOP
|
|
PushWord #0
|
|
PushWord #0
|
|
PushWord #$c000
|
|
PushWord #0
|
|
_HandleDiskInsert
|
|
pla
|
|
pla
|
|
|
|
jsr checkREPLAY
|
|
|
|
PushWord #0
|
|
PushWord #%11111111_11111111
|
|
PushLong #taskREC
|
|
_TaskMaster
|
|
pla
|
|
beq taskLOOP
|
|
|
|
asl
|
|
tax
|
|
jsr (taskTBL,x)
|
|
|
|
lda instruction1
|
|
ora instruction2
|
|
ora instructionDIR
|
|
ora zone_cliquee
|
|
beq taskLOOP99
|
|
|
|
jsr commentaires
|
|
jsr directions ; clr instructionDIR
|
|
jsr actions_permanentes
|
|
|
|
lda instruction1
|
|
beq taskLOOP99
|
|
|
|
lda salle
|
|
asl
|
|
tax
|
|
jsr (lessalles,x)
|
|
|
|
taskLOOP99
|
|
stz zone_cliquee
|
|
stz instruction2
|
|
|
|
jsr chargement_image
|
|
bra taskLOOP
|
|
|
|
*----------------------------------- Gestion du keyDown
|
|
* on gère les directions et les open-apple-qqch
|
|
|
|
doKEYDOWN
|
|
lda taskMODIFIERS
|
|
and #appleKey
|
|
cmp #appleKey
|
|
beq doOPENAPPLE
|
|
|
|
*--- gère les directions
|
|
|
|
lda taskMESSAGE
|
|
ldx #nord
|
|
cmp #$0b
|
|
beq keydownOK
|
|
ldx #sud
|
|
cmp #$0a
|
|
beq keydownOK
|
|
ldx #gauche
|
|
cmp #$08
|
|
beq keydownOK
|
|
ldx #droite
|
|
cmp #$15
|
|
beq keydownOK
|
|
rts
|
|
keydownOK
|
|
stx instructionDIR
|
|
rts
|
|
|
|
*--- gère les open-apple-qqch
|
|
|
|
doOPENAPPLE
|
|
ldx #-1
|
|
sep #$20
|
|
]lp inx
|
|
lda tblKEYVALUE,x ; get key
|
|
cmp #$ff ; end of table
|
|
beq doOPENAPPLE99 ; so exit
|
|
cmp taskMESSAGE ; same as pressed key?
|
|
bne ]lp ; no, loop
|
|
|
|
rep #$20
|
|
txa
|
|
asl
|
|
tax
|
|
jmp (tblKEYADDRESS,x)
|
|
|
|
doOPENAPPLE99
|
|
doNOT
|
|
rep #$20
|
|
rts
|
|
|
|
*---
|
|
* Main / Oreille / Bouche sont pris également ! ! !
|
|
|
|
tblKEYVALUE
|
|
asc 'QqLlSs??'
|
|
asc 'Dd'
|
|
asc 'Cc'
|
|
asc 'Zz'
|
|
hex ff
|
|
|
|
tblKEYADDRESS
|
|
da doQUIT,doQUIT,doLOAD,doLOAD,doSAVE,doSAVE,doCOPYRIGHT,doCOPYRIGHT
|
|
da doRESTART,doRESTART
|
|
da doCHEAT,doCHEAT ; cheat mode
|
|
da doMUSIK,doMUSIK
|
|
|
|
*----------------------------------- Gestion du mouseUp
|
|
* on compare les coordonnées avec celles du incontent
|
|
* si dans le même rectangle, on traite
|
|
|
|
doMOUSEUP
|
|
jsr test_icone
|
|
jmp test_zone
|
|
|
|
*----------------------------------- Gestion des controles
|
|
|
|
doCONTROL
|
|
lda taskREC+38
|
|
asl
|
|
tax
|
|
jmp (ctrlTBL,x)
|
|
|
|
*----------------------------------------
|
|
* FENETRES
|
|
*----------------------------------------
|
|
|
|
PAINTMAIN
|
|
PushLong wiMAIN
|
|
_DrawControls
|
|
|
|
* BOX 1,161,318,198
|
|
|
|
PushWord #1
|
|
PushWord #160
|
|
_MoveTo
|
|
|
|
PushWord #317
|
|
PushWord #160
|
|
_LineTo
|
|
|
|
PushWord #317
|
|
PushWord #198
|
|
_LineTo
|
|
|
|
PushWord #1
|
|
PushWord #198
|
|
_LineTo
|
|
|
|
PushWord #1
|
|
PushWord #160
|
|
_LineTo
|
|
|
|
* BOX 1,1,273,110
|
|
|
|
PushWord #1
|
|
PushWord #1
|
|
_MoveTo
|
|
|
|
PushWord #273
|
|
PushWord #1
|
|
_LineTo
|
|
|
|
PushWord #273
|
|
PushWord #110
|
|
_LineTo
|
|
|
|
PushWord #1
|
|
PushWord #110
|
|
_LineTo
|
|
|
|
PushWord #1
|
|
PushWord #1
|
|
_LineTo
|
|
|
|
rtl
|
|
|
|
*----------------------------------------
|
|
* ACTIONS DES CONTROLES DU JEU
|
|
*----------------------------------------
|
|
|
|
doNORD
|
|
doSUD
|
|
doGAUCHE
|
|
doDROITE
|
|
doEXIT
|
|
lda taskREC+38
|
|
sta instructionDIR
|
|
rts
|
|
|
|
*--- Main
|
|
|
|
doMAIN
|
|
lda fgMAIN
|
|
eor #1
|
|
sta fgMAIN
|
|
|
|
lda fgMAIN
|
|
ldx #main
|
|
stx instruction1
|
|
jsr setCTLVALUE
|
|
|
|
lda fgMAIN
|
|
bne mainOK
|
|
|
|
stz instruction1
|
|
ldx #main
|
|
jmp invalCTL
|
|
|
|
mainOK
|
|
stz fgOEIL
|
|
stz fgBOUCHE
|
|
|
|
lda #FALSE ; plus de oeil
|
|
ldx #oeil
|
|
jsr setCTLVALUE
|
|
ldx #oeil
|
|
jsr invalCTL
|
|
|
|
lda #FALSE ; plus de bouche
|
|
ldx #bouche
|
|
jsr setCTLVALUE
|
|
ldx #bouche
|
|
jmp invalCTL
|
|
|
|
*--- Oeil
|
|
|
|
doOEIL
|
|
lda fgOEIL
|
|
eor #1
|
|
sta fgOEIL
|
|
|
|
lda fgOEIL
|
|
ldx #oeil
|
|
stx instruction1
|
|
jsr setCTLVALUE
|
|
|
|
lda fgOEIL
|
|
bne oeilOK
|
|
|
|
stz instruction1
|
|
ldx #oeil
|
|
jmp invalCTL
|
|
|
|
oeilOK
|
|
stz fgMAIN
|
|
stz fgBOUCHE
|
|
|
|
lda #FALSE ; plus de main
|
|
ldx #main
|
|
jsr setCTLVALUE
|
|
ldx #main
|
|
jsr invalCTL
|
|
|
|
lda #FALSE ; plus de bouche
|
|
ldx #bouche
|
|
jsr setCTLVALUE
|
|
ldx #bouche
|
|
jmp invalCTL
|
|
|
|
*--- Bouche
|
|
|
|
doBOUCHE
|
|
lda fgBOUCHE
|
|
eor #1
|
|
sta fgBOUCHE
|
|
|
|
ldx #bouche ; on force la bouche
|
|
stx instruction1
|
|
jsr setCTLVALUE ; et on met la value dans le controle
|
|
|
|
lda fgBOUCHE ; et on a quoi en valeur
|
|
bne boucheOK ; 1 = on va invalider les autres
|
|
|
|
stz instruction1
|
|
ldx #bouche ; 0 = on s'invalide
|
|
jmp invalCTL
|
|
|
|
boucheOK
|
|
stz fgMAIN
|
|
stz fgOEIL
|
|
|
|
lda #FALSE ; plus de main
|
|
ldx #main
|
|
jsr setCTLVALUE
|
|
ldx #main
|
|
jsr invalCTL
|
|
|
|
lda #FALSE ; plus d'oeil
|
|
ldx #oeil
|
|
jsr setCTLVALUE
|
|
ldx #oeil
|
|
jmp invalCTL
|
|
|
|
*--- Play with controls
|
|
|
|
getCTLVALUE
|
|
pea $0000
|
|
pea $0000
|
|
pea $0000
|
|
pea $0000
|
|
phx
|
|
_GetCtlValueByID
|
|
pla
|
|
rts
|
|
|
|
setCTLVALUE
|
|
pha
|
|
pea $0000
|
|
pea $0000
|
|
pea $0000
|
|
phx
|
|
_SetCtlValueByID
|
|
rts
|
|
|
|
invalCTL
|
|
pea $0000 ; space for result
|
|
pea $0000
|
|
pea $0000 ; top window
|
|
pea $0000
|
|
pea $0000 ; ID value for desired control
|
|
phx
|
|
_GetCtlHandleFromID
|
|
_DrawOneCtl
|
|
rts
|
|
|
|
*---
|
|
|
|
fgMAIN ds 2
|
|
fgOEIL ds 2
|
|
fgBOUCHE ds 2
|
|
|
|
*----------------------------------------
|
|
* CODE DU JEU
|
|
*----------------------------------------
|
|
|
|
actions_permanentes
|
|
lda instruction1 ; quelle action ?
|
|
cmp #oeil
|
|
bne ap5 ; ce n'est pas un oeil
|
|
|
|
* cliquer sur un objet avec une instruction avant (que l'on limite à l'oeil)
|
|
|
|
ap1 lda instruction2 ; est-on sur un objet ?
|
|
bne ap2
|
|
rts
|
|
ap2 cmp #nombre_objets ; oeil + objet
|
|
bcc ap3 ; ne teste pas animation
|
|
rts
|
|
|
|
ap3 tax ; objet visible ?
|
|
lda objet_apparu-1,x
|
|
and #$ff
|
|
bne ap4
|
|
rts
|
|
|
|
ap4 txa ; get address of description
|
|
dec
|
|
asl
|
|
tax
|
|
lda description_objet,x
|
|
jmp ecriture ; output it
|
|
|
|
* cliquer sur un objet sans instruction avant
|
|
|
|
ap5 lda instruction1 ; on ne doit pas avoir
|
|
beq ap6 ; d'action active
|
|
rts
|
|
|
|
ap6 lda instruction2 ; est-on sur un objet ?
|
|
bne ap7
|
|
rts
|
|
ap7 cmp #nombre_objets
|
|
bcc ap8 ; ne teste pas animation
|
|
rts
|
|
|
|
ap8 tax
|
|
lda objet-1,x ; a-t-on pris l'objet ?
|
|
and #$ff
|
|
cmp #objet_pris
|
|
bne ap9
|
|
|
|
sep #$20 ; on pose l'objet
|
|
lda salle
|
|
sta objet-1,x
|
|
rep #$20
|
|
jmp inversion_icone
|
|
|
|
* on n'a pas pris l'objet
|
|
|
|
ap9 cmp salle ; on est dans la meme salle ?
|
|
bne ap10
|
|
|
|
sep #$20 ; si on est dans la bonne salle
|
|
lda #objet_pris
|
|
sta objet-1,x
|
|
rep #$20
|
|
jmp affichage_icone
|
|
|
|
ap10 rts
|
|
|
|
*--- Teste si on a cliqué sur un objet
|
|
|
|
test_icone
|
|
stz instruction2
|
|
|
|
lda #0 ; from 1
|
|
]lp pha
|
|
asl
|
|
asl
|
|
asl
|
|
tax
|
|
lda taskWHERE+2 ; compare le X
|
|
cmp icones_coordonnees,x
|
|
bcc icone_ko
|
|
lda icones_coordonnees+4,x
|
|
cmp taskWHERE+2
|
|
bcc icone_ko
|
|
|
|
lda taskWHERE ; et le Y
|
|
cmp icones_coordonnees+2,x
|
|
bcc icone_ko
|
|
lda icones_coordonnees+6,x
|
|
cmp taskWHERE
|
|
bcc icone_ko
|
|
|
|
pla ; on a notre icône
|
|
inc
|
|
sta instruction2
|
|
rts
|
|
|
|
icone_ko
|
|
pla
|
|
inc
|
|
cmp #nombre_objets ; et non plus nombre_icones
|
|
bcc ]lp
|
|
rts
|
|
|
|
*---
|
|
|
|
test_zone
|
|
stz zone_cliquee
|
|
|
|
lda salle
|
|
dec
|
|
asl
|
|
tax
|
|
lda table_salle,x
|
|
sta dpSALLE ; salle1 à salle56
|
|
|
|
ldy #0
|
|
lda (dpSALLE),y
|
|
sta nb_zones
|
|
|
|
lda dpSALLE ; pointe sur les coordonnees de la première zone
|
|
clc
|
|
adc #10
|
|
sta dpSALLE
|
|
|
|
lda #0
|
|
]lp pha
|
|
|
|
ldy #0
|
|
lda taskWHERE+2 ; compare le X
|
|
cmp (dpSALLE),y
|
|
bcc zone_ko
|
|
ldy #4
|
|
lda (dpSALLE),y
|
|
cmp taskWHERE+2
|
|
bcc zone_ko
|
|
|
|
ldy #2
|
|
lda taskWHERE ; et le Y
|
|
cmp (dpSALLE),y
|
|
bcc zone_ko
|
|
ldy #6
|
|
lda (dpSALLE),y
|
|
cmp taskWHERE
|
|
bcc zone_ko
|
|
|
|
pla
|
|
inc
|
|
sta zone_cliquee
|
|
rts
|
|
|
|
zone_ko
|
|
lda dpSALLE ; pointe sur la prochaine zone
|
|
clc
|
|
adc #14
|
|
sta dpSALLE
|
|
|
|
pla
|
|
inc
|
|
cmp nb_zones ; to nb_zones
|
|
bcc ]lp
|
|
rts
|
|
|
|
nb_zones ds 2
|
|
|
|
*---
|
|
|
|
commentaires
|
|
lda zone_cliquee
|
|
bne comm1
|
|
rts
|
|
|
|
comm1
|
|
ldy #0 ; index du pointeur du commentaire dans la zone
|
|
lda instruction1
|
|
cmp #main
|
|
beq comm2
|
|
ldy #2
|
|
cmp #oeil
|
|
beq comm2
|
|
ldy #4
|
|
cmp #bouche
|
|
beq comm2
|
|
rts
|
|
|
|
comm2
|
|
lda salle
|
|
dec
|
|
asl
|
|
tax
|
|
lda table_salle,x
|
|
clc
|
|
adc #18 ; pointe sur les pointeurs des commentaires de la premiere zone
|
|
sta dpSALLE ; salle1 à salle56
|
|
|
|
lda #0 ; on fait +14 X fois
|
|
ldx zone_cliquee ; X est l'index de la zone cliquée
|
|
]lp dex
|
|
beq comm3
|
|
clc
|
|
adc #14
|
|
bra ]lp
|
|
|
|
comm3
|
|
clc ; on met à jour le pointeur
|
|
adc dpSALLE
|
|
sta dpSALLE
|
|
|
|
lda (dpSALLE),y ; et on retourne le pointeur vers le commentaire main/oeil/bouche
|
|
jmp ecriture
|
|
|
|
*---
|
|
|
|
apparition_objet ; X is object, A is string
|
|
pha
|
|
|
|
lda objet_apparu-1,x
|
|
and #$ff
|
|
bne do99 ; = TRUE, ie <> 0
|
|
|
|
sep #$20
|
|
lda salle
|
|
sta objet-1,x
|
|
lda #TRUE
|
|
sta objet_apparu-1,x
|
|
rep #$20
|
|
|
|
jsr inversion_icone
|
|
bra fin_objet
|
|
|
|
*---
|
|
|
|
disparition_objet ; X is object
|
|
pha
|
|
|
|
lda objet_apparu-1,x
|
|
and #$ff
|
|
beq do99
|
|
|
|
sep #$20
|
|
lda #objet_detruit
|
|
sta objet-1,x
|
|
rep #$20
|
|
|
|
jsr disparition_icone
|
|
|
|
*---
|
|
|
|
fin_objet
|
|
pla
|
|
jmp ecriture
|
|
do99 pla
|
|
rts
|
|
|
|
*---
|
|
|
|
directions
|
|
lda salle
|
|
cmp #38
|
|
bne dire1
|
|
lda instructionDIR ; 1
|
|
cmp #droite
|
|
bne dire1
|
|
|
|
lda #di_str1
|
|
jsr ecriture
|
|
|
|
dire1
|
|
lda salle
|
|
cmp #36
|
|
bne dire2
|
|
lda instructionDIR ; 1
|
|
cmp #nord
|
|
bne dire2
|
|
|
|
lda #di_str2
|
|
jsr ecriture
|
|
|
|
dire2
|
|
lda salle
|
|
cmp #22
|
|
bne dire3
|
|
lda instructionDIR ; 1
|
|
cmp #gauche
|
|
bne dire3
|
|
|
|
lda #di_str3
|
|
jsr ecriture
|
|
|
|
dire3
|
|
lda salle
|
|
cmp #21
|
|
bne dire4
|
|
lda instructionDIR ; 1
|
|
cmp #gauche
|
|
bne dire4
|
|
|
|
lda #di_str4
|
|
jsr ecriture
|
|
|
|
dire4
|
|
lda salle
|
|
cmp #11
|
|
bne dire5
|
|
lda instructionDIR ; 1
|
|
cmp #droite
|
|
bne dire5
|
|
|
|
lda #di_str5
|
|
jsr ecriture
|
|
|
|
dire5
|
|
lda instructionDIR ; 1
|
|
cmp #nord
|
|
bcc dire6
|
|
lda #droite
|
|
cmp instructionDIR ; 1
|
|
bcc dire6
|
|
|
|
lda salle ; salle
|
|
dec ; - 1
|
|
asl ; *2 parce que 16-bits
|
|
tax
|
|
lda table_salle,x ; pointe sur les données de la salle
|
|
inc
|
|
inc
|
|
sta dpSALLE ; pointe sur le tableau des directions
|
|
|
|
lda instructionDIR ; instruction1
|
|
sec
|
|
sbc #nord ; - première direction
|
|
asl ; *2 parce que 16-bits
|
|
tay
|
|
lda (dpSALLE),y ; récupère la prochaine salle
|
|
beq direNOSALLE ; 0 = pas de salle
|
|
sta salle
|
|
direNOSALLE
|
|
stz instructionDIR ; 1
|
|
|
|
dire6
|
|
lda salle
|
|
cmp #25
|
|
bne dire7
|
|
ldx #elephant_enfuis
|
|
lda indicateur-1,x
|
|
and #$ff
|
|
cmp #TRUE
|
|
bne dire7
|
|
|
|
lda #26
|
|
sta salle
|
|
|
|
dire7
|
|
lda salle
|
|
cmp #28
|
|
bne dire8
|
|
ldx #mechant_assome
|
|
lda indicateur-1,x
|
|
and #$ff
|
|
cmp #TRUE
|
|
bne dire8
|
|
|
|
lda #27
|
|
sta salle
|
|
|
|
dire8
|
|
lda salle
|
|
cmp #29
|
|
bne dire9
|
|
ldx #mechant_assome
|
|
lda indicateur-1,x
|
|
and #$ff
|
|
cmp #TRUE
|
|
bne dire9
|
|
|
|
lda #30
|
|
sta salle
|
|
|
|
dire9
|
|
lda salle
|
|
cmp #32
|
|
bne dire10
|
|
ldx #mechant_assome
|
|
lda indicateur-1,x
|
|
and #$ff
|
|
cmp #TRUE
|
|
bne dire10
|
|
|
|
lda #31
|
|
sta salle
|
|
|
|
dire10
|
|
lda salle
|
|
cmp #34
|
|
bne dire11
|
|
ldx #feu_allume
|
|
lda indicateur-1,x
|
|
and #$ff
|
|
cmp #TRUE
|
|
bne dire11
|
|
|
|
lda #35
|
|
sta salle
|
|
|
|
dire11
|
|
lda salle
|
|
cmp #36
|
|
bne dire12
|
|
ldx #photo_montree
|
|
lda indicateur-1,x
|
|
and #$ff
|
|
cmp #FALSE
|
|
bne dire12
|
|
|
|
lda #33
|
|
sta salle
|
|
|
|
dire12
|
|
rts
|
|
|
|
*---
|
|
|
|
di_str1 str 'Mieux vaudrait ne pas suivre le Professeur...'
|
|
di_str2 str 'Il n'27'y a qu'2788' pousser la porte... (auriez-vous peur de quelque chose ?)'
|
|
di_str3 str 'Bill saute facilement du train et attend que celui-ci reparte'
|
|
di_str4 str 'Ce genre de saut ne marche que dans les films...'
|
|
di_str5 str 'Bill s'27'envole pour l'27'Afrique'
|
|
|
|
*---
|
|
|
|
disparition_icone ; X is object
|
|
cpx #0
|
|
beq di1
|
|
txa
|
|
dec
|
|
asl
|
|
asl
|
|
asl ; because we are 16-bit
|
|
tax
|
|
lda icones_coordonnees+2,x
|
|
sta diRECT
|
|
lda icones_coordonnees,x
|
|
sta diRECT+2
|
|
lda icones_coordonnees+6,x
|
|
sta diRECT+4
|
|
lda icones_coordonnees+4,x
|
|
sta diRECT+6
|
|
|
|
_HideCursor
|
|
PushLong #diRECT
|
|
_EraseRect
|
|
_ShowCursor
|
|
di1
|
|
rts
|
|
|
|
diRECT ds 8
|
|
|
|
rts
|
|
|
|
*---
|
|
|
|
affichage_icone ; X is object
|
|
cpx #0
|
|
beq ai1
|
|
txa
|
|
dec
|
|
asl
|
|
asl
|
|
asl ; because we are 16-bit
|
|
tax
|
|
lda icones_coordonnees+2,x
|
|
sta iconToSourceRect
|
|
sta iconToDestPoint
|
|
lda icones_coordonnees,x
|
|
sta iconToSourceRect+2
|
|
sta iconToDestPoint+2
|
|
lda icones_coordonnees+6,x
|
|
sta iconToSourceRect+4
|
|
lda icones_coordonnees+4,x
|
|
sta iconToSourceRect+6
|
|
|
|
_HideCursor
|
|
PushLong #iconParamPtr
|
|
_PaintPixels
|
|
_ShowCursor
|
|
|
|
ai1
|
|
rts
|
|
|
|
*---
|
|
|
|
iconParamPtr
|
|
adrl iconToSourceLocInfo
|
|
adrl iconToDestLocInfo
|
|
adrl iconToSourceRect
|
|
adrl iconToDestPoint
|
|
dw $0000 ; mode copy
|
|
ds 4
|
|
|
|
iconToSourceLocInfo
|
|
dw $0000 ; mode 320
|
|
adrl $8000 ; ptrICON - $8000 on entry, high set after _NewHandle
|
|
dw 160
|
|
dw 0,0,199,319
|
|
|
|
iconToDestLocInfo
|
|
dw $0000 ; mode 320
|
|
adrl $012000
|
|
dw 160
|
|
dw 0,0,199,319
|
|
|
|
iconToSourceRect
|
|
dw 3,0,109,272
|
|
iconToDestPoint
|
|
dw 3,0
|
|
|
|
*---
|
|
|
|
inversion_icone ; X is object
|
|
cpx #0
|
|
beq ii1
|
|
phx
|
|
jsr affichage_icone
|
|
pla
|
|
dec
|
|
asl
|
|
asl
|
|
asl ; because we are 16-bit
|
|
tax
|
|
lda icones_coordonnees+2,x
|
|
sta iiRECT
|
|
lda icones_coordonnees,x
|
|
sta iiRECT+2
|
|
lda icones_coordonnees+6,x
|
|
sta iiRECT+4
|
|
lda icones_coordonnees+4,x
|
|
sta iiRECT+6
|
|
|
|
_HideCursor
|
|
PushLong #iiRECT
|
|
_InvertRect
|
|
_ShowCursor
|
|
|
|
ii1
|
|
rts
|
|
|
|
iiRECT ds 8
|
|
|
|
*---
|
|
|
|
affichage_objets
|
|
ldx #1
|
|
]lp phx
|
|
jsr disparition_icone
|
|
|
|
plx
|
|
phx
|
|
lda objet-1,x
|
|
and #$ff
|
|
cmp salle
|
|
bne ao_1
|
|
jsr inversion_icone
|
|
bra ao_2
|
|
|
|
ao_1
|
|
cmp #objet_pris
|
|
bne ao_2
|
|
jsr affichage_icone
|
|
|
|
ao_2
|
|
plx
|
|
inx
|
|
cpx #nombre_objets ; to 20 - do not want the animation icon
|
|
bcc ]lp
|
|
rts
|
|
|
|
*---
|
|
|
|
ecriture
|
|
sta dpFROM
|
|
|
|
lda (dpFROM) ; get length of string
|
|
and #$ff
|
|
bne ecriture1
|
|
rts
|
|
|
|
ecriture1
|
|
pea #^strVIDE ; get pointer to string
|
|
ldx dpFROM
|
|
inx
|
|
phx
|
|
pha ; push length
|
|
PushLong #myRECT
|
|
PushWord #0 ; left justified
|
|
_LETextBox2
|
|
rts
|
|
|
|
myRECT dw 161
|
|
dw 2
|
|
dw 198
|
|
dw 317
|
|
|
|
*---
|
|
|
|
chargement_image
|
|
lda salle
|
|
cmp ancienne_salle
|
|
bne ci_ok
|
|
rts
|
|
ci_ok
|
|
sta ancienne_salle
|
|
|
|
jsr reset_icones ; etat initial
|
|
jsr affichage_objets ; affiche les objets
|
|
jmp affichage_image ; charge l'image
|
|
* lda #strVIDE ; plus de texte
|
|
* jmp ecriture
|
|
|
|
*---
|
|
|
|
affichage_image
|
|
PushWord salle
|
|
PushLong #tempSTR
|
|
PushWord #2
|
|
PushWord #0
|
|
_Int2Dec
|
|
|
|
lda tempSTR
|
|
ora #'00'
|
|
sta pIMAGE+10
|
|
jmp decompression_image
|
|
|
|
tempSTR ds 4
|
|
|
|
*---
|
|
|
|
decompression_image
|
|
lda #pIMAGE
|
|
ldx ptrUNPACK+2
|
|
ldy ptrUNPACK
|
|
jsr loadFILE
|
|
bcs di_err
|
|
|
|
decompression_image_cheat
|
|
|
|
lda proREAD+12
|
|
jsr unpackLZ4
|
|
|
|
_HideCursor
|
|
PushLong #paintParamPtr
|
|
_PaintPixels
|
|
|
|
PushWord #0
|
|
lda ptrIMAGE+2
|
|
pha
|
|
lda ptrIMAGE
|
|
clc
|
|
adc #$7e00
|
|
pha
|
|
_SetColorTable
|
|
|
|
jsr showCHEAT ; the cheat mode
|
|
|
|
_ShowCursor
|
|
|
|
di_err
|
|
rts
|
|
|
|
paintParamPtr
|
|
adrl ptrToSourceLocInfo
|
|
adrl ptrToDestLocInfo
|
|
adrl ptrToSourceRect
|
|
adrl ptrToDestPoint
|
|
dw $0000 ; mode copy
|
|
ds 4
|
|
|
|
ptrToSourceLocInfo
|
|
dw $0000 ; mode 320
|
|
ds 4 ; ptrIMAGE
|
|
dw 160
|
|
dw 0,0,199,319
|
|
|
|
ptrToDestLocInfo
|
|
dw $0000 ; mode 320
|
|
adrl $012000
|
|
dw 160
|
|
dw 0,0,199,319
|
|
|
|
ptrToSourceRect
|
|
dw 3,0,109,272
|
|
ptrToDestPoint
|
|
dw 3,0
|
|
|
|
*---
|
|
|
|
fin
|
|
jsr ecriture
|
|
jsr debut
|
|
|
|
lda #5
|
|
jmp nowWAIT
|
|
|
|
*---
|
|
|
|
debut
|
|
sep #$20
|
|
|
|
ldx #nombre_objets
|
|
lda #objet_inexistant
|
|
]lp sta objet-1,x
|
|
dex
|
|
bne ]lp
|
|
|
|
ldx #nombre_objets
|
|
lda #FALSE
|
|
]lp sta objet_apparu-1,x
|
|
dex
|
|
bne ]lp
|
|
|
|
ldx #nombre_indicateurs
|
|
]lp sta indicateur-1,x
|
|
dex
|
|
bne ]lp
|
|
|
|
rep #$20
|
|
|
|
lda #4
|
|
sta salle
|
|
stz ancienne_salle
|
|
|
|
*---
|
|
|
|
reset_icones
|
|
|
|
stz instruction1
|
|
stz instruction2
|
|
stz instructionDIR
|
|
stz zone_cliquee
|
|
|
|
stz fgMAIN
|
|
stz fgOEIL
|
|
stz fgBOUCHE
|
|
|
|
ldx #main
|
|
lda #FALSE
|
|
jsr setCTLVALUE
|
|
ldx #oeil
|
|
lda #FALSE
|
|
jsr setCTLVALUE
|
|
ldx #bouche
|
|
lda #FALSE
|
|
jsr setCTLVALUE
|
|
|
|
ldx #main
|
|
jsr invalCTL
|
|
ldx #oeil
|
|
jsr invalCTL
|
|
ldx #bouche
|
|
jmp invalCTL
|
|
|
|
*----------------------------------------
|
|
|
|
*--- Donnees du jeu
|
|
|
|
salle ds 2
|
|
ancienne_salle ds 2
|
|
instruction1 ds 2
|
|
instruction2 ds 2
|
|
instructionDIR ds 2
|
|
zone_cliquee ds 2
|
|
|
|
*----------------------------------- Copyright
|
|
|
|
doCOPYRIGHT
|
|
lda #0
|
|
]lp pha
|
|
asl
|
|
tax
|
|
lda message,x
|
|
jsr ecriture
|
|
|
|
lda #3 ; 150 ms / 50 (GFA) = 3 secondes
|
|
jsr nowWAIT
|
|
|
|
pla
|
|
inc
|
|
cmp #nombre_messages
|
|
bcc ]lp
|
|
rts
|
|
|
|
*----------------------------------- Open
|
|
|
|
doLOAD
|
|
jsr doSOUNDOFF
|
|
jsr saveBACK
|
|
|
|
PushWord #30
|
|
PushWord #43
|
|
PushLong #strLOADFILE
|
|
PushLong #0
|
|
PushLong #typeLIST
|
|
PushLong #replyPTR
|
|
_SFGetFile
|
|
|
|
jsr loadBACK
|
|
jsr doSOUNDON
|
|
|
|
lda replyPTR
|
|
bne doLOAD1
|
|
rts
|
|
|
|
doLOAD1
|
|
jsr copyPATH
|
|
jsr loadALL
|
|
|
|
stz ancienne_salle
|
|
stz instruction1
|
|
stz instruction2
|
|
stz instructionDIR
|
|
|
|
jsr reset_icones
|
|
|
|
lda #strVIDE
|
|
jmp ecriture
|
|
|
|
*----------------------------------- Save
|
|
|
|
doSAVE
|
|
jsr doSOUNDOFF
|
|
jsr saveBACK
|
|
|
|
PushWord #25
|
|
PushWord #36
|
|
PushLong #strSAVEFILE
|
|
PushLong #namePATH
|
|
PushWord #15
|
|
PushLong #replyPTR
|
|
_SFPutFile
|
|
|
|
jsr loadBACK
|
|
jsr doSOUNDON
|
|
|
|
lda replyPTR
|
|
bne doSAVE1
|
|
rts
|
|
|
|
doSAVE1
|
|
jsr copyPATH
|
|
jsr saveALL
|
|
|
|
lda #strVIDE
|
|
jmp ecriture
|
|
|
|
*--- Recopie le filename du fichier de sauvegarde
|
|
|
|
copyPATH
|
|
sep #$20
|
|
ldx #16-1
|
|
]lp lda namePATH1,x
|
|
sta pGAME+4,x
|
|
dex
|
|
bpl ]lp
|
|
|
|
lda namePATH
|
|
inc
|
|
inc
|
|
sta pGAME
|
|
rep #$20
|
|
rts
|
|
|
|
*--- Charge le fichier de sauvegarde en mémoire
|
|
|
|
loadALL
|
|
jsl GSOS
|
|
dw $2010
|
|
adrl proOPENGAME
|
|
bcs loadKO99
|
|
|
|
lda proOPENGAME+2
|
|
sta proREADGAME+2
|
|
sta proCLOSE+2
|
|
|
|
jsr loadPART
|
|
|
|
jsl GSOS
|
|
dw $2014
|
|
adrl proCLOSE
|
|
|
|
loadKO99
|
|
rts
|
|
|
|
*---
|
|
|
|
loadPART
|
|
ldx #nombre_indicateurs
|
|
ldy #indicateur
|
|
jsr loadIT
|
|
|
|
ldx #nombre_objets
|
|
ldy #objet
|
|
jsr loadIT
|
|
|
|
ldx #nombre_objets
|
|
ldy #objet_apparu
|
|
jsr loadIT
|
|
|
|
ldx #1
|
|
ldy #salle
|
|
|
|
loadIT
|
|
stx proREADGAME+8
|
|
sty proREADGAME+4
|
|
jsl GSOS
|
|
dw $2012
|
|
adrl proREADGAME
|
|
rts
|
|
|
|
|
|
*--- Enregistre le fichier de sauvegarde
|
|
|
|
saveALL
|
|
jsl GSOS
|
|
dw $2002
|
|
adrl proDESTROYGAME
|
|
|
|
jsl GSOS
|
|
dw $2001
|
|
adrl proCREATEGAME
|
|
bcs saveKO99
|
|
|
|
jsl GSOS
|
|
dw $2010
|
|
adrl proOPENGAME
|
|
bcs saveKO99
|
|
|
|
lda proOPENGAME+2
|
|
sta proWRITEGAME+2
|
|
sta proCLOSE+2
|
|
|
|
jsr savePART
|
|
|
|
jsl GSOS
|
|
dw $2014
|
|
adrl proCLOSE
|
|
|
|
saveKO99
|
|
rts
|
|
|
|
*---
|
|
|
|
savePART
|
|
ldx #nombre_indicateurs
|
|
ldy #indicateur
|
|
jsr saveIT
|
|
|
|
ldx #nombre_objets
|
|
ldy #objet
|
|
jsr saveIT
|
|
|
|
ldx #nombre_objets
|
|
ldy #objet_apparu
|
|
jsr saveIT
|
|
|
|
ldx #1
|
|
ldy #salle
|
|
|
|
saveIT
|
|
stx proWRITEGAME+8
|
|
sty proWRITEGAME+4
|
|
jsl GSOS
|
|
dw $2013
|
|
adrl proWRITEGAME
|
|
rts
|
|
|
|
*----------------------------------- Restart
|
|
|
|
doRESTART
|
|
jsr saveBACK
|
|
|
|
PushWord #0
|
|
PushWord #5
|
|
PushLong #0
|
|
PushLong #alertRESTART
|
|
_AlertWindow
|
|
|
|
jsr loadBACK
|
|
|
|
pla
|
|
beq re1
|
|
rts
|
|
|
|
re1
|
|
jmp debut
|
|
|
|
*-----------------------------------
|
|
|
|
doCHEAT
|
|
lda fgCHEAT
|
|
eor #1
|
|
sta fgCHEAT
|
|
|
|
jmp decompression_image_cheat
|
|
|
|
*---
|
|
|
|
showCHEAT
|
|
lda fgCHEAT
|
|
bne showCHEAT1
|
|
rts
|
|
|
|
showCHEAT1
|
|
lda salle
|
|
dec
|
|
asl
|
|
tax
|
|
lda table_salle,x
|
|
sta dpSALLE ; salle1 à salle56
|
|
|
|
ldy #0
|
|
lda (dpSALLE),y
|
|
sta nb_zones
|
|
|
|
lda dpSALLE ; pointe sur les coordonnees de la première zone
|
|
clc
|
|
adc #10
|
|
sta dpSALLE
|
|
|
|
lda #0
|
|
]lp pha
|
|
|
|
ldy #0
|
|
lda (dpSALLE),y ; X1
|
|
sta frameRECT+2
|
|
ldy #2
|
|
lda (dpSALLE),y ; Y1
|
|
sta frameRECT
|
|
ldy #4
|
|
lda (dpSALLE),y ; X2
|
|
sta frameRECT+6
|
|
ldy #6
|
|
lda (dpSALLE),y ; Y2
|
|
sta frameRECT+4
|
|
|
|
PushLong #frameRECT
|
|
_FrameRect
|
|
|
|
*---
|
|
|
|
lda dpSALLE ; pointe sur la prochaine zone
|
|
clc
|
|
adc #14
|
|
sta dpSALLE
|
|
|
|
pla
|
|
inc
|
|
cmp nb_zones ; to nb_zones
|
|
bcc ]lp
|
|
rts
|
|
|
|
*---
|
|
|
|
fgCHEAT ds 2
|
|
|
|
frameRECT
|
|
ds 8
|
|
|
|
*----------------------------------- Quit
|
|
|
|
doQUIT
|
|
jsr saveBACK
|
|
|
|
PushWord #0
|
|
PushWord #5
|
|
PushLong #0
|
|
PushLong #alertQUIT
|
|
_AlertWindow
|
|
|
|
jsr loadBACK
|
|
|
|
pla
|
|
beq meQUIT
|
|
rts
|
|
|
|
*----------------------------------- Quit
|
|
|
|
meQUIT
|
|
jsr stopMIDI
|
|
|
|
PushWord #refIsHandle
|
|
PushLong SStopREC
|
|
_ShutDownTools
|
|
|
|
meQUIT1 PushWord myID
|
|
_DisposeAll
|
|
|
|
PushWord myID
|
|
_MMShutDown
|
|
|
|
_TLShutDown
|
|
|
|
jsl GSOS
|
|
dw $2029
|
|
adrl proQUIT
|
|
|
|
brk $bd
|
|
|
|
*----------------------------------------
|
|
* MEMOIRE
|
|
*----------------------------------------
|
|
|
|
make64KB pha
|
|
pha
|
|
PushLong #$010000
|
|
PushWord myID
|
|
PushWord #%11000000_00011100
|
|
PushLong #0
|
|
_NewHandle
|
|
phd
|
|
tsc
|
|
tcd
|
|
lda [3]
|
|
tax ; low in X
|
|
ldy #2
|
|
lda [3],y
|
|
txy ; low in Y
|
|
tax ; high in X
|
|
pld
|
|
pla ; we do not keep track of the handle
|
|
pla
|
|
rts
|
|
|
|
*----------------------------------------
|
|
* GFX
|
|
*----------------------------------------
|
|
|
|
*----------------------------
|
|
* unpackLZ4
|
|
* Unpacks a LZ4 file
|
|
* Uses the two pointers:
|
|
* - ptrUNPACK: packed img (MUST BE AT $0000)
|
|
* - ptrDG: temp unpack zone
|
|
*
|
|
* Entry:
|
|
* A: packed data size
|
|
*
|
|
* Exit:
|
|
* A: unpacked data size
|
|
*
|
|
*----------------------------
|
|
|
|
unpackLZ4
|
|
sta LZ4_Limit+1
|
|
|
|
jsr suspendMUSIC
|
|
sep #$20
|
|
|
|
*--- Source
|
|
|
|
lda ptrUNPACK+2
|
|
sta LZ4_Literal_3+2
|
|
sta LZ4_ReadToken+3
|
|
sta LZ4_Match_1+3
|
|
sta LZ4_GetLength_1+3
|
|
|
|
*--- Destination
|
|
|
|
lda ptrIMAGE+2
|
|
sta LZ4_Literal_3+1
|
|
sta LZ4_Match_5+1
|
|
sta LZ4_Match_5+2
|
|
|
|
rep #$20
|
|
|
|
* REP #$30
|
|
* STY LZ4_Limit+1
|
|
|
|
*--
|
|
|
|
ldy #0 ; Init Target unpacked Data offset
|
|
ldx #16 ; Offset after header
|
|
|
|
LZ4_ReadToken LDAL $AA0000,X ; Read Token Byte
|
|
INX
|
|
STA LZ4_Match_2+1
|
|
|
|
*----------------
|
|
|
|
LZ4_Literal AND #$00F0 ; >>> Process Literal Bytes <<<
|
|
BEQ LZ4_Limit ; No Literal
|
|
CMP #$00F0
|
|
BNE LZ4_Literal_1
|
|
JSR LZ4_GetLengthLit ; Compute Literal Length with next bytes
|
|
BRA LZ4_Literal_2
|
|
LZ4_Literal_1 LSR ; Literal Length use the 4 bit
|
|
LSR
|
|
LSR
|
|
LSR
|
|
|
|
LZ4_Literal_2 DEC ; Copy A+1 Bytes
|
|
LZ4_Literal_3 MVN $AA,$BB ; Copy Literal Bytes from packed data buffer
|
|
PHK ; X and Y are auto incremented
|
|
PLB
|
|
|
|
*----------------
|
|
|
|
LZ4_Limit CPX #$AAAA ; End Of Packed Data buffer ?
|
|
BEQ LZ4_End
|
|
|
|
*----------------
|
|
|
|
LZ4_Match TYA ; >>> Process Match Bytes <<<
|
|
SEC
|
|
LZ4_Match_1 SBCL $AA0000,X ; Match Offset
|
|
INX
|
|
INX
|
|
STA LZ4_Match_4+1
|
|
|
|
LZ4_Match_2 LDA #$0000 ; Current Token Value
|
|
AND #$000F
|
|
CMP #$000F
|
|
BNE LZ4_Match_3
|
|
JSR LZ4_GetLengthMat ; Compute Match Length with next bytes
|
|
LZ4_Match_3 CLC
|
|
ADC #$0003 ; Minimum Match Length is 4 (-1 for the MVN)
|
|
|
|
PHX
|
|
LZ4_Match_4 LDX #$AAAA ; Match Byte Offset
|
|
LZ4_Match_5 MVN $BB,$BB ; Copy Match Bytes from unpacked data buffer
|
|
PHK ; X and Y are auto incremented
|
|
PLB
|
|
PLX
|
|
BRA LZ4_ReadToken
|
|
|
|
*----------------
|
|
|
|
LZ4_GetLengthLit LDA #$000F ; Compute Variable Length (Literal or Match)
|
|
LZ4_GetLengthMat STA LZ4_GetLength_2+1
|
|
LZ4_GetLength_1 LDAL $AA0000,X ; Read Length Byte
|
|
INX
|
|
AND #$00FF
|
|
CMP #$00FF
|
|
BNE LZ4_GetLength_3
|
|
CLC
|
|
LZ4_GetLength_2 ADC #$000F
|
|
STA LZ4_GetLength_2+1
|
|
BRA LZ4_GetLength_1
|
|
LZ4_GetLength_3 ADC LZ4_GetLength_2+1
|
|
RTS
|
|
|
|
*----------------
|
|
|
|
LZ4_End sty lenDATA ; Y = length of unpacked data
|
|
jmp resumeMUSIC
|
|
|
|
*---
|
|
|
|
lenDATA ds 4
|
|
|
|
*-----------------------------------
|
|
* SAVE THE SHR SCREEN
|
|
*-----------------------------------
|
|
|
|
saveBACK
|
|
_HideCursor
|
|
|
|
ldx #$8000-2
|
|
]lp ldal $e12000,x
|
|
saveBACK1
|
|
stal $008000,x
|
|
dex
|
|
dex
|
|
bpl ]lp
|
|
|
|
exitBACK _ShowCursor
|
|
rts
|
|
|
|
*-----------------------------------
|
|
* RESTORE THE SHR SCREEN
|
|
*-----------------------------------
|
|
|
|
loadBACK
|
|
_HideCursor
|
|
|
|
ldx #$8000-2
|
|
loadBACK1
|
|
ldal $008000,x
|
|
stal $012000,x
|
|
stal $e12000,x
|
|
dex
|
|
dex
|
|
bpl loadBACK1
|
|
bmi exitBACK
|
|
|
|
*----------------------------
|
|
* nowWAIT
|
|
* Wait A seconds
|
|
*
|
|
* Entry:
|
|
* A: nb of seconds to wait
|
|
*
|
|
* Exit:
|
|
* A/X: scrambled
|
|
*
|
|
*----------------------------
|
|
|
|
nowWAIT dec
|
|
tax
|
|
lda #0
|
|
]lp clc
|
|
adc #60
|
|
cpx #0
|
|
beq nowWAIT1
|
|
dex
|
|
bra ]lp
|
|
|
|
nowWAIT1 pha
|
|
]lp ldal RDVBLBAR-1
|
|
bpl ]lp
|
|
]lp ldal RDVBLBAR-1
|
|
bmi ]lp
|
|
|
|
pla
|
|
dec
|
|
bne nowWAIT1
|
|
sec
|
|
rts
|
|
|
|
*----------------------------------------
|
|
* DATA
|
|
*----------------------------------------
|
|
|
|
*----------------------- Fenetres
|
|
|
|
wiMAIN ds 4
|
|
|
|
*----------------------- Memory manager
|
|
|
|
myID ds 2
|
|
myDP ds 2
|
|
|
|
SStopREC ds 4
|
|
|
|
ptrIMAGE ds 4 ; where a scene image is loaded
|
|
ptrUNPACK ds 4 ; where the background picture is laoded
|
|
ptrICONS adrl $8000 ; where the icons are stored (ptrBACKGROUND+$8000)
|
|
|
|
fgLOAD ds 2
|
|
fgSAVE ds 2
|
|
|
|
temp ds 2
|
|
|
|
*----------------------- Tool locator
|
|
|
|
verSTR1 str 'System 6.0.1 Required!'
|
|
verSTR2 str 'Press a key to quit'
|
|
tolSTR1 str 'Error while loading tools'
|
|
memSTR1 str 'Cannot allocate memory'
|
|
filSTR1 str 'Cannot load file'
|
|
errSTR1 str 'Quit'
|
|
errSTR2 str ''
|
|
|
|
*----------------------- Window manager
|
|
|
|
taskREC ds 2 ; wmWhat +0
|
|
taskMESSAGE ds 4 ; wmMessage +2
|
|
taskWHEN ds 4 ; wmWhen +6
|
|
taskWHERE ds 4 ; wmWhere +10
|
|
taskMODIFIERS ds 2 ; wmModifiers +14
|
|
taskDATA ds 4 ; wmTaskData +16
|
|
adrl $001fffff ; wmTaskMask +20
|
|
ds 4 ; wmLastClickTick +24
|
|
ds 2 ; wmClickCount +28
|
|
ds 4 ; wmTaskData2 +30
|
|
ds 4 ; wmTaskData3 +34
|
|
ds 4 ; wmTaskData4 +38
|
|
ds 4 ; wmLastClickPt +42
|
|
|
|
taskTBL da doNOT ; Null
|
|
da doNOT ; mouseDownEvt
|
|
da doMOUSEUP ; mouseUpEvt
|
|
da doKEYDOWN ; keyDownEvt
|
|
da doNOT
|
|
da doNOT ; autoKeyEvt
|
|
da doNOT ; updateEvt
|
|
da doNOT
|
|
da doNOT ; activateEvt
|
|
da doNOT ; switchEvt
|
|
da doNOT ; deskAccEvt
|
|
da doNOT ; driverEvt
|
|
da doNOT ; app1Evt
|
|
da doNOT ; app2Evt
|
|
da doNOT ; app3Evt
|
|
da doNOT ; app4Evt
|
|
da doNOT ; wInDesk
|
|
da doNOT ; wInMenuBar
|
|
da doNOT ; wCLickCalled
|
|
da doNOT ; wInContent - was doCONTENT
|
|
da doNOT ; wInDrag
|
|
da doNOT ; wInGrow
|
|
da doNOT ; wInGoAway
|
|
da doNOT ; wInZoom
|
|
da doNOT ; wInInfo
|
|
da doNOT ; wInSpecial
|
|
da doNOT ; wInDeskItem
|
|
da doNOT ; wInFrame
|
|
da doNOT ; wInactMenu
|
|
da doNOT ; wInClosedNDA
|
|
da doNOT ; wInCalledSysEdit
|
|
da doNOT ; wInTrackZoom
|
|
da doNOT ; wInHitFrame
|
|
da doCONTROL ; wInControl
|
|
da doNOT ; wInControlMenu
|
|
|
|
ctrlTBL da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNOT
|
|
da doNORD
|
|
da doSUD
|
|
da doGAUCHE
|
|
da doDROITE
|
|
da doMAIN
|
|
da doOEIL
|
|
da doBOUCHE
|
|
da doCOPYRIGHT
|
|
da doSAVE
|
|
da doLOAD
|
|
|
|
*----------------------------------------
|
|
* STD FILE
|
|
*----------------------------------------
|
|
|
|
*---
|
|
|
|
strLOADFILE str 'Charger quelle partie ?'
|
|
strSAVEFILE str 'Enregistrer sous...'
|
|
|
|
typeLIST hex 01
|
|
hex 5d ; Game/Edu files
|
|
replyPTR ds 2 ; 0 good
|
|
ds 2 ; 2 fileType
|
|
ds 2 ; 4 auxFileType
|
|
namePATH
|
|
hex 06 ; 6 fileName
|
|
namePATH1
|
|
asc 'Partie' ; 7 fileName (16 normally)
|
|
ds 9
|
|
loadPATH
|
|
ds 1 ; 22 fullPathname (string length)
|
|
loadPATH1
|
|
ds 129 ; 23 fullPathname (128 normally)
|
|
|
|
*----------------------------------------
|
|
* GS/OS
|
|
*----------------------------------------
|
|
|
|
loadFILE
|
|
sta proOPEN+4 ; filename
|
|
sty proREAD+4 ; RAM pointer low
|
|
stx proREAD+6 ; RAM pointer high
|
|
|
|
loadFILE1
|
|
stz proERR
|
|
|
|
jsl GSOS
|
|
dw $2010
|
|
adrl proOPEN
|
|
bcs loadERR
|
|
|
|
lda proOPEN+2
|
|
sta proREAD+2
|
|
sta proCLOSE+2
|
|
|
|
lda proEOF
|
|
sta proREAD+8
|
|
lda proEOF+2
|
|
sta proREAD+10
|
|
|
|
jsl GSOS
|
|
dw $2012
|
|
adrl proREAD
|
|
bcs loadERR
|
|
|
|
loadFILE2
|
|
jsl GSOS
|
|
dw $2014
|
|
adrl proCLOSE
|
|
|
|
ldy proREAD+12 ; length read
|
|
ldx proREAD+14
|
|
rts
|
|
|
|
loadERR jsr loadFILE2
|
|
ldy #0
|
|
tyx
|
|
sec
|
|
rts
|
|
|
|
*--- GS/OS data
|
|
|
|
proERR
|
|
ds 2
|
|
|
|
*--- For the game party
|
|
|
|
proCREATEGAME
|
|
dw 7 ; pcount
|
|
adrl pGAME ; pathname
|
|
dw $c3 ; access_code
|
|
dw $5d ; file_type
|
|
adrl $801b ; aux_type
|
|
ds 2 ; storage_type
|
|
ds 4 ; eof
|
|
ds 4 ; resource_eof
|
|
|
|
proDESTROYGAME
|
|
dw 1 ; pcount
|
|
adrl pGAME ; pathname
|
|
|
|
proOPENGAME
|
|
dw 2
|
|
ds 2
|
|
adrl pGAME
|
|
|
|
proREADGAME
|
|
dw 4 ; 0 - pcount
|
|
ds 2 ; 2 - ref_num
|
|
adrl pGAME ; 4 - data_buffer
|
|
ds 4 ; 8 - request_count
|
|
ds 4 ; C - transfer_count
|
|
|
|
proWRITEGAME
|
|
dw 5 ; 0 - pcount
|
|
ds 2 ; 2 - ref_num
|
|
adrl pGAME ; 4 - data_buffer (we are in same bank)
|
|
ds 4 ; 8 - request_count
|
|
ds 4 ; C - transfer_count
|
|
dw 1 ; cache_priority
|
|
|
|
*--- For the game images
|
|
|
|
proOPEN
|
|
dw 12
|
|
ds 2
|
|
adrl pIMAGE
|
|
ds 2
|
|
ds 2
|
|
ds 2
|
|
ds 2
|
|
ds 4
|
|
ds 2
|
|
ds 8
|
|
ds 8
|
|
ds 4
|
|
proEOF ds 4
|
|
|
|
proREAD
|
|
dw 4 ; 0 - nb parms
|
|
ds 2 ; 2 - file id
|
|
ds 4 ; 4 - pointer
|
|
ds 4 ; 8 - length
|
|
ds 4 ; C - length read
|
|
|
|
proCLOSE
|
|
dw 1
|
|
ds 2
|
|
|
|
proQUIT
|
|
dw 2 ; pcount
|
|
ds 4 ; pathname
|
|
ds 2 ; flags
|
|
|
|
proVERS
|
|
dw 1 ; pcount
|
|
ds 2 ; version
|
|
|
|
*--- offset to image number is +10
|
|
|
|
pIMAGE strl '1/data/p00.lz4'
|
|
pICONS strl '1/data/icons.lz4'
|
|
|
|
pGAME strl '0/ '
|
|
|
|
*----------------------------------------
|
|
* LES AUTRES FICHIERS
|
|
*----------------------------------------
|
|
|
|
put datafr.asm
|
|
put roomfr.asm
|
|
put midi.s
|
|
|
|
*---
|