mirror of
https://github.com/antoinevignau/source.git
synced 2024-12-28 19:32:40 +00:00
1723 lines
26 KiB
ArmAsm
1723 lines
26 KiB
ArmAsm
*
|
|
* L'Égérie
|
|
*
|
|
* (c) 1990, François Coulon & Laurent Cotton
|
|
* (c) 2021, Antoine Vignau & Olivier Zardini
|
|
*
|
|
|
|
lst off
|
|
rel
|
|
dsk egerie.l
|
|
|
|
mx %00
|
|
xc
|
|
xc
|
|
|
|
*----------------------------------- Macros
|
|
|
|
use 4/Ctl.Macs
|
|
use 4/Desk.Macs
|
|
use 4/Event.Macs
|
|
use 4/Font.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
|
|
|
|
CHEAT_MODE = 0 ; 1 si on veut le code de cheat
|
|
SALLE_CHEAT = 1
|
|
|
|
*-------------- Softswitches
|
|
|
|
RDVBLBAR = $E0C019
|
|
GSOS = $e100a8
|
|
|
|
*-------------- GUI
|
|
|
|
wMAIN = 1
|
|
alertQUIT = $0100
|
|
alertRESTART = $0200
|
|
|
|
refIsPointer = $0
|
|
refIsHandle = $1
|
|
refIsResource = $2
|
|
|
|
appleKey = $0100
|
|
mouseUpEvt = $0002
|
|
keyDownEvt = $0003
|
|
|
|
*--------------
|
|
|
|
dpFROM = $80
|
|
dpTO = dpFROM+4
|
|
Second = dpTO+4
|
|
dpSTR = Second+4
|
|
dpBUF = dpSTR+4
|
|
dpSALLE = dpBUF+4
|
|
lenFROM = dpSALLE+4
|
|
lenTO = lenFROM+4
|
|
|
|
Debut = lenTO+4
|
|
Arrivee = Debut+4
|
|
|
|
*---
|
|
|
|
TRUE = 1
|
|
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
|
|
|
|
jsr make64KB
|
|
bcs koMEM
|
|
|
|
sty ptrUNPACK
|
|
stx ptrUNPACK+2
|
|
stx ptrICONS+2
|
|
|
|
*--- 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 meQUIT0
|
|
|
|
*--- Et la musique...
|
|
|
|
okTOOL
|
|
* jsr initMIDI
|
|
* jsr randomMIDI ; select a sequence 0-7
|
|
|
|
jsl TWILIGHToff
|
|
|
|
lda myDP
|
|
clc
|
|
adc #$100
|
|
pha
|
|
_SoundStartUp
|
|
|
|
*--- Charge les textes
|
|
|
|
PushWord #0
|
|
PushWord #$1c
|
|
_ReadBParam
|
|
pla
|
|
sta saveBORDER
|
|
|
|
jsr set_texte ; set text language
|
|
jsr load_texte ; exit if error
|
|
jsr init_texte ; set all pointers
|
|
jsr load_dedicaces ; exit if error
|
|
jsr init_dedicaces ; set all pointers
|
|
jsr load_soustitres ; exit if error
|
|
jsr init_soustitres ; set all pointers
|
|
* jsr load_font
|
|
jsr initialisation2
|
|
jsr init_constantes
|
|
|
|
* jsr doSOUNDON ; midi on
|
|
|
|
*--- Affichage desktop
|
|
|
|
_HideMenuBar
|
|
|
|
PushWord #0
|
|
PushWord #%11111111_11111111
|
|
PushWord #0
|
|
_FlushEvents
|
|
pla
|
|
|
|
_InitCursor
|
|
jsr souris_off
|
|
|
|
*----------------------------------------
|
|
* INITIALISATIONS
|
|
*----------------------------------------
|
|
|
|
memOK
|
|
pha
|
|
pha
|
|
PushLong #0
|
|
PushLong #wMAIN
|
|
PushLong #PAINTMAIN
|
|
PushLong #0
|
|
PushWord #refIsResource
|
|
PushLong #wMAIN
|
|
PushWord #$800e
|
|
_NewWindow2
|
|
PullLong wiMAIN
|
|
|
|
*----------------------------------------
|
|
* TITRE
|
|
*----------------------------------------
|
|
|
|
PushWord #0
|
|
PushWord #$1c
|
|
_WriteBParam
|
|
|
|
sep #$20 ; black border
|
|
ldal $e0c034
|
|
and #$f0
|
|
stal $e0c034
|
|
rep #$20
|
|
|
|
stz salle
|
|
jsr changement_salle2 ; to skip the 0 check
|
|
|
|
ldal $c060
|
|
bmi skip_titre
|
|
jsr titre
|
|
skip_titre
|
|
jsr load_font ; font courier pour le jeu
|
|
|
|
jsr initialisation
|
|
|
|
PushWord #15
|
|
PushWord #$1c
|
|
_WriteBParam
|
|
|
|
sep #$20 ; white border
|
|
ldal $e0c034
|
|
and #$f0
|
|
ora #$0f
|
|
stal $e0c034
|
|
rep #$20
|
|
|
|
jsr souris_on
|
|
|
|
*----------------------------------------
|
|
* TASK MASTER
|
|
*----------------------------------------
|
|
|
|
taskLOOP
|
|
PushWord #0
|
|
PushWord #0
|
|
PushWord #$c000
|
|
PushWord #0
|
|
_HandleDiskInsert
|
|
pla
|
|
pla
|
|
|
|
inc VBLCounter0
|
|
|
|
jsr changement_salle
|
|
* jsr changement_texte
|
|
|
|
* jsr checkREPLAY ; midi replay
|
|
|
|
PushWord #0
|
|
PushWord #%11111111_11111111
|
|
PushLong #taskREC
|
|
_TaskMaster
|
|
|
|
*---
|
|
|
|
lda follow
|
|
beq tm_bis
|
|
|
|
pha
|
|
PushWord #7
|
|
_FFGeneratorStatus
|
|
pla
|
|
and #%10000000_00000000
|
|
beq tm_bis
|
|
|
|
stz follow ; le son est fini
|
|
|
|
* lda seqPlay ; midi playing
|
|
* bne tm_bis ; nope
|
|
*
|
|
* _MSResume
|
|
|
|
tm_bis
|
|
|
|
*---
|
|
|
|
pla
|
|
beq taskLOOP
|
|
|
|
asl
|
|
tax
|
|
jsr (taskTBL,x)
|
|
bra taskLOOP
|
|
|
|
*----------------------------------- Gestion du keyDown
|
|
* on gère les open-apple-qqch
|
|
|
|
doKEYDOWN
|
|
lda taskMODIFIERS
|
|
and #appleKey
|
|
cmp #appleKey
|
|
beq doOPENAPPLE
|
|
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
|
|
|
|
*---
|
|
|
|
tblKEYVALUE
|
|
asc 'QqOoSs'
|
|
asc 'Rr'
|
|
* asc 'Zz'
|
|
|
|
DO CHEAT_MODE
|
|
asc 'Cc'
|
|
asc 'Hh'
|
|
asc 'Pp'
|
|
asc 'Nn'
|
|
asc 'Jj'
|
|
asc 'Kk'
|
|
FIN
|
|
hex ff
|
|
|
|
tblKEYADDRESS
|
|
da doQUIT,doQUIT,doLOAD,doLOAD,doSAVE,doSAVE
|
|
da doRESTART,doRESTART
|
|
* da doMUSIK,doMUSIK
|
|
|
|
DO CHEAT_MODE
|
|
da doCHEAT,doCHEAT
|
|
da doFORCE,doFORCE
|
|
da doPREVIOUS,doPREVIOUS
|
|
da doNEXT,doNEXT
|
|
da doSETINDIC,doSETINDIC
|
|
da doZEROINDIC,doZEROINDIC
|
|
|
|
*----------------------------------- Ici, c'est le royaume de la triche !
|
|
|
|
doCHEAT
|
|
lda fgCHEAT
|
|
bne doCHEAT9
|
|
|
|
lda #TRUE
|
|
sta fgCHEAT
|
|
|
|
lda #SALLE_CHEAT
|
|
sta salle_cheat
|
|
sta salle
|
|
|
|
doCHEAT9
|
|
rts
|
|
|
|
fgCHEAT ds 2 ; non zero means cheat is on
|
|
salle_cheat ds 2
|
|
|
|
*---
|
|
|
|
doFORCE
|
|
lda fgCHEAT
|
|
beq doFORCE9
|
|
|
|
lda salle_cheat
|
|
sta salle
|
|
|
|
PushWord salle
|
|
PushLong #strSALLE
|
|
PushWord #3
|
|
PushWord #0
|
|
_Int2Dec
|
|
|
|
PushWord #10
|
|
PushWord #10
|
|
_MoveTo
|
|
|
|
PushLong #strSALLE
|
|
_DrawCString
|
|
|
|
doFORCE9
|
|
rts
|
|
|
|
strSALLE ds 4
|
|
|
|
*---
|
|
|
|
doPREVIOUS
|
|
lda fgCHEAT
|
|
beq doPREVIOUS9
|
|
|
|
lda salle_cheat
|
|
cmp #1
|
|
beq doPREVIOUS9
|
|
|
|
dec
|
|
sta salle_cheat
|
|
sta salle
|
|
|
|
doPREVIOUS9
|
|
rts
|
|
|
|
*---
|
|
|
|
doNEXT
|
|
lda fgCHEAT
|
|
beq doNEXT9
|
|
|
|
lda salle_cheat
|
|
cmp salle_fin2
|
|
beq doNEXT9
|
|
|
|
inc
|
|
sta salle_cheat
|
|
sta salle
|
|
|
|
doNEXT9
|
|
rts
|
|
|
|
*---
|
|
|
|
doSETINDIC
|
|
lda fgCHEAT
|
|
beq doSETINDIC9
|
|
|
|
sep #$20
|
|
ldx #NB_INDICATEURS
|
|
lda #TRUE
|
|
]lp sta indicateur-1,x
|
|
dex
|
|
bne ]lp
|
|
rep #$20
|
|
|
|
doSETINDIC9
|
|
rts
|
|
|
|
*---
|
|
|
|
doZEROINDIC
|
|
lda fgCHEAT
|
|
beq doZEROINDIC9
|
|
|
|
sep #$20
|
|
ldx #NB_INDICATEURS
|
|
lda #FALSE
|
|
]lp sta indicateur-1,x
|
|
dex
|
|
bne ]lp
|
|
rep #$20
|
|
|
|
doZEROINDIC9
|
|
rts
|
|
|
|
FIN
|
|
|
|
*----------------------------------- Gestion du mouseUp
|
|
* on compare les coordonnées avec celles du incontent
|
|
* si dans le même rectangle, on traite
|
|
|
|
doMOUSEUP
|
|
lda salle
|
|
cmp nombre_salle
|
|
bcc doMOUSEUP1
|
|
rts
|
|
doMOUSEUP1
|
|
asl
|
|
tax
|
|
jmp (tblSALLE,x)
|
|
|
|
*----------------------------
|
|
* TWILIGHToff
|
|
* Turns Twilight II off
|
|
*
|
|
* Entry:
|
|
* n/a
|
|
*
|
|
* Exit:
|
|
* n/a
|
|
*
|
|
*----------------------------
|
|
|
|
*Debut = $00
|
|
*Arrivee = Debut+4
|
|
|
|
lenV1 = $49bf
|
|
lenV2 = $539a
|
|
|
|
offV1 = $117a
|
|
offV2 = $154c
|
|
|
|
TWILIGHToff
|
|
phd
|
|
lda myDP
|
|
tcd
|
|
|
|
ldal $e11600
|
|
sta Debut
|
|
ldal $e11602
|
|
sta Debut+2
|
|
|
|
TWILIGHToff1
|
|
ldy #8
|
|
lda [Debut],y
|
|
ldx #offV1
|
|
cmp #lenV1
|
|
beq TWILIGHToff2
|
|
ldx #offV2
|
|
cmp #lenV2
|
|
bne TWILIGHToff3
|
|
|
|
TWILIGHToff2
|
|
stx offTWILIGHT
|
|
|
|
lda [Debut]
|
|
sta Arrivee
|
|
sta ptrTWILIGHT
|
|
ldy #2
|
|
lda [Debut],y
|
|
sta Arrivee+2
|
|
sta ptrTWILIGHT+2
|
|
|
|
txy
|
|
lda [Arrivee],y
|
|
cmp #$0ef0
|
|
bne TWILIGHToff3
|
|
lda #$0e80
|
|
sta [Arrivee],y
|
|
inc fgTWILIGHT
|
|
pld
|
|
rtl
|
|
|
|
TWILIGHToff3
|
|
ldy #16
|
|
lda [Debut],y
|
|
tax
|
|
iny
|
|
iny
|
|
lda [Debut],y
|
|
sta Debut+2
|
|
txa
|
|
sta Debut
|
|
|
|
lda Debut
|
|
ora Debut+2
|
|
bne TWILIGHToff1
|
|
pld
|
|
rtl
|
|
|
|
*----------------------------
|
|
* TWILIGHTon
|
|
* Turns Twilight II on
|
|
*
|
|
* Entry:
|
|
* n/a
|
|
*
|
|
* Exit:
|
|
* n/a
|
|
*
|
|
*----------------------------
|
|
|
|
TWILIGHTon
|
|
lda fgTWILIGHT
|
|
bne TWILIGHTon1
|
|
rtl
|
|
|
|
TWILIGHTon1
|
|
phd
|
|
lda myDP
|
|
tcd
|
|
|
|
lda ptrTWILIGHT
|
|
sta Arrivee
|
|
lda ptrTWILIGHT+2
|
|
sta Arrivee+2
|
|
ldy offTWILIGHT
|
|
lda #$0ef0
|
|
sta [Arrivee],y
|
|
|
|
pld
|
|
rtl
|
|
|
|
*--- Twilight II
|
|
|
|
ptrTWILIGHT ds 4
|
|
fgTWILIGHT ds 2
|
|
offTWILIGHT ds 2
|
|
|
|
*----------------------------------------
|
|
* FENETRES
|
|
*----------------------------------------
|
|
|
|
PAINTMAIN
|
|
PushLong #paintParamPtr
|
|
_PaintPixels
|
|
|
|
PushLong wiMAIN
|
|
_DrawControls
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
jsr font_it ; force Courier
|
|
lda le_texte
|
|
jsr texte2
|
|
|
|
plb
|
|
rtl
|
|
|
|
*----------------------------------------
|
|
* CODE DU JEU
|
|
*----------------------------------------
|
|
|
|
image
|
|
PushWord salle
|
|
PushLong #tempSTR
|
|
PushWord #3
|
|
PushWord #0
|
|
_Int2Dec
|
|
|
|
lda tempSTR
|
|
ora #'00'
|
|
sta pIMAGE+17
|
|
lda tempSTR+1
|
|
ora #'00'
|
|
sta pIMAGE+18
|
|
|
|
*---
|
|
|
|
lda salle
|
|
cmp salle_fin2
|
|
bne image1
|
|
lda #TRUE
|
|
sta fade
|
|
image1
|
|
lda fade
|
|
cmp #TRUE
|
|
bne decompression_image
|
|
|
|
jsr fadeOUT
|
|
|
|
*---
|
|
|
|
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
|
|
|
|
lda fade
|
|
cmp #TRUE
|
|
bne di_1
|
|
|
|
ldx ptrIMAGE+2
|
|
ldy ptrIMAGE
|
|
jsr fadeIN
|
|
|
|
di_1
|
|
PushWord #0
|
|
lda ptrIMAGE+2
|
|
pha
|
|
lda ptrIMAGE
|
|
clc
|
|
adc #$7e00
|
|
pha
|
|
_SetColorTable
|
|
_ShowCursor
|
|
|
|
DO CHEAT_MODE
|
|
jsr doFORCE ; cheat mode to display the room number
|
|
FIN
|
|
|
|
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,200,320
|
|
|
|
ptrToDestLocInfo
|
|
dw $0000 ; mode 320
|
|
adrl $012000
|
|
dw 160
|
|
dw 0,0,200,320
|
|
|
|
ptrToSourceRect
|
|
dw 0,0,200,320
|
|
ptrToDestPoint
|
|
dw 0,0
|
|
|
|
tempSTR ds 4
|
|
|
|
*----------------------------------------
|
|
|
|
*--- Donnees du jeu
|
|
|
|
instruction1 ds 2
|
|
instruction2 ds 2
|
|
zone_cliquee ds 2
|
|
|
|
*----------------------------------- Open
|
|
|
|
doLOAD
|
|
* jsr doSOUNDOFF ; midi off
|
|
jsr saveBACK
|
|
|
|
PushWord #30
|
|
PushWord #43
|
|
PushLong #strLOADFILE
|
|
PushLong #0
|
|
PushLong #typeLIST
|
|
PushLong #replyPTR
|
|
_SFGetFile
|
|
|
|
jsr loadBACK
|
|
* jsr doSOUNDON ; midi on
|
|
|
|
lda replyPTR
|
|
bne doLOAD1
|
|
rts
|
|
|
|
doLOAD1
|
|
jsr copyPATH
|
|
jsr loadALL
|
|
|
|
stz ancienne_salle
|
|
stz instruction1
|
|
stz instruction2
|
|
rts
|
|
|
|
*----------------------------------- Save
|
|
|
|
doSAVE
|
|
* jsr doSOUNDOFF ; midi off
|
|
jsr saveBACK
|
|
|
|
PushWord #25
|
|
PushWord #36
|
|
PushLong #strSAVEFILE
|
|
PushLong #namePATH
|
|
PushWord #15
|
|
PushLong #replyPTR
|
|
_SFPutFile
|
|
|
|
jsr loadBACK
|
|
* jsr doSOUNDON ; midi on
|
|
|
|
lda replyPTR
|
|
bne doSAVE1
|
|
rts
|
|
|
|
doSAVE1
|
|
jsr copyPATH
|
|
jmp saveALL
|
|
|
|
*--- 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 #2
|
|
ldy #salle
|
|
jsr loadIT
|
|
|
|
ldx #3
|
|
ldy #dial
|
|
jsr loadIT
|
|
|
|
* ldx #2
|
|
* ldy #disquette
|
|
* jsr loadIT
|
|
|
|
ldx #2
|
|
ldy #le_texte
|
|
jsr loadIT
|
|
|
|
ldx #2
|
|
ldy #chiffre
|
|
jsr loadIT
|
|
|
|
ldx #2
|
|
ldy #fade
|
|
jsr loadIT
|
|
|
|
ldx #2
|
|
ldy #texte_enfant
|
|
jsr loadIT
|
|
|
|
ldx #2
|
|
ldy #salle_bain
|
|
jsr loadIT
|
|
|
|
ldx #NB_INDICATEURS
|
|
ldy #indicateur
|
|
|
|
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 #2
|
|
ldy #salle
|
|
jsr saveIT
|
|
|
|
ldx #3
|
|
ldy #dial
|
|
jsr saveIT
|
|
|
|
* ldx #2
|
|
* ldy #disquette
|
|
* jsr saveIT
|
|
|
|
ldx #2
|
|
ldy #le_texte
|
|
jsr saveIT
|
|
|
|
ldx #2
|
|
ldy #chiffre
|
|
jsr saveIT
|
|
|
|
ldx #2
|
|
ldy #fade
|
|
jsr saveIT
|
|
|
|
ldx #2
|
|
ldy #texte_enfant
|
|
jsr saveIT
|
|
|
|
ldx #2
|
|
ldy #salle_bain
|
|
jsr saveIT
|
|
|
|
ldx #NB_INDICATEURS
|
|
ldy #indicateur
|
|
|
|
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
|
|
pea $0000
|
|
lda #alertRESTART
|
|
ora saveLANGUAGE
|
|
pha
|
|
_AlertWindow
|
|
|
|
jsr loadBACK
|
|
|
|
pla
|
|
beq re1
|
|
rts
|
|
|
|
re1
|
|
jsr initialisation2
|
|
jmp initialisation
|
|
|
|
*----------------------------------- Quit
|
|
|
|
doQUIT
|
|
jsr saveBACK
|
|
|
|
PushWord #0
|
|
PushWord #5
|
|
PushLong #0
|
|
* PushLong #alertQUIT
|
|
pea $0000
|
|
lda #alertQUIT
|
|
ora saveLANGUAGE
|
|
pha
|
|
_AlertWindow
|
|
|
|
jsr loadBACK
|
|
|
|
pla
|
|
beq meQUIT
|
|
rts
|
|
|
|
*----------------------------------- Quit
|
|
|
|
meQUIT
|
|
* jsr stopMIDI
|
|
jsl TWILIGHTon
|
|
|
|
_SoundShutDown
|
|
|
|
PushWord saveBORDER
|
|
PushWord #$1c
|
|
_WriteBParam
|
|
|
|
sep #$20
|
|
ldal $e0c034
|
|
and #$f0
|
|
ora saveBORDER
|
|
stal $e0c034
|
|
rep #$20
|
|
|
|
meQUIT0
|
|
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 resumeMUSIC ; midi off
|
|
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 ; midi on
|
|
rts
|
|
|
|
*---
|
|
|
|
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
|
|
|
|
*--------------------------------------
|
|
|
|
fadeIMAGE
|
|
ldx ptrIMAGE+2
|
|
ldy ptrIMAGE
|
|
|
|
fadeIN sty Debut
|
|
stx Debut+2
|
|
|
|
ldy #$2000
|
|
sty Arrivee
|
|
ldx #$00e1
|
|
stx Arrivee+2
|
|
|
|
* cmp #0
|
|
* beq fadeIN1
|
|
*
|
|
* ldy #$7dfe
|
|
*]lp lda [Debut],y
|
|
* sta [Arrivee],y
|
|
* dey
|
|
* dey
|
|
* bpl ]lp
|
|
|
|
fadeIN1 lda Debut
|
|
clc
|
|
adc #$7e00
|
|
sta Debut
|
|
lda Debut+2
|
|
adc #0
|
|
sta Debut+2
|
|
|
|
lda Arrivee
|
|
clc
|
|
adc #$7e00
|
|
sta Arrivee
|
|
lda Arrivee+2
|
|
adc #0
|
|
sta Arrivee+2
|
|
|
|
ldx #$000f
|
|
fadeIN2 ldy #$01fe
|
|
fadeIN3 lda [Arrivee],y
|
|
and #$000f
|
|
sta temp
|
|
lda [Debut],y
|
|
and #$000f
|
|
cmp temp
|
|
beq fadeIN4
|
|
lda [Arrivee],y
|
|
clc
|
|
adc #$0001
|
|
sta [Arrivee],y
|
|
fadeIN4 lda [Arrivee],y
|
|
and #$00f0
|
|
sta temp
|
|
lda [Debut],y
|
|
and #$00f0
|
|
cmp temp
|
|
beq fadeIN5
|
|
lda [Arrivee],y
|
|
clc
|
|
adc #$0010
|
|
sta [Arrivee],y
|
|
fadeIN5 lda [Arrivee],y
|
|
and #$0f00
|
|
sta temp
|
|
lda [Debut],y
|
|
and #$0f00
|
|
cmp temp
|
|
beq fadeIN6
|
|
lda [Arrivee],y
|
|
clc
|
|
adc #$0100
|
|
sta [Arrivee],y
|
|
|
|
fadeIN6 dey
|
|
dey
|
|
bpl fadeIN3
|
|
jsr nextVBL
|
|
dex
|
|
bpl fadeIN2
|
|
rts
|
|
|
|
*--------------------------------------
|
|
|
|
fadeOUT lda #$9e00
|
|
sta Debut
|
|
lda #$00e1
|
|
sta Debut+2
|
|
|
|
ldx #$000f
|
|
fadeOUT1 ldy #$01fe
|
|
fadeOUT2 lda [Debut],y
|
|
and #$000f
|
|
beq fadeOUT3
|
|
lda [Debut],y
|
|
sec
|
|
sbc #$0001
|
|
sta [Debut],y
|
|
fadeOUT3 lda [Debut],y
|
|
and #$00f0
|
|
beq fadeOUT4
|
|
lda [Debut],y
|
|
sec
|
|
sbc #$0010
|
|
sta [Debut],y
|
|
fadeOUT4 lda [Debut],y
|
|
and #$0f00
|
|
beq fadeOUT5
|
|
lda [Debut],y
|
|
sec
|
|
sbc #$0100
|
|
sta [Debut],y
|
|
|
|
fadeOUT5 dey
|
|
dey
|
|
bpl fadeOUT2
|
|
jsr nextVBL
|
|
dex
|
|
bpl fadeOUT1
|
|
rts
|
|
|
|
*--------------------------------------
|
|
|
|
nextVBL lda #75
|
|
pha
|
|
]lp ldal $e0c02e
|
|
and #$7f
|
|
cmp 1,s
|
|
blt ]lp
|
|
cmp #100
|
|
bge ]lp
|
|
pla
|
|
waitVBL ldal $e0c018
|
|
bpl waitVBL
|
|
rts
|
|
|
|
*--- Genere un nombre aleatoire
|
|
|
|
Random ldal $e0c02e
|
|
xba
|
|
clc
|
|
adc VBLCounter0
|
|
sta VBLCounter0
|
|
and #$ff
|
|
rts
|
|
|
|
VBLCounter0 ds 2
|
|
|
|
*----------------------------
|
|
* 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)
|
|
|
|
ptrTEXTES ds 4 ; where the very long texts are loaded
|
|
ptrDEDICACES ds 4 ; where the dedicaces texts are loaded
|
|
ptrSOUSTITRES ds 4 ; where the subtitles texts are loaded
|
|
|
|
fgSND ds 2 ; set if sound file not loaded
|
|
haSND ds 4 ; the handle to the sound pointer
|
|
temp ds 2
|
|
|
|
saveBORDER ds 2
|
|
saveLANGUAGE ds 2
|
|
|
|
*----------------------- Tool locator
|
|
|
|
verSTR1 str 'System 6.0.1 Required!'
|
|
verSTR2 str 'Press a key to quit'
|
|
fntSTR1 str 'Courier.09 font missing'
|
|
fntSTR2 str 'Please install it!'
|
|
tolSTR1 str 'Error while loading tools'
|
|
memSTR1 str 'Cannot allocate memory'
|
|
filSTR1 str 'Cannot load file'
|
|
filSTR2 str 'Cannot load text file'
|
|
filSTR3 str 'Cannot load font file'
|
|
errSTR1 str 'Quit'
|
|
errSTR2 str ''
|
|
errSTR3 str 'Continue'
|
|
|
|
*----------------------- 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 doNOT ; wInControl
|
|
da doNOT ; wInControlMenu
|
|
|
|
*----------------------------------------
|
|
* STD FILE
|
|
*----------------------------------------
|
|
|
|
*---
|
|
|
|
strLOADFILE str 'Load which game?'
|
|
strSAVEFILE str 'Save game as...'
|
|
|
|
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 $801d ; 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 +17
|
|
|
|
pIMAGE strl '1/data/images/s000.lz4'
|
|
pSON strl '1/data/sounds/s000.snd'
|
|
pDEDICACES strl '1/data/textes/fr/dedicaces.txt'
|
|
pSOUSTITRES strl '1/data/textes/fr/soustitres.txt'
|
|
pTEXTES strl '1/data/textes/fr/textes.txt'
|
|
|
|
pGAME strl '0/ '
|
|
|
|
*----------------------------------------
|
|
* LES AUTRES FICHIERS
|
|
*----------------------------------------
|
|
|
|
put game.s
|
|
* put midi.s
|
|
|
|
*---
|
|
|
|
asc 0d
|
|
asc "----------------"0d
|
|
asc " "0d
|
|
asc " L'EGERIE "0d
|
|
asc " "0d
|
|
asc " Antoine Vignau "0d
|
|
asc "Olivier Zardini"0d
|
|
asc " "0d
|
|
asc "Jeu de Noel 2021"0d
|
|
asc " "0d
|
|
asc "----------------"0d |