From ba63c9b7c1075573b8f5f0e835663829f4fc24ea Mon Sep 17 00:00:00 2001 From: Antoine Vignau <34219772+antoinevignau@users.noreply.github.com> Date: Sat, 29 Oct 2022 21:29:26 +0200 Subject: [PATCH] Adding Bill Palmer Antoine's source code of Bill Palmer --- .DS_Store | Bin 10244 -> 10244 bytes billpalmer/bill.s | 610 ++++++++++++ billpalmer/datafr.asm | 1606 ++++++++++++++++++++++++++++++ billpalmer/midi.s | 528 ++++++++++ billpalmer/palmer.s | 2191 +++++++++++++++++++++++++++++++++++++++++ billpalmer/roomfr.asm | 1407 ++++++++++++++++++++++++++ 6 files changed, 6342 insertions(+) create mode 100644 billpalmer/bill.s create mode 100644 billpalmer/datafr.asm create mode 100644 billpalmer/midi.s create mode 100644 billpalmer/palmer.s create mode 100644 billpalmer/roomfr.asm diff --git a/.DS_Store b/.DS_Store index b2d33c0cc680b3af6987d78ecf9ebc697c7c8571..814c64503932648bf7522ad48f72220661cdf943 100644 GIT binary patch delta 187 zcmZn(XbG6$&ls{XU^hQw$Yve^O~!gIh9rheh8!R)U`Pa#xeTccMLFq)!O8i#1q=v) zRb6hri%U{YeiBd_N9O@qz1wX^9D!^cYE!VN6~U%>@&zgJ&E|p{e4E)7ez9zh6k%ot E0FNjw!TVU^hQwz-Ar+O~%c41-1AlHmumpuJDUx^GZ=>W&rvn49@@n diff --git a/billpalmer/bill.s b/billpalmer/bill.s new file mode 100644 index 0000000..f0fbdab --- /dev/null +++ b/billpalmer/bill.s @@ -0,0 +1,610 @@ +* +* Bill Palmer +* +* (c) 1987, François Coulon +* (c) 2021, Brutal Deluxe +* + + lst off + rel + dsk bill.l + + mx %00 + xc + xc + +*-------------------------------------- + + use 4/Locator.Macs + use 4/Mem.Macs + use 4/Misc.Macs + use 4/Sound.Macs + use 4/Util.Macs + +*-------------------------------------- + +Debut = $00 +Arrivee = $04 +Second = $08 +Third = $0c + +proDOS = $e100a8 + +*-------------------------------------- + + phk + plb + + _TLStartUp + pha + _MMStartUp + pla + sta myID + _MTStartUp + +*-------------------------------------- + +okINIT1 + PushLong #0 + PushLong #$8fffff + PushWord myID + PushWord #%11000000_00000000 + PushLong #0 + _NewHandle + _DisposeHandle + _CompactMem + +*-------------------------------------- + + PushLong #0 + PushLong #$10000 + PushWord myID + PushWord #%11000000_00011100 + PushLong #0 + _NewHandle + phd + tsc + tcd + lda [3] + sta ptrUNPACK + ldy #2 + lda [3],y + sta ptrUNPACK+2 + pld + pla + pla + bcc okINIT2 + inc fgMEM + +okINIT2 + PushLong #0 + PushLong #$10000 + PushWord myID + PushWord #%11000000_00011100 + PushLong #0 + _NewHandle + phd + tsc + tcd + lda [3] + sta ptrDG + ldy #2 + lda [3],y + sta ptrDG+2 + pld + pla + pla + bcc okINIT3 + inc fgMEM + +okINIT3 + PushLong #0 + PushLong #$40000 + PushWord myID + PushWord #%11000000_00001100 + PushLong #0 + _NewHandle + phd + tsc + tcd + lda [3] + sta ptrMUSIC + ldy #2 + lda [3],y + sta ptrMUSIC+2 + pld + pla + pla + bcc okINIT4 + inc fgSND + +*-------------------------------------- + +okINIT4 + ldx #0 + txa +]lp stal $e12000,x + inx + inx + bpl ]lp + + sep #$20 + lda #$c1 + stal $e0c029 + rep #$20 + +*-------------------------------------- + + lda fgMEM + bne okINIT5 + + lda #pTITLE + ldx ptrUNPACK+2 + ldy ptrUNPACK + jsr loadFILE + bcs okINIT5 + + lda proREAD+12 + jsr unpackLZ4 + + ldx ptrDG+2 + ldy ptrDG + lda #-1 + jsr fadeIN + +*-------------------------------------- + +okINIT5 + lda fgSND + bne koINIT2 + + lda #pSAMPLE + ldx ptrMUSIC+2 + ldy ptrMUSIC + jsr loadFILE + bcc okINIT6 + +koINIT inc fgSND +koINIT2 brl initOFF + +*-------------------------------------- + +okINIT6 + tdc + clc + adc #$100 + pha + _SoundStartUp + bcs okINIT7 + + PushWord #1 + PushLong #pBlockPtr + _FFStartSound + +okINIT7 + lda #15 + jsr nowWAIT + + lda fgSND + bne initOFF + + PushWord #$7fff + _FFStopSound + + _SoundShutDown + +*-------------------------------------- + +initOFF + _MTShutDown + + PushWord myID + _DisposeAll + PushWord myID + _MMShutDown + _TLShutDown + + jsl proDOS + dw $2029 + adrl proQUIT + + brk $bd + +*-------------------------------------- + +nowWAIT dec ; Attend A secondes + tax + lda #0 +]lp clc + adc #60 + cpx #0 + beq nowWAIT1 + dex + bra ]lp +nowWAIT1 pha + jsr waitVBL + jsr clickIT + bcc nowWAIT2 +]lp ldal $e0c018 + bmi ]lp + pla + dec + bne nowWAIT1 + sec + rts +nowWAIT2 pla + clc + rts + +*-------------------------------------- + +clickIT ldal $e0bfff + bpl clickIT1 + sep #$20 + stal $e0c010 + rep #$20 + clc + rts +clickIT1 sec + rts + +*-------------------------------------- + +loadFILE + sta proOPEN+4 + sty proREAD+4 + stx proREAD+6 + + jsl proDOS + dw $2010 + adrl proOPEN + bcs loadERR + + lda proOPEN+2 + sta proGETEOF+2 + sta proREAD+2 + sta proCLOSE+2 + + jsl proDOS + dw $2019 + adrl proGETEOF + bcs loadERR + + lda proGETEOF+4 + sta proREAD+8 + lda proGETEOF+6 + sta proREAD+10 + + jsl proDOS + dw $2012 + adrl proREAD + bcs loadERR + + jsl proDOS + dw $2014 + adrl proCLOSE + rts + +loadERR + php + jsl proDOS + dw $2014 + adrl proCLOSE + plp + brk $bc + 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 + +*-------------------------------------- + +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 + +*---------------------------- +* 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 + + sep #$20 + sei + +*--- 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 ptrDG+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 + tya + cli + rts + +*--- + +lenDATA ds 2 + +*-------------------------------------- +* All the data +*-------------------------------------- + +*--- Prodos + +proQUIT dw 2 + adrl pPALMER + ds 2 + +proOPEN dw 2 + ds 2 + adrl pTITLE + +proGETEOF dw 2 + ds 2 + ds 4 + +proREAD dw 4 ; 0 + ds 2 ; 2 + ds 4 ; 4 dataBuffer + ds 4 ; 8 requestCount + ds 4 ; 12 transferCount + +proCLOSE dw 1 + ds 2 + +*--- Nom des fichiers + +pPALMER strl '1/Palmer' +pTITLE strl '1/Data/Title.lz4' +pSAMPLE strl '1/Data/Sample' + +*--- Flags + +temp dw 1 +fgMEM ds 2 +fgSND ds 2 + +pBlockPtr +ptrMUSIC + ds 4 + dw $35a + dw 312 ; for 16037 Hz + dw $0000 + dw $0000 + ds 4 + dw $ff + +*--- Memoire + +myID ds 2 + +ptrUNPACK ds 4 +ptrDG ds 4 diff --git a/billpalmer/datafr.asm b/billpalmer/datafr.asm new file mode 100644 index 0000000..5c91323 --- /dev/null +++ b/billpalmer/datafr.asm @@ -0,0 +1,1606 @@ +* +* Bill Palmer +* + +nombre_icones = 30 + +* TABLEAUX DE COORDONNEES DES ICONES + +icones_coordonnees + dw 4,117,25,137 + dw 26,117,47,137 + dw 48,117,69,137 + dw 70,117,91,137 + dw 92,117,113,137 + dw 114,117,135,137 + dw 136,117,157,137 + dw 158,117,179,137 + dw 180,117,201,137 + dw 202,117,223,137 + dw 4,138,25,158 + dw 26,138,47,158 + dw 48,138,69,158 + dw 70,138,91,158 + dw 92,138,113,158 + dw 114,138,135,158 + dw 136,138,157,158 + dw 158,138,179,158 + dw 180,138,201,158 + dw 202,138,223,158 + +* ces icônes font 22 x 23 soit 16h x 17h + + dw 230,112,250,134 ; haut E6, 70, FA, 86 - E6 70 FC 87 + dw 254,112,274,134 ; bas FE, 70, 112, 86 - FE 70 114 87 + dw 230,137,250,159 ; gauche E6, 89, FA, 9F - E6 89 FC A0 + dw 254,137,274,159 ; droite FE, 89, 112, 9F - FE 89 114 A0 + +* ces icônes font 40 x 27 soit 28h x 1Bh + + dw 277,74,317,100 ; main - 278, 74, 318, 101 => 4A, 116, 65, 13E + dw 277,103,317,129 ; oeil - 278, 103, 318, 130 => 67, 116, 82, 13E + dw 277,132,317,158 ; bouche - 278, 132, 318, 159 => 84, 116, 9F, 13E + + dw 277,2,317,13 ; about - 2, 116, D, 13E + dw 277,16,317,42 ; save - 10, 116, 2B, 13E + dw 277,45,317,71 ; load - 2E, 116, 49, 13E + +* CHAINES CONTENANT LES BLOCS DES ICONES + +icones ds nombre_icones + +* VARIABLES CONTENANT LES NUMEROS DES ICONES + +photo = 1 +billet_davion = 2 +carte_de_credit = 3 +passeport = 4 +brindilles = 5 +machette = 6 +fetiche = 7 +briquet = 8 +carte_didentite = 9 +laitue = 10 +souris_mecanique = 11 +boite_de_conserve = 12 +ouvre_boite = 13 +livre = 14 +bombe = 15 +journal = 16 +mitraillette = 17 +appeau = 18 +revolver = 19 +* +animation = 20 +* +nord = 21 +sud = 22 +gauche = 23 +droite = 24 +main = 25 +oeil = 26 +bouche = 27 +copyright = 28 +sauvegarde = 29 +chargement = 30 + +* INDICATEURS + +nombre_indicateurs = 17 ; LOGO - was 16 in original source code + +indicateur ds nombre_indicateurs + +train_arrete = 1 +controleur_passe = 2 +livre_donne = 3 +elephant_enfuis = 4 +elephant_arrive = 5 +mechant = 6 +mechant_assome = 7 +bill_desert = 8 +feu_allume = 9 +photo_montree = 10 +camera_mort = 11 +professeur_parti = 12 +canon = 13 +destruction_base = 14 +compte_a_rebours = 15 +lieutenant = 16 +homme_attaque = 17 + +* TABLEAU DE L'ETAT DES OBJETS + +nombre_objets = 20 + +objet ds nombre_objets +objet_apparu ds nombre_objets + +objet_pris = 99 +objet_inexistant = 98 +objet_detruit = 97 + +* DESCRIPTION DES OBJETS + +description_objet + da descr_objet1 + da descr_objet2 + da descr_objet3 + da descr_objet4 + da descr_objet5 + da descr_objet6 + da descr_objet7 + da descr_objet8 + da descr_objet9 + da descr_objet10 + da descr_objet11 + da descr_objet12 + da descr_objet13 + da descr_objet14 + da descr_objet15 + da descr_objet16 + da descr_objet17 + da descr_objet18 + da descr_objet19 + da descr_objet20 + +descr_objet1 str 'Une photo du Professeur X. !' +descr_objet2 str 'Un billet d'27'avion pour le N'27'Gwanal'8e'l'8e +descr_objet3 str 'Une carte de cr'8e'dit. Il doit bien rester un peu d'27'argent sur le compte' +descr_objet4 str 'Le passeport. Ins'8e'parable compagnon de l'27'Aventurier' +descr_objet5 str 'Des brindilles. Ca doit pouvoir br'9e'ler facilement' +descr_objet6 str 'Une machette (du calme !)' +descr_objet7 str 'Le fameux f'8e'tiche tant convoit'8e' ! !' +descr_objet8 str 'Click click, un briquet' +descr_objet9 str 'La carte d'27'identit'8e' de Bill, quand il prend le m'8e'tro.' +descr_objet10 str 'Une vieille salade. Inavalable pour un '90'tre un civilis'8e'...' +descr_objet11 str 'Une souris m'8e'canique. Elle s'27'agite quelques secondes apr'8f's avoir '8e't'8e' remont'8e'e' +descr_objet12 str 'Une bo'94'te de pa'91'lla. Pas le moment de manger...' +descr_objet13 str 'Un ouvre-bo'94'te' +descr_objet14 str 'Le Guide du Parfait Aventurier. Bill n'27'en a plus besoin depuis longtemps !' +descr_objet15 str 'La bombe semble '90'tre d'8e'sarmorc'8e'e' +descr_objet16 str 'La Gazette des Aventuriers. Un pigiste r'8e'v'8f'le qu'27'un f'8e'tiche a '8e't'8e' d'8e'rob'8e' au N'27'Gwanal'8e'l'8e' par le Professeur X., ce savant de triste renomm'8e'e' +descr_objet17 str 'Gardons notre calme : cette mitraillette est charg'8e'e...' +descr_objet18 str 'Un appeau. Il '8e'met un bruit bizarre quand on souffle dedans' +descr_objet19 str 'Ce pistolet doit '90'tre utilis'8e' uniquement pour la bonne cause !' +descr_objet20 str '' + +* COORDONNEES DES ZONES, COMMENTAIRES ET DIRECTIONS + +nombre_salles = 56 +nombre_zones = 10 + +* ATARI ST +* zones (nombre de zones cliquables dans la salle) +* x1(nombre_salles, nombre_zones) +* x2(nombre_salles, nombre_zones) +* y1(nombre_salles, nombre_zones) +* y2(nombre_salles, nombre_zones) +* commentaire_main(nombre_salles, nombre_zones) +* commentaire_oeil(nombre_salles, nombre_zones) +* commentaire_bouche(nombre_salles, nombre_zones) +* directions(nombre_salles, 4) +* +* APPLE IIGS +* 1 word for number of zones +* 4 word for directions +* For each zone +* 4 word for zone area +* 1 ptr to commentaire main +* 1 ptr to commentaire oeil +* 1 ptr to commentaire bouche + +table_salle + da salle1,salle2,salle3,salle4,salle5,salle6,salle7,salle8,salle9,salle10 + da salle11,salle12,salle13,salle14,salle15,salle16,salle17,salle18,salle19,salle20 + da salle21,salle22,salle23,salle24,salle25,salle26,salle27,salle28,salle29,salle30 + da salle31,salle32,salle33,salle34,salle35,salle36,salle37,salle38,salle39,salle40 + da salle41,salle42,salle43,salle44,salle45,salle46,salle47,salle48,salle49,salle50 + da salle51,salle52,salle53,salle54,salle55,salle56 + +salle1 + dw 7 ; +00 + dw 2,4,0,0 ; +02 + dw 123,84,138,106 ; +10 - chaque zone fait 14 octets + da salle1_zone1_main ; +18 + da salle1_zone1_oeil ; +20 + da salle1_zone1_bouche ; +22 + dw 54,71,68,84 ; +24 + da salle1_zone2_main + da salle1_zone2_oeil + da salle1_zone2_bouche + dw 79,68,117,108 + da salle1_zone3_main + da salle1_zone3_oeil + da salle1_zone3_bouche + dw 19,43,54,98 + da salle1_zone4_main + da salle1_zone4_oeil + da salle1_zone4_bouche + dw 77,23,150,57 + da salle1_zone5_main + da salle1_zone5_oeil + da salle1_zone5_bouche + dw 158,37,247,108 + da salle1_zone6_main + da salle1_zone6_oeil + da salle1_zone6_bouche + dw 27,54,42,59 + da salle1_zone7_main + da salle1_zone7_oeil + da salle1_zone7_bouche +salle1_zone1_main str '' +salle1_zone1_oeil str 'Une vieille caisse d'27'emballage' +salle1_zone1_bouche str '' +salle1_zone2_main str '' +salle1_zone2_oeil str 'La bo'94'te aux lettres' +salle1_zone2_bouche str '' +salle1_zone3_main str 'D'8e'go'9e'tant...' +salle1_zone3_oeil str 'Un clochard' +salle1_zone3_bouche str d2'Un peu de politesse! J'27'ai '8e't'8e' d'8e'veloppeur de jeux d'27'aventures, moi Monsieur !'d3 +salle1_zone4_main str '' +salle1_zone4_oeil str 'Et si Bill regardait par la fen'90'tre ?' +salle1_zone4_bouche str '' +salle1_zone5_main str 'Et si vous entriez par la porte ?' +salle1_zone5_oeil str 'C'27'est bien l'27'int'8e'rieur de Bill' +salle1_zone5_bouche str '' +salle1_zone6_main str 'Pas touche !' +salle1_zone6_oeil str 'C'27'est Bill Palmer, h'8e'ros des h'8e'ros en route vers une nouvelle aventure' +salle1_zone6_bouche str '' +salle1_zone7_main str 'Bill ne va tout de m'90'me pas arracher la plaque !' +salle1_zone7_oeil str d2'Bill Palmer. Aventurier. Sur rendez-vous.'d3 +salle1_zone7_bouche str '' + +salle2 + dw 7 + dw 3,1,0,0 + dw 77,26,98,51 + da salle2_zone1_main + da salle2_zone1_oeil + da salle2_zone1_bouche + dw 82,53,89,61 + da salle2_zone2_main + da salle2_zone2_oeil + da salle2_zone2_bouche + dw 2,20,55,47 + da salle2_zone3_main + da salle2_zone3_oeil + da salle2_zone3_bouche + dw 22,60,84,85 + da salle2_zone4_main + da salle2_zone4_oeil + da salle2_zone4_bouche + dw 187,49,203,72 + da salle2_zone5_main + da salle2_zone5_oeil + da salle2_zone5_bouche + dw 71,8,97,23 + da salle2_zone6_main + da salle2_zone6_oeil + da salle2_zone6_bouche + dw 172,44,179,50 + da salle2_zone7_main + da salle2_zone7_oeil + da salle2_zone7_bouche +salle2_zone1_main str 'Bill arbore d'8e'j'88' son cuir' +salle2_zone1_oeil str '' +salle2_zone1_bouche str '' +salle2_zone2_main str '' +salle2_zone2_oeil str 'La poche' +salle2_zone2_bouche str '' +salle2_zone3_main str '' +salle2_zone3_oeil str 'Une '8e'tag'8f're pleine de vieux bouquins et de magazines d'27'informatique' +salle2_zone3_bouche str '' +salle2_zone4_main str 'Un peu ramoli' +salle2_zone4_oeil str 'Le canap'8e +salle2_zone4_bouche str '' +salle2_zone5_main str 'Attention, c'27'est fragile !' +salle2_zone5_oeil str 'Une vieux vase Ming sans aucune valeur' +salle2_zone5_bouche str '' +salle2_zone6_main str 'Le trou est d'8e'j'88' assez grand' +salle2_zone6_oeil str 'H'8e' Bill ! Faudrait voir '88' refaire les platres !' +salle2_zone6_bouche str '' +salle2_zone7_main str 'Zut ! Le store est coinc'8e'. Faudra trouver une autre combine pour regarder la voisine se d'8e'shabiller' +salle2_zone7_oeil str 'La tirette du store' +salle2_zone7_bouche str '' + +salle3 + dw 3 + dw 2,2,2,2 + dw 138,68,153,81 + da salle3_zone1_main + da salle3_zone1_oeil + da salle3_zone1_bouche + dw 86,91,104,103 + da salle3_zone2_main + da salle3_zone2_oeil + da salle3_zone2_bouche + dw 205,0,227,21 + da salle3_zone3_main + da salle3_zone3_oeil + da salle3_zone3_bouche +salle3_zone1_main str '' +salle3_zone1_oeil str 'Le cadenas. Pr'8e'sentement ouvert' +salle3_zone1_bouche str '' +salle3_zone2_main str '' +salle3_zone2_oeil str '' +salle3_zone2_bouche str '' +salle3_zone3_main str 'Pas encore l'27'heure de tirer les rideaux' +salle3_zone3_oeil str 'Pas tr'8f's propre. Faudrait voir '88' laver tout '8d'a Bill !' +salle3_zone3_bouche str '' + +salle4 + dw 3 + dw 6,1,0,0 + dw 201,39,270,97 ; LOGO - original code is 101, + da salle4_zone1_main + da salle4_zone1_oeil + da salle4_zone1_bouche + dw 2,53,157,109 + da salle4_zone2_main + da salle4_zone2_oeil + da salle4_zone2_bouche + dw 177,58,187,67 + da salle4_zone3_main + da salle4_zone3_oeil + da salle4_zone3_bouche +salle4_zone1_main str '' +salle4_zone1_oeil str 'Ce fut une belle voiture...' +salle4_zone1_bouche str 'Vous parlez le langage voiture ?' +salle4_zone2_main str 'Ca laisserait des traces de doigts !' +salle4_zone2_oeil str 'Non, non. Pas celle l'88'. L'27'autre ! !' +salle4_zone2_bouche str 'On en mangerait...' +salle4_zone3_main str '' +salle4_zone3_oeil str 'Le capot s'27'ouvre par l'88 +salle4_zone3_bouche str '' + +salle5 + dw 2 + dw 4,4,4,4 + dw 144,53,188,73 + da salle5_zone1_main + da salle5_zone1_oeil + da salle5_zone1_bouche + dw 44,80,118,107 + da salle5_zone2_main + da salle5_zone2_oeil + da salle5_zone2_bouche +salle5_zone1_main str 'La r'8e'parer ? Pour quoi faire...' +salle5_zone1_oeil str '' +salle5_zone1_bouche str '' +salle5_zone2_main str '' +salle5_zone2_oeil str 'Juste pour quelques pi'8f'ces en trop' +salle5_zone2_bouche str '' + +salle6 + dw 4 + dw 4,4,4,4 + dw 222,49,233,62 + da salle6_zone1_main + da salle6_zone1_oeil + da salle6_zone1_bouche + dw 209,51,217,61 + da salle6_zone2_main + da salle6_zone2_oeil + da salle6_zone2_bouche + dw 234,56,265,74 + da salle6_zone3_main + da salle6_zone3_oeil + da salle6_zone3_bouche + dw 188,64,201,76 + da salle6_zone4_main + da salle6_zone4_oeil + da salle6_zone4_bouche +salle6_zone1_main str '' +salle6_zone1_oeil str 'La cl'8e' de contact' +salle6_zone1_bouche str '' +salle6_zone2_main str '' +salle6_zone2_oeil str 'L'27'altim'8f'tre' +salle6_zone2_bouche str '' +salle6_zone3_main str '' +salle6_zone3_oeil str 'La bo'94'te '88' gants' +salle6_zone3_bouche str '' +salle6_zone4_main str 'Ca va, c'27'est au point mort' +salle6_zone4_oeil str 'Le levier de vitesse' +salle6_zone4_bouche str '' + +salle7 + dw 3 + dw 9,0,0,4 + dw 2,72,77,96 + da salle7_zone1_main + da salle7_zone1_oeil + da salle7_zone1_bouche + dw 95,23,134,36 + da salle7_zone2_main + da salle7_zone2_oeil + da salle7_zone2_bouche + dw 177,44,271,109 + da salle7_zone3_main + da salle7_zone3_oeil + da salle7_zone3_bouche +salle7_zone1_main str 'Ca ne se prend pas comme '8d'a..' +salle7_zone1_oeil str 'Vite, il part pour le N'27'Gwanal'8e'l'8e'!' +salle7_zone1_bouche str '' +salle7_zone2_main str 'Faudrait prendre beaucoup d'27''8e'lan' +salle7_zone2_oeil str 'Trop tard pour celui l'88'' +salle7_zone2_bouche str '' +salle7_zone3_main str '' +salle7_zone3_oeil str 'Elle s'27'arrange pas avec l'2789'ge' +salle7_zone3_bouche str '' + +salle8 + dw 1 + dw 0,0,0,0 + dw 0,0,0,0 + da salle8_zone1_main + da salle8_zone1_oeil + da salle8_zone1_bouche +salle8_zone1_main str '' +salle8_zone1_oeil str '' +salle8_zone1_bouche str '' + +salle9 + dw 4 + dw 0,7,0,0 + dw 19,15,70,61 + da salle9_zone1_main + da salle9_zone1_oeil + da salle9_zone1_bouche + dw 143,14,192,60 + da salle9_zone2_main + da salle9_zone2_oeil + da salle9_zone2_bouche + dw 184,50,210,61 + da salle9_zone3_main + da salle9_zone3_oeil + da salle9_zone3_bouche + dw 194,16,226,23 + da salle9_zone4_main + da salle9_zone4_oeil + da salle9_zone4_bouche +salle9_zone1_main str 'Voyons, un peu de discr'8e'tion ! !' +salle9_zone1_oeil str 'Glup ! !' +salle9_zone1_bouche str 'Schmack !' +salle9_zone2_main str 'Gardez plut'99't la main sur la souris' +salle9_zone2_oeil str 'Bill devrait d'27'abord penser '88' sa mission...' +salle9_zone2_bouche str d2'Nous avons des promotions sp'8e'ciales pour les billets vers l'27'Afrique du Sud !'d3 +salle9_zone3_main str 'Vous g'90'nez pas surtout...' +salle9_zone3_oeil str 'Un t'8e'l'8e'phone' +salle9_zone3_bouche str '' +salle9_zone4_main str '' +salle9_zone4_oeil str 'Les cartes de cr'8e'dit sont accept'8e'es' +salle9_zone4_bouche str '' + +salle10 + dw 5 + dw 0,0,0,9 + dw 192,28,224,98 + da salle10_zone1_main + da salle10_zone1_oeil + da salle10_zone1_bouche + dw 121,60,153,108 + da salle10_zone2_main + da salle10_zone2_oeil + da salle10_zone2_bouche + dw 24,21,74,100 + da salle10_zone3_main + da salle10_zone3_oeil + da salle10_zone3_bouche + dw 239,10,267,106 + da salle10_zone4_main + da salle10_zone4_oeil + da salle10_zone4_bouche + dw 4,16,24,50 + da salle10_zone5_main + da salle10_zone5_oeil + da salle10_zone5_bouche +salle10_zone1_main str d2'C'27'est bien gentil de m'27'aider mon brave Monsieur !'d3 +salle10_zone1_oeil str 'Dommage qu'27'il soit blanc. On aurait cru Stevie Wonder' +salle10_zone1_bouche str d2'Pardon, c'27'est bien ici le match de football ?'d3 +salle10_zone2_main str 'Voyons ! ! ! A son '89'ge ! !' +salle10_zone2_oeil str 'Si vous regardez d'8e'j'88' les petites filles...' +salle10_zone2_bouche str d2'Tu veux ma photo ?'d3 +salle10_zone3_main str '' +salle10_zone3_oeil str 'Attention, c'27'est le douanier !' +salle10_zone3_bouche str 'Pr'8e'sentez votre passeport s'27'il vous plait !' +salle10_zone4_main str '' +salle10_zone4_oeil str 'Ca doit '90'tre un diplomate qui rentre au pays' +salle10_zone4_bouche str d2'Encow'27' un qui se pwend pou'27' Ha'27'isson Fowd...'d3 +salle10_zone5_main str 'Stop !' +salle10_zone5_oeil str d2'Stop'd3 +salle10_zone5_bouche str 'Re-stop' + +salle11 + dw 4 + dw 0,0,10,12 + dw 39,76,107,91 + da salle11_zone1_main + da salle11_zone1_oeil + da salle11_zone1_bouche + dw 47,55,82,91 + da salle11_zone2_main + da salle11_zone2_oeil + da salle11_zone2_bouche + dw 129,17,191,87 + da salle11_zone3_main + da salle11_zone3_oeil + da salle11_zone3_bouche + dw 190,8,262,63 + da salle11_zone4_main + da salle11_zone4_oeil + da salle11_zone4_bouche +salle11_zone1_main str 'Bill a d'8e'j'88' son billet' +salle11_zone1_oeil str 'C'27'est un billet d'27'avion pour Auckland. Un aller simple, '8d'a suffit' +salle11_zone1_bouche str '' +salle11_zone2_main str '' +salle11_zone2_oeil str 'C'27'est '8d'a le pilote ? ! ? !' +salle11_zone2_bouche str d2'Et dire qu'27'il n'27'y a qu'27'un parachute pour tout l'27'avion...'d3 +salle11_zone3_main str 'Pour le pousser ? ?' +salle11_zone3_oeil str 'Et si Bill en faisait autant avant de rencontrer le pire ?' +salle11_zone3_bouche str d2'Argh ! !'d3 +salle11_zone4_main str 'Z'27'avez pas peur...' +salle11_zone4_oeil str d2'Poids total hors charge: 213 Kg'd3 +salle11_zone4_bouche str d2'Tu vas pas te tirer pour notre lune de miel ! ?'d3 + +salle12 + dw 4 + dw 0,13,0,0 + dw 6,79,35,91 + da salle12_zone1_main + da salle12_zone1_oeil + da salle12_zone1_bouche + dw 43,64,54,79 + da salle12_zone2_main + da salle12_zone2_oeil + da salle12_zone2_bouche + dw 41,82,61,98 + da salle12_zone3_main + da salle12_zone3_oeil + da salle12_zone3_bouche + dw 71,14,104,49 + da salle12_zone4_main + da salle12_zone4_oeil + da salle12_zone4_bouche +salle12_zone1_main str '' +salle12_zone1_oeil str 'La Mecque' +salle12_zone1_bouche str '' +salle12_zone2_main str '' +salle12_zone2_oeil str 'Alaska 13583 km' +salle12_zone2_bouche str '' +salle12_zone3_main str '' +salle12_zone3_oeil str 'Maubeuge (centre ville) : premi'8f're '88' gauche' +salle12_zone3_bouche str '' +salle12_zone4_main str 'Attention '8d'a coupe ! !' +salle12_zone4_oeil str 'Une h'8e'lice' +salle12_zone4_bouche str '' + +salle13 + dw 3 + dw 15,12,12,14 + dw 150,12,173,24 + da salle13_zone1_main + da salle13_zone1_oeil + da salle13_zone1_bouche + dw 178,25,206,37 + da salle13_zone2_main + da salle13_zone2_oeil + da salle13_zone2_bouche + dw 28,91,89,101 + da salle13_zone3_main + da salle13_zone3_oeil + da salle13_zone3_bouche +salle13_zone1_main str '' +salle13_zone1_oeil str d2'Concessionnaire Dromacar'd3 +salle13_zone1_bouche str '' +salle13_zone2_main str '' +salle13_zone2_oeil str d2'Walk this way! ! ! !'d3 +salle13_zone2_bouche str '' +salle13_zone3_main str '' +salle13_zone3_oeil str 'Tiens ! Il semble y avoir quelque chose sous ces pierres !' +salle13_zone3_bouche str '' + +salle14 + dw 3 + dw 0,13,0,0 + dw 195,22,225,60 + da salle14_zone1_main + da salle14_zone1_oeil + da salle14_zone1_bouche + dw 231,33,245,59 + da salle14_zone2_main + da salle14_zone2_oeil + da salle14_zone2_bouche + dw 2,60,60,106 + da salle14_zone3_main + da salle14_zone3_oeil + da salle14_zone3_bouche +salle14_zone1_main str '' +salle14_zone1_oeil str 'C'27'est le conservateur du mus'8e'e' +salle14_zone1_bouche str d2'Si vous nous rapportez le F'8e'tiche vol'8e', vous aurez droit '88' une forte r'8e'compense, pr'8e'sentement!'d3 +salle14_zone2_main str 'Ca serait bien trop facile si c'27''8e'tait celui-l'88' qu'27'il fallait retrouver !' +salle14_zone2_oeil str 'Un f'8e'tiche' +salle14_zone2_bouche str '' +salle14_zone3_main str '' +salle14_zone3_oeil str 'C'27''8e'tait '8d'a ou finir en aliment pour chats' +salle14_zone3_bouche str 'De toutes les fa'8d'ons, ce n'27'est pas maintenant qu'27'il va se mettre '88' parler' + +salle15 + dw 3 + dw 16,13,0,0 + dw 69,62,121,108 + da salle15_zone1_main + da salle15_zone1_oeil + da salle15_zone1_bouche + dw 2,14,68,56 + da salle15_zone2_main + da salle15_zone2_oeil + da salle15_zone2_bouche + dw 103,11,194,57 + da salle15_zone3_main + da salle15_zone3_oeil + da salle15_zone3_bouche +salle15_zone1_main str '' +salle15_zone1_oeil str 'Un vendeur de dromadaires' +salle15_zone1_bouche str d2'J'27'y traite qu'27'avec li vrais aventuriers moi !'d3 +salle15_zone2_main str 'Vous esp'8e'riez qu'27'il allait ronronner ?' +salle15_zone2_oeil str 'Un cham... Non un dromadaire' +salle15_zone2_bouche str 'Les dromadaires ne parlent pas, m'90'me dans les jeux d'27'aventure' +salle15_zone3_main str 'Brave b'90'te..' +salle15_zone3_oeil str 'Il doit '90'tre mal nourri...' +salle15_zone3_bouche str '' + +salle16 + dw 1 + dw 0,0,0,0 + dw 0,0,0,0 + da salle16_zone1_main + da salle16_zone1_oeil + da salle16_zone1_bouche +salle16_zone1_main str '' +salle16_zone1_oeil str '' +salle16_zone1_bouche str '' + +salle17 + dw 1 + dw 0,0,18,0 + dw 0,0,0,0 + da salle17_zone1_main + da salle17_zone1_oeil + da salle17_zone1_bouche +salle17_zone1_main str '' +salle17_zone1_oeil str '' +salle17_zone1_bouche str '' + +salle18 + dw 4 + dw 20,0,0,19 + dw 4,52,39,77 + da salle18_zone1_main + da salle18_zone1_oeil + da salle18_zone1_bouche + dw 36,32,117,86 + da salle18_zone2_main + da salle18_zone2_oeil + da salle18_zone2_bouche + dw 117,36,226,97 + da salle18_zone3_main + da salle18_zone3_oeil + da salle18_zone3_bouche + dw 235,36,264,97 + da salle18_zone4_main + da salle18_zone4_oeil + da salle18_zone4_bouche +salle18_zone1_main str '' +salle18_zone1_oeil str 'Ca doit '90'tre le wagon quatri'8f'me classe' +salle18_zone1_bouche str '' +salle18_zone2_main str '' +salle18_zone2_oeil str 'Le wagon classe aventuriers' +salle18_zone2_bouche str '' +salle18_zone3_main str '' +salle18_zone3_oeil str 'La locomotive mod'8f'le 1865 reform'8e' 1917 n'27'attend plus que Bill pour partir' +salle18_zone3_bouche str '' +salle18_zone4_main str '' +salle18_zone4_oeil str 'Un auto-stoppeur sans doute' +salle18_zone4_bouche str d2'Tchou tchou ! ! T'27'wain va pa'27'tiw'27d3 + +salle19 + dw 2 + dw 0,0,18,0 + dw 171,24,270,77 + da salle19_zone1_main + da salle19_zone1_oeil + da salle19_zone1_bouche + dw 181,89,235,107 + da salle19_zone2_main + da salle19_zone2_oeil + da salle19_zone2_bouche +salle19_zone1_main str 'Doucement, '8d'a pourrait le r'8e'veiller !' +salle19_zone1_oeil str 'Il vend des billets. Mais la pause a l'27'air longue...' +salle19_zone1_bouche str d2'Plus tard coco, plus tard...'d3 +salle19_zone2_main str 'Pouah ! Des os humains...' +salle19_zone2_oeil str 'Certains mangent bien du lapin' +salle19_zone2_bouche str '' + +salle20 + dw 5 + dw 0,0,0,0 + dw 169,15,219,108 + da salle20_zone1_main + da salle20_zone1_oeil + da salle20_zone1_bouche + dw 225,10,271,107 + da salle20_zone2_main + da salle20_zone2_oeil + da salle20_zone2_bouche + dw 199,2,209,8 + da salle20_zone3_main + da salle20_zone3_oeil + da salle20_zone3_bouche + dw 91,16,104,26 + da salle20_zone4_main + da salle20_zone4_oeil + da salle20_zone4_bouche + dw 12,15,82,68 + da salle20_zone5_main + da salle20_zone5_oeil + da salle20_zone5_bouche +salle20_zone1_main str '' +salle20_zone1_oeil str 'Mille sabords ! Serions-nous au Congo ?' +salle20_zone1_bouche str d2'Saperlipopette !'d3 +salle20_zone2_main str '' +salle20_zone2_oeil str 'Et alors ? La premi'8f're classe est aussi autoris'8e'e aux Noirs...' +salle20_zone2_bouche str '' +salle20_zone3_main str '' +salle20_zone3_oeil str d2'Eat at Joe'27's. Au menu: missionnaire, homme d'27'affaire, pigiste. Ketchup en suppl'8e'ment'd3 +salle20_zone3_bouche str '' +salle20_zone4_main str '' +salle20_zone4_oeil str 'Le signal d'27'alarme' +salle20_zone4_bouche str '' +salle20_zone5_main str '' +salle20_zone5_oeil str '' +salle20_zone5_bouche str '' + +salle21 + dw 1 + dw 0,0,0,20 + dw 0,0,0,0 + da salle21_zone1_main + da salle21_zone1_oeil + da salle21_zone1_bouche +salle21_zone1_main str '' +salle21_zone1_oeil str '' +salle21_zone1_bouche str '' + +salle22 + dw 1 + dw 0,23,23,20 + dw 0,0,0,0 + da salle22_zone1_main + da salle22_zone1_oeil + da salle22_zone1_bouche +salle22_zone1_main str '' +salle22_zone1_oeil str '' +salle22_zone1_bouche str '' + +salle23 + dw 1 + dw 0,0,24,0 + dw 80,79,108,90 + da salle23_zone1_main + da salle23_zone1_oeil + da salle23_zone1_bouche +salle23_zone1_main str '' +salle23_zone1_oeil str 'Et si cette pierre cachait quelque chose ?' +salle23_zone1_bouche str '' + +salle24 + dw 2 + dw 28,23,25,0 + dw 60,75,82,105 + da salle24_zone1_main + da salle24_zone1_oeil + da salle24_zone1_bouche + dw 117,15,156,48 + da salle24_zone2_main + da salle24_zone2_oeil + da salle24_zone2_bouche +salle24_zone1_main str '' +salle24_zone1_oeil str d2'Danger: '8e'l'8e'phants'd3 +salle24_zone1_bouche str '' +salle24_zone2_main str '' +salle24_zone2_oeil str 'Le sommet de cette montagne cache quelque chose...' +salle24_zone2_bouche str '' + +salle25 + dw 1 + dw 0,0,0,0 + dw 162,2,263,75 + da salle25_zone1_main + da salle25_zone1_oeil + da salle25_zone1_bouche +salle25_zone1_main str 'Est-ce bien raisonnable ?' +salle25_zone1_oeil str 'A mon avis, le self control de ce pachyderme semble s'8e'rieusement entam'8e +salle25_zone1_bouche str d2'Tout doux petit !'d3 + +salle26 + dw 1 + dw 0,24,0,24 + dw 238,74,272,108 + da salle26_zone1_main + da salle26_zone1_oeil + da salle26_zone1_bouche +salle26_zone1_main str 'Impossible d'27'arracher des brindilles '88' la main' +salle26_zone1_oeil str 'Une vari'8e't'8e' rare d'27'une herbe africaine r'8e'put'8e'e pour sa facilit'8e' de combustion' +salle26_zone1_bouche str '' + +salle27 + dw 3 + dw 0,0,0,24 + dw 1,2,96,110 + da salle27_zone1_main + da salle27_zone1_oeil + da salle27_zone1_bouche + dw 225,71,259,109 + da salle27_zone2_main + da salle27_zone2_oeil + da salle27_zone2_bouche + dw 121,77,212,106 + da salle27_zone3_main + da salle27_zone3_oeil + da salle27_zone3_bouche +salle27_zone1_main str '' +salle27_zone1_oeil str '' +salle27_zone1_bouche str '' +salle27_zone2_main str 'Pas la peine, personne n'27'est en vue' +salle27_zone2_oeil str 'La pierre qui vient d'27'assommer ce mis'8e'rable' +salle27_zone2_bouche str '' +salle27_zone3_main str '' +salle27_zone3_oeil str 'Il a son compte !' +salle27_zone3_bouche str 'Et vous imaginiez qu'27'il allait r'8e'pondre ?' + +salle28 + dw 1 + dw 0,0,0,24 + dw 1,2,96,110 + da salle28_zone1_main + da salle28_zone1_oeil + da salle28_zone1_bouche +salle28_zone1_main str '' +salle28_zone1_oeil str 'Et dire qu'27'il va falloir grimper tout '8d'a' +salle28_zone1_bouche str 'C'27'est pas un sol sacr'8e' !' + +salle29 + dw 3 + dw 32,0,0,0 + dw 2,17,36,49 + da salle29_zone1_main + da salle29_zone1_oeil + da salle29_zone1_bouche + dw 40,45,56,57 + da salle29_zone2_main + da salle29_zone2_oeil + da salle29_zone2_bouche + dw 95,93,139,109 + da salle29_zone3_main + da salle29_zone3_oeil + da salle29_zone3_bouche +salle29_zone1_main str 'Et la SPA alors ?' +salle29_zone1_oeil str 'On ne sait jamais, des fois que Bill meure...' +salle29_zone1_bouche str '' +salle29_zone2_main str '' +salle29_zone2_oeil str 'Ca ferait sans doute une bonne prise' +salle29_zone2_bouche str '' +salle29_zone3_main str '' +salle29_zone3_oeil str 'Attention ! Il poursuit Bill !' +salle29_zone3_bouche str d2'Urk Urk !'d3 + +salle30 + dw 2 + dw 31,27,0,27 + dw 2,17,36,49 + da salle30_zone1_main + da salle30_zone1_oeil + da salle30_zone1_bouche + dw 40,45,56,57 + da salle30_zone2_main + da salle30_zone2_oeil + da salle30_zone2_bouche +salle30_zone1_main str 'Et la SPA alors ?' +salle30_zone1_oeil str 'On ne sait jamais, des fois que Bill meure...' +salle30_zone1_bouche str '' +salle30_zone2_main str '' +salle30_zone2_oeil str 'Ca ferait sans doute une bonne prise' +salle30_zone2_bouche str '' + +salle31 + dw 1 + dw 40,30,33,0 + dw 0,0,0,0 + da salle31_zone1_main + da salle31_zone1_oeil + da salle31_zone1_bouche +salle31_zone1_main str '' +salle31_zone1_oeil str '' +salle31_zone1_bouche str '' + +salle32 + dw 1 + dw 0,0,0,0 + dw 162,43,188,70 + da salle32_zone1_main + da salle32_zone1_oeil + da salle32_zone1_bouche +salle32_zone1_main str '' +salle32_zone1_oeil str 'Elle semble pouvoir '90'tre d'8e'plac'8e'e facilement' +salle32_zone1_bouche str '' + +salle33 + dw 2 + dw 36,31,0,0 + dw 3,4,27,27 + da salle33_zone1_main + da salle33_zone1_oeil + da salle33_zone1_bouche + dw 200,3,233,21 + da salle33_zone2_main + da salle33_zone2_oeil + da salle33_zone2_bouche +salle33_zone1_main str 'Impossible d'27'arracher cette cam'8e'ra !' +salle33_zone1_oeil str 'Une cam'8e'ra de surveillance' +salle33_zone1_bouche str 'Pour faire de la bu'8e'e sur l'27'objectif ?' +salle33_zone2_main str 'Ouille ! C'27'est chaud !' +salle33_zone2_oeil str 'Eblouissant' +salle33_zone2_bouche str '' + +salle34 + dw 3 + dw 0,0,0,36 + dw 70,61,112,81 + da salle34_zone1_main + da salle34_zone1_oeil + da salle34_zone1_bouche + dw 2,66,27,105 + da salle34_zone2_main + da salle34_zone2_oeil + da salle34_zone2_bouche + dw 176,24,218,58 + da salle34_zone3_main + da salle34_zone3_oeil + da salle34_zone3_bouche +salle34_zone1_main str '' +salle34_zone1_oeil str 'Quelques braises encore chaudes' +salle34_zone1_bouche str '' +salle34_zone2_main str 'Faut bien que certaines commodes ne contiennent rien. Ca ne serait pas rigolo...' +salle34_zone2_oeil str '' +salle34_zone2_bouche str '' +salle34_zone3_main str 'Pas le moment de faire des cr'90'pes !' +salle34_zone3_oeil str 'Des po'90'les (faut vraiment tout lui dire celui l'88'...)' +salle34_zone3_bouche str '' + +salle35 + dw 3 + dw 0,0,0,36 + dw 70,61,112,81 + da salle35_zone1_main + da salle35_zone1_oeil + da salle35_zone1_bouche + dw 2,66,27,105 + da salle35_zone2_main + da salle35_zone2_oeil + da salle35_zone2_bouche + dw 176,24,218,58 + da salle35_zone3_main + da salle35_zone3_oeil + da salle35_zone3_bouche +salle35_zone1_main str '' +salle35_zone1_oeil str 'Le feu d'8e'gage de la fum'8e'e qui s'27''8e'chappe par le conduit' +salle35_zone1_bouche str '' +salle35_zone2_main str 'Faut bien que certaines commodes ne contiennent rien. Ca ne serait pas rigolo...' +salle35_zone2_oeil str '' +salle35_zone2_bouche str '' +salle35_zone3_main str 'Pas le moment de faire des cr'90'pes !' +salle35_zone3_oeil str 'Des po'90'les (faut vraiment tout lui dire celui l'88'...)' +salle35_zone3_bouche str '' + +salle36 + dw 2 + dw 0,33,34,39 + dw 74,12,136,94 + da salle36_zone1_main + da salle36_zone1_oeil + da salle36_zone1_bouche + dw 212,2,239,93 + da salle36_zone2_main + da salle36_zone2_oeil + da salle36_zone2_bouche +salle36_zone1_main str '' +salle36_zone1_oeil str 'On se l'27'ouvre ?' +salle36_zone1_bouche str d2'Y'27'a quelqu'27'un ?'d3 +salle36_zone2_main str 'Trop solide pour '90'tre d'8e'plac'8e'e' +salle36_zone2_oeil str d2'Fernand aime Georgette'd3' y est grav'8e' au canif' +salle36_zone2_bouche str '' + +salle37 + dw 1 + dw 0,0,0,0 + dw 0,0,0,0 + da salle37_zone1_main + da salle37_zone1_oeil + da salle37_zone1_bouche +salle37_zone1_main str '' +salle37_zone1_oeil str '' +salle37_zone1_bouche str '' + +salle38 + dw 5 + dw 0,0,36,0 + dw 146,38,168,45 + da salle38_zone1_main + da salle38_zone1_oeil + da salle38_zone1_bouche + dw 146,55,167,62 + da salle38_zone2_main + da salle38_zone2_oeil + da salle38_zone2_bouche + dw 172,39,187,58 + da salle38_zone3_main + da salle38_zone3_oeil + da salle38_zone3_bouche + dw 222,40,236,59 + da salle38_zone4_main + da salle38_zone4_oeil + da salle38_zone4_bouche + dw 242,45,272,85 + da salle38_zone5_main + da salle38_zone5_oeil + da salle38_zone5_bouche +salle38_zone1_main str '' +salle38_zone1_oeil str 'Et si je vous dis que c'27'est un tiroir ?' +salle38_zone1_bouche str '' +salle38_zone2_main str '' +salle38_zone2_oeil str 'C'27'est pourtant pas compliqu'8e' de l'27'ouvrir...' +salle38_zone2_bouche str '' +salle38_zone3_main str '' +salle38_zone3_oeil str 'On en boirait bien...' +salle38_zone3_bouche str '' +salle38_zone4_main str 'C'27'est le F'8e'tiche qu'27'il faut rapporter !' +salle38_zone4_oeil str 'Peut-'90'tre un pr'8e'd'8e'cesseur...' +salle38_zone4_bouche str 'Pas tr'8f's causant...' +salle38_zone5_main str 'Mieux vaut ne pas trop y toucher' +salle38_zone5_oeil str 'A peine plus complexe qu'27'un Atari...' +salle38_zone5_bouche str '' + +salle39 + dw 3 + dw 36,0,0,0 + dw 203,4,247,50 + da salle39_zone1_main + da salle39_zone1_oeil + da salle39_zone1_bouche + dw 234,52,241,60 + da salle39_zone2_main + da salle39_zone2_oeil + da salle39_zone2_bouche + dw 203,62,247,94 + da salle39_zone1_main + da salle39_zone1_oeil + da salle39_zone1_bouche +salle39_zone1_main str 'Rien '88' faire, elle reste ferm'8e'e' +salle39_zone1_oeil str 'On se l'27'ouvre ?' +salle39_zone1_bouche str '' +salle39_zone2_main str '' +salle39_zone2_oeil str 'Bill aper'8d'oit par le trou de la serrure des dizaines de personnes s'27'activant autour du F'8e'tiche branch'8e' sur des '8e'lectrodes !' +salle39_zone2_bouche str '' + +salle40 + dw 2 + dw 0,31,0,0 + dw 21,3,98,47 + da salle40_zone1_main + da salle40_zone1_oeil + da salle40_zone1_bouche + dw 76,75,154,92 + da salle40_zone2_main + da salle40_zone2_oeil + da salle40_zone2_bouche +salle40_zone1_main str '' +salle40_zone1_oeil str 'Il semble se d'8e'sint'8e'resser de Bill' +salle40_zone1_bouche str 'Cui cui ?' +salle40_zone2_main str '' +salle40_zone2_oeil str '' +salle40_zone2_bouche str '' + +salle41 + dw 1 + dw 0,0,0,0 + dw 0,0,0,0 + da salle41_zone1_main + da salle41_zone1_oeil + da salle41_zone1_bouche +salle41_zone1_main str '' +salle41_zone1_oeil str '' +salle41_zone1_bouche str '' + +salle42 + dw 4 + dw 0,0,0,0 + dw 9,15,52,67 + da salle42_zone1_main + da salle42_zone1_oeil + da salle42_zone1_bouche + dw 64,25,107,76 + da salle42_zone2_main + da salle42_zone2_oeil + da salle42_zone2_bouche + dw 167,37,216,66 + da salle42_zone3_main + da salle42_zone3_oeil + da salle42_zone3_bouche + dw 227,11,272,107 + da salle42_zone4_main + da salle42_zone4_oeil + da salle42_zone4_bouche +salle42_zone1_main str 'Bill ne devrait pas tenter le combat '88' mains nues' +salle42_zone1_oeil str 'Il a l'27'air agressif...' +salle42_zone1_bouche str d2'Fais tes pri'8f'res, rascal !'d3 +salle42_zone2_main str '' +salle42_zone2_oeil str 'Si vous voulez mon avis...' +salle42_zone2_bouche str d2'Tu vis ta derni'8f're heure'd3 +salle42_zone3_main str '' +salle42_zone3_oeil str '' +salle42_zone3_bouche str d2'Le Professeur nous a charg'8e's de venir t'27'offrir des fleurs !'d3 +salle42_zone4_main str '' +salle42_zone4_oeil str '' +salle42_zone4_bouche str d2'Hurk Hurk !'d3 + +salle43 + dw 1 + dw 0,0,0,0 + dw 0,0,0,0 + da salle43_zone1_main + da salle43_zone1_oeil + da salle43_zone1_bouche +salle43_zone1_main str '' +salle43_zone1_oeil str '' +salle43_zone1_bouche str '' + +salle44 + dw 3 + dw 45,0,0,0 + dw 21,8,79,107 + da salle44_zone1_main + da salle44_zone1_oeil + da salle44_zone1_bouche + dw 87,33,129,107 + da salle44_zone2_main + da salle44_zone2_oeil + da salle44_zone2_bouche + dw 133,29,213,92 + da salle44_zone3_main + da salle44_zone3_oeil + da salle44_zone3_bouche +salle44_zone1_main str '' +salle44_zone1_oeil str 'Compl'8f'tement bugg'8e', le mec...' +salle44_zone1_bouche str d2'Poussez pas !'d3 +salle44_zone2_main str '' +salle44_zone2_oeil str 'L'27''8e'quipe d'27'intervention de SOS Aventuriers ! Il '8e'tait temps !' +salle44_zone2_bouche str d2'Va au nord si tu veux nous suivre vers la suite de l'27'aventure et rejoindre le Professeur X. !'d3 +salle44_zone3_main str '' +salle44_zone3_oeil str '' +salle44_zone3_bouche str d2'Nous sommes les membres de SOS Aventuriers. Nous sommes l'88' pour t'27'aider '88' continuer le jeu !'d3 + +salle45 + dw 3 + dw 0,0,0,0 + dw 33,8,88,104 + da salle45_zone1_main + da salle45_zone1_oeil + da salle45_zone1_bouche + dw 199,1,215,19 + da salle45_zone2_main + da salle45_zone2_oeil + da salle45_zone2_bouche + dw 128,61,177,107 + da salle45_zone3_main + da salle45_zone3_oeil + da salle45_zone3_bouche +salle45_zone1_main str 'Il se d'8e'brouille tr'8f's bien tout seul' +salle45_zone1_oeil str 'Mais qu'27'est-ce qu'27'il vient foutre ici celui-l'88' ?' +salle45_zone1_bouche str d2'C'27'est par Leader Board ici ! !'d3 +salle45_zone2_main str '' +salle45_zone2_oeil str 'Le drapeau indiquant le trou' +salle45_zone2_bouche str '' +salle45_zone3_main str d2'Passez-moi le fer de 5 pendant que vous y '90'tes !'d3 +salle45_zone3_oeil str d2'Pas tr'8f's m'8e'diterrann'8e'en tout '8d'a'd3 +salle45_zone3_bouche str d2'Put put put'd3 + +salle46 + dw 1 + dw 0,0,0,0 + dw 0,0,0,0 + da salle46_zone1_main + da salle46_zone1_oeil + da salle46_zone1_bouche +salle46_zone1_main str '' +salle46_zone1_oeil str '' +salle46_zone1_bouche str '' + +salle47 + dw 1 + dw 0,0,0,0 + dw 0,0,0,0 + da salle47_zone1_main + da salle47_zone1_oeil + da salle47_zone1_bouche +salle47_zone1_main str '' +salle47_zone1_oeil str '' +salle47_zone1_bouche str '' + +salle48 + dw 5 + dw 0,0,0,0 + dw 96,58,115,71 + da salle48_zone1_main + da salle48_zone1_oeil + da salle48_zone1_bouche + dw 235,5,271,109 + da salle48_zone2_main + da salle48_zone2_oeil + da salle48_zone2_bouche + dw 1,21,83,91 + da salle48_zone3_main + da salle48_zone3_oeil + da salle48_zone3_bouche + dw 162,1,203,98 + da salle48_zone4_main + da salle48_zone4_oeil + da salle48_zone4_bouche + dw 145,25,157,34 + da salle48_zone5_main + da salle48_zone5_oeil + da salle48_zone5_bouche +salle48_zone1_main str '' +salle48_zone1_oeil str 'Bill est d'8e'j'88' parvenu '88' lib'8e'rer sa main' +salle48_zone1_bouche str '' +salle48_zone2_main str '' +salle48_zone2_oeil str 'Le Professeur utilise visiblement l'27''8e'nergie du F'8e'tiche' +salle48_zone2_bouche str d2'Vous '90'tes perdu Palmer ! ! Ce F'8e'tiche contient une mati'8f're inconnue qui va me permettre de devenir le ma'94'tre du Monde ! !'d3 +salle48_zone3_main str '' +salle48_zone3_oeil str 'Grouillez-vous ! !' +salle48_zone3_bouche str '' +salle48_zone4_main str '' +salle48_zone4_oeil str 'Un lieutenant du Professeur' +salle48_zone4_bouche str d2'La ferme!'d3 +salle48_zone5_main str 'Impossible de l'27'atteindre attach'8e' !' +salle48_zone5_oeil str 'L'27'interrupteur' +salle48_zone5_bouche str '' + +salle49 + dw 3 + dw 0,0,0,0 + dw 145,25,157,34 + da salle49_zone1_main + da salle49_zone1_oeil + da salle49_zone1_bouche + dw 235,5,271,109 + da salle49_zone2_main + da salle49_zone2_oeil + da salle49_zone2_bouche + dw 162,1,203,98 + da salle49_zone3_main + da salle49_zone3_oeil + da salle49_zone3_bouche +salle49_zone1_main str '' +salle49_zone1_oeil str 'L'27'interrupteur' +salle49_zone1_bouche str '' +salle49_zone2_main str '' +salle49_zone2_oeil str 'Une chance! Il n'27'a pas rep'8e'r'8e' Bill !' +salle49_zone2_bouche str d2'Le Mal va enfin triompher ! Gniark gniark !'d3 +salle49_zone3_main str '' +salle49_zone3_oeil str 'Heureusement que les m'8e'chants ne font pas attention...' +salle49_zone3_bouche str '' + +salle50 + dw 3 + dw 0,0,51,0 + dw 133,41,156,52 + da salle50_zone1_main + da salle50_zone1_oeil + da salle50_zone1_bouche + dw 50,44,76,55 + da salle50_zone2_main + da salle50_zone2_oeil + da salle50_zone2_bouche + dw 224,59,245,69 + da salle50_zone3_main + da salle50_zone3_oeil + da salle50_zone3_bouche +salle50_zone1_main str '' +salle50_zone1_oeil str 'Les beautiful eyes de Bill' +salle50_zone1_bouche str '' +salle50_zone2_main str '' +salle50_zone2_oeil str 'L'27'homme de main du Professeur' +salle50_zone2_bouche str '' +salle50_zone3_main str '' +salle50_zone3_oeil str 'Le Professeur' +salle50_zone3_bouche str '' + +salle51 + dw 9 + dw 0,0,0,0 + dw 56,61,61,63 + da salle51_zone1_main + da salle51_zone1_oeil + da salle51_zone1_bouche + dw 60,61,72,63 + da salle51_zone2_main + da salle51_zone2_oeil + da salle51_zone2_bouche + dw 64,65,70,67 + da salle51_zone3_main + da salle51_zone3_oeil + da salle51_zone3_bouche + dw 74,64,79,67 + da salle51_zone4_main + da salle51_zone4_oeil + da salle51_zone4_bouche + dw 127,44,143,59 + da salle51_zone5_main + da salle51_zone5_oeil + da salle51_zone5_bouche + dw 64,74,87,93 + da salle51_zone6_main + da salle51_zone6_oeil + da salle51_zone6_bouche + dw 27,2,114,36 + da salle51_zone7_main + da salle51_zone7_oeil + da salle51_zone7_bouche + dw 85,56,120,65 + da salle51_zone8_main + da salle51_zone8_oeil + da salle51_zone8_bouche + dw 5,74,44,102 + da salle51_zone9_main + da salle51_zone9_oeil + da salle51_zone9_bouche +salle51_zone1_main str 'Rien ne se passe' +salle51_zone1_oeil str d2'Caf'8e', (en panne)'d3 +salle51_zone1_bouche str '' +salle51_zone2_main str '' +salle51_zone2_oeil str d2'Auto-destruction imm'8e'diate'd3 +salle51_zone2_bouche str '' +salle51_zone3_main str d2'Auto destruction enclench'8e'e'd3' annonce une voix synth'8e'tique' +salle51_zone3_oeil str d2'Auto-destruction diff'8e'r'8e'e'd3 +salle51_zone3_bouche str '' +salle51_zone4_main str '' +salle51_zone4_oeil str d2'Ejection'd3 +salle51_zone4_bouche str '' +salle51_zone5_main str '' +salle51_zone5_oeil str 'Un micro' +salle51_zone5_bouche str d2'Un, deux, un, deux, trois !'d3 +salle51_zone6_main str '' +salle51_zone6_oeil str 'Juste de quoi ranger ses petits effets personnels' +salle51_zone6_bouche str '' +salle51_zone7_main str '' +salle51_zone7_oeil str 'Et dire que le Professeur X. veut devenir ma'94'tre de tout '8d'a..' +salle51_zone7_bouche str '' +salle51_zone8_main str 'Pfff... Ca connait le GFA '8d'a ?' +salle51_zone8_oeil str 'M'90'me pas de l'27'Atari'd3 +salle51_zone8_bouche str '' +salle51_zone9_main str '' +salle51_zone9_oeil str 'Le prochain streamer Atari ?' +salle51_zone9_bouche str '' + +salle52 + dw 10 + dw 0,0,0,0 + dw 56,61,61,63 + da salle52_zone1_main + da salle52_zone1_oeil + da salle52_zone1_bouche + dw 60,61,72,63 + da salle52_zone2_main + da salle52_zone2_oeil + da salle52_zone2_bouche + dw 64,65,70,67 + da salle52_zone3_main + da salle52_zone3_oeil + da salle52_zone3_bouche + dw 74,64,79,67 + da salle52_zone4_main + da salle52_zone4_oeil + da salle52_zone4_bouche + dw 127,44,143,59 + da salle52_zone5_main + da salle52_zone5_oeil + da salle52_zone5_bouche + dw 64,74,87,93 + da salle52_zone6_main + da salle52_zone6_oeil + da salle52_zone6_bouche + dw 27,2,114,36 + da salle52_zone7_main + da salle52_zone7_oeil + da salle52_zone7_bouche + dw 201,5,247,87 + da salle52_zone8_main + da salle52_zone8_oeil + da salle52_zone8_bouche + dw 85,56,120,65 + da salle52_zone9_main + da salle52_zone9_oeil + da salle52_zone9_bouche + dw 5,74,44,102 + da salle52_zone10_main + da salle52_zone10_oeil + da salle52_zone10_bouche +salle52_zone1_main str 'Rien ne se passe' +salle52_zone1_oeil str d2'Caf'8e', (en panne)'d3 +salle52_zone1_bouche str '' +salle52_zone2_main str '' +salle52_zone2_oeil str d2'Auto-destruction imm'8e'diate'd3 +salle52_zone2_bouche str '' +salle52_zone3_main str d2'Auto destruction enclench'8e'e'd3' annonce une voix synth'8e'tique' +salle52_zone3_oeil str d2'Auto-destruction diff'8e'r'8e'e'd3 +salle52_zone3_bouche str '' +salle52_zone4_main str '' +salle52_zone4_oeil str d2'Ejection'd3 +salle52_zone4_bouche str '' +salle52_zone5_main str '' +salle52_zone5_oeil str 'Un micro' +salle52_zone5_bouche str d2'Un, deux, un, deux, trois!'d3 +salle52_zone6_main str '' +salle52_zone6_oeil str 'Juste de quoi ranger ses petits effets personnels' +salle52_zone6_bouche str '' +salle52_zone7_main str '' +salle52_zone7_oeil str 'Et dire que le Professeur X. veut devenir ma'94'tre de tout '8d'a...' +salle52_zone7_bouche str '' +salle52_zone8_main str '' +salle52_zone8_oeil str 'Vite ! Bill doit faire quelque chose ! !' +salle52_zone8_bouche str d2'Vous ne m'27''8e'chapperez plus cette fois-ci Palmer !'d3 +salle52_zone9_main str 'Pfff... Ca connait le GFA '8d'a ?' +salle52_zone9_oeil str 'M'90'me pas de l'27'Atari'd3 +salle52_zone9_bouche str '' +salle52_zone10_main str '' +salle52_zone10_oeil str 'Le prochain streamer Atari ?' +salle52_zone10_bouche str '' + +salle53 + dw 10 + dw 0,0,0,0 + dw 56,61,61,63 + da salle53_zone1_main + da salle53_zone1_oeil + da salle53_zone1_bouche + dw 60,61,72,63 + da salle53_zone2_main + da salle53_zone2_oeil + da salle53_zone2_bouche + dw 64,65,70,67 + da salle53_zone3_main + da salle53_zone3_oeil + da salle53_zone3_bouche + dw 74,64,79,67 + da salle53_zone4_main + da salle53_zone4_oeil + da salle53_zone4_bouche + dw 127,44,143,59 + da salle53_zone5_main + da salle53_zone5_oeil + da salle53_zone5_bouche + dw 64,74,87,93 + da salle53_zone6_main + da salle53_zone6_oeil + da salle53_zone6_bouche + dw 27,2,114,36 + da salle53_zone7_main + da salle53_zone7_oeil + da salle53_zone7_bouche + dw 201,5,247,87 + da salle53_zone8_main + da salle53_zone8_oeil + da salle53_zone8_bouche + dw 85,56,120,65 + da salle53_zone9_main + da salle53_zone9_oeil + da salle53_zone9_bouche + dw 5,74,44,102 + da salle53_zone10_main + da salle53_zone10_oeil + da salle53_zone10_bouche +salle53_zone1_main str 'Rien ne se passe' +salle53_zone1_oeil str d2'Caf'8e', (en panne)'d3 +salle53_zone1_bouche str '' +salle53_zone2_main str '' +salle53_zone2_oeil str d2'Auto-destruction imm'8e'diate'd3 +salle53_zone2_bouche str '' +salle53_zone3_main str d2'Auto destruction enclench'8e'e'd3' annonce une voix synth'8e'tique' +salle53_zone3_oeil str d2'Auto-destruction diff'8e'r'8e'e'd3 +salle53_zone3_bouche str '' +salle53_zone4_main str '' +salle53_zone4_oeil str d2'Ejection'd3 +salle53_zone4_bouche str '' +salle53_zone5_main str '' +salle53_zone5_oeil str 'Un micro' +salle53_zone5_bouche str d2'Un, deux, un, deux, trois !'d3 +salle53_zone6_main str '' +salle53_zone6_oeil str 'Juste de quoi ranger ses petits effets personnels' +salle53_zone6_bouche str '' +salle53_zone7_main str '' +salle53_zone7_oeil str 'Et dire que le Professeur X. veut devenir ma'94'tre de tout '8d'a...' +salle53_zone7_bouche str '' +salle53_zone8_main str '' +salle53_zone8_oeil str 'Bill a la situation bien en main !' +salle53_zone8_bouche str d2'Vous ne vous en tirerez pas comme '8d'a, Palmer ! !'d3 +salle53_zone9_main str 'Pfff... Ca connait le GFA '8d'a ?' +salle53_zone9_oeil str 'M'90'me pas de l'27'Atari'd3 +salle53_zone9_bouche str '' +salle53_zone10_main str '' +salle53_zone10_oeil str 'Le prochain streamer Atari ?' +salle53_zone10_bouche str '' + +salle54 + dw 1 + dw 0,0,0,0 + dw 0,0,0,0 + da salle54_zone1_main + da salle54_zone1_oeil + da salle54_zone1_bouche +salle54_zone1_main str '' +salle54_zone1_oeil str '' +salle54_zone1_bouche str '' + +salle55 + dw 1 + dw 0,0,0,0 + dw 0,0,0,0 + da salle55_zone1_main + da salle55_zone1_oeil + da salle55_zone1_bouche +salle55_zone1_main str '' +salle55_zone1_oeil str '' +salle55_zone1_bouche str '' + +salle56 + dw 1 + dw 0,0,0,0 + dw 0,0,0,0 + da salle56_zone1_main + da salle56_zone1_oeil + da salle56_zone1_bouche +salle56_zone1_main str '' +salle56_zone1_oeil str '' +salle56_zone1_bouche str '' + +* VARIABLE CONTENANT LE COPYRIGHT + +nombre_messages = 11 +message + da message1 + da message2 + da message3 + da message4 + da message5 + da message6 + da message7 + da message8 + da message9 + da message10 + da message11 + +message1 str 0d'BILL PALMER. Copyright 1987. ARCAN' +message2 str 0d'Un jeu de FRANCOIS COULON' +message3 str 0d'Dessins de DOMINIQUE PETTER' +message4 str 0d'Musique d'27' Alain Krausz' +message5 str 0d'Coproduit par Emmanuel Lasmezas' +message6 str 0d'Programmes et outils utilis'8e's...' +message7 str 0d'Basic GFA et Compilateur GFA (GfA Systemtechnik/Franck Ostrowski)' +message8 str 0d'Degas Elite (Batteries Included/Tom Hudson), Tablette graphique CRP' +message9 str 'Mat'8e'riel musical Yamaha et Akai, digitaliseur ST Replay (2 bits System/A. Racine)' +message10 str 'Version Apple IIgs '8e'crite en 2021'0d'par Brutal Deluxe Software'0d'Antoine Vignau & Olivier Zardini' +message11 str ' ' + +* DIVERSES CHAINES + +strVIDE str '' \ No newline at end of file diff --git a/billpalmer/midi.s b/billpalmer/midi.s new file mode 100644 index 0000000..f78f592 --- /dev/null +++ b/billpalmer/midi.s @@ -0,0 +1,528 @@ +* +* Midi routines +* +* (c) 2020, Brutal Deluxe Software +* Antoine Vignau & Olivier Zardini +* + +dpSEQ = $f8 + +seqOFFSET = $006 +seqTEMPO = $18A +seqTPB = $190 + +*-------------------------------------- + + mx %00 + +stopMIDI + lda fgMIDI + bne stopMIDI99 + + _KillAllNotes ; Stop MidiSynth + _MSShutDown + + PushWord #35 ; unload MidiSynth + _UnloadOneTool + + _SoundShutDown + +stopMIDI99 + rts + +*-------------------------------------- + +initMIDI + pha ; Check for AppleTalk + _GetIRQEnable + pla + and #$20 + beq initMIDI1 + + inc fgMIDI + rts + +initMIDI1 + lda myDP + clc + adc #$100 + pha + _SoundStartUp + + PushWord #35 ; Load MidiSynth + PushWord #0 + _LoadOneTool + bcc initMIDI2 + + inc fgMIDI + rts + +initMIDI2 + _MSStartUp ; Start MidiSynth + bcc musicMEMORY + + inc fgMIDI + rts + +*-------------------------------------- Now, get RAM + +musicMEMORY + PushLong #0 + PushLong #$10000 + PushWord myID + PushWord #%11000000_00011100 + PushLong #0 + _NewHandle + phd + tsc + tcd + lda [3] + sta ptrSEQ + ldy #2 + lda [3],y + sta ptrSEQ+2 + pld + pla + pla + bcc musicMEMORY1 + + inc fgMIDI ; cannot assign memory for MIDI sequences + rts + +musicMEMORY1 + PushLong #0 + PushLong #$10000 + PushWord myID + PushWord #%11000000_00011100 + PushLong #0 + _NewHandle + phd + tsc + tcd + lda [3] + sta ptrBNK + ldy #2 + lda [3],y + sta ptrBNK+2 + pld + pla + pla + bcc musicMEMORY2 + + inc fgMIDI ; cannot assign memory for MIDI sequences + rts + +musicMEMORY2 + PushLong #0 + PushLong #$10000 + PushWord myID + PushWord #%11000000_00011100 + PushLong #0 + _NewHandle + phd + tsc + tcd + lda [3] + sta ptrWAV + ldy #2 + lda [3],y + sta ptrWAV+2 + pld + pla + pla + bcc loadWAV + + inc fgMIDI ; cannot assign memory for MIDI sequences + rts + +*-------------------------------------- Load WAV + +loadWAV + lda #pWAV + sta midiOPEN+4 + + jsl GSOS + dw $2010 + adrl midiOPEN + sta midiERR + + lda midiOPEN+2 + sta midiSETMARK+2 + sta midiREAD+2 + sta midiCLOSE+2 + + jsl GSOS + dw $2016 + adrl midiSETMARK + + lda ptrWAV + sta midiREAD+4 + lda ptrWAV+2 + sta midiREAD+6 + + stz midiREAD+8 + lda #1 + sta midiREAD+10 + + jsl GSOS + dw $2012 + adrl midiREAD + sta midiERR + + jsl GSOS + dw $2014 + adrl midiCLOSE + + lda midiERR ; check err + beq loadBNK + + inc fgMIDI ; exit + rts + +*-------------------------------------- Load BNK + +loadBNK + lda #pBNK ; load the MIDI bank + ldx ptrBNK+2 + ldy ptrBNK + jsr loadGSOS + + lda midiERR ; check err + beq loadSEQUENCE + + inc fgMIDI + rts + +*-------------------------------------- Load Sequence + +loadSEQUENCE + lda #pSEQ + ldx ptrSEQ+2 + ldy ptrSEQ + jsr loadGSOS + + lda midiERR ; check err + beq initMUSIC + + inc fgMIDI + rts + +*-------------------------------------- Play sequence + +initMUSIC + lda ptrSEQ + sta playMUSIC5+1 ; save pointers + sta playMUSIC55+1 + lda ptrSEQ+2 + sta playMUSIC6+1 + sta playMUSIC66+1 + + _KillAllNotes + + lda myDP + tcd + +playMUSIC5 + lda #$bdbd ; patched + sta dpSEQ +playMUSIC6 + lda #$bdbd ; patched + sta dpSEQ+2 + + ldy #seqOFFSET + lda [dpSEQ],y + clc +playMUSIC55 + adc #$bdbd ; patched + sta seqPlayRec + lda #0 +playMUSIC66 + adc #$bdbd ; patched + sta seqPlayRec+2 + + ldy #seqTEMPO + lda [dpSEQ],y + asl + sec + sbc #10 + pha + _SetTempo + + ldy #seqTPB + lda [dpSEQ],y + pha + _SetBeat + +*--- Toutes les pistes sont actives + + lda ptrBNK + clc + adc #$400 + sta ptrINST + lda ptrBNK+2 + adc #0 + sta ptrINST+2 + + stz myINDEX + +]lp PushWord myINDEX + PushWord #$8000 + _SetPlayTrack + + PushWord myINDEX + PushWord #-1 + _TrackToChannel + + PushWord myINDEX + PushWord #2 + _SetTrackOut + + PushLong ptrINST + PushWord myINDEX + _SetInstrument + + lda ptrINST + clc + adc #$120 + sta ptrINST + lda ptrINST+2 + adc #0 + sta ptrINST+2 + + inc myINDEX + lda myINDEX + cmp #16 + bne ]lp + +*--- + + sei + + PushLong ptrWAV + PushWord #0 ; docStart + PushWord #0 ; byteCount (=64ko) + _WriteRamBlock + + PushLong #callBackRec + _SetCallBack + + PushWord #0 + PushWord #0 + PushLong seqClock + PushLong seqPlayRec + _Locate + PullLong seqPlayRec + + cli ; end of the long init! + rts + +*-------------------------------------- + +doMUSIK + lda fgMIDI ; can we play? + bne nozik99 + + lda fgMIDIPLAY + eor #1 + sta fgMIDIPLAY + beq doSOUNDON + bne doSOUNDOFF + +nozik99 + rts + +fgMIDIPLAY ds 2 + +*-------------------------------------- + +doSOUNDON + lda fgMIDI ; can we play? + bne playMUSIC99 + + lda #$0100 ; no, let's start playing! + sta seqPlay + PushLong #seqPlayRec + _SeqPlayer + stz fgLOOP + +playMUSIC99 + rts + +*-------------------------------------- + +doSOUNDOFF + lda fgMIDI + bne stopMUSIC99 + + stz seqPlay + PushLong #seqPlayRec + _SeqPlayer + _KillAllNotes + +stopMUSIC99 + rts + +*-------------------------------------- Suspend music + +suspendMUSIC + lda fgMIDI + ora fgMIDIPLAY + bne suspendMUSIC9 + + _MSSuspend + +suspendMUSIC9 + rts + +*-------------------------------------- Resume music + +resumeMUSIC + lda fgMIDI + ora fgMIDIPLAY + bne resumeMUSIC9 + + _MSResume + +resumeMUSIC9 + rts + +*-------------------------------------- + +checkREPLAY + lda fgMIDI + bne checkREPLAY99 + + lda fgLOOP + beq checkREPLAY99 + jsr doSOUNDON + +checkREPLAY99 + rts + +*-------------------------------------- + +replayMUSIC + lda #-1 + stal fgLOOP + rtl + +fgLOOP dw -1 + +*-------------------------------------- Load a file + +loadGSOS + sta midiOPEN+4 + sty midiREAD+4 + stx midiREAD+6 + stz midiERR + + jsl GSOS + dw $2010 + adrl midiOPEN + bcs loadGSOSERR + + lda midiOPEN+2 + sta midiREAD+2 + sta midiCLOSE+2 + + lda midiEOF + sta midiREAD+8 + lda midiEOF+2 + sta midiREAD+10 + + jsl GSOS + dw $2012 + adrl midiREAD + bcs loadGSOSERR + +loadGSOS2 + jsl GSOS + dw $2014 + adrl midiCLOSE + rts + +loadGSOSERR + jsr loadGSOS2 + inc fgMIDI + rts + +*-------------------------------------- DATA + +myINDEX ds 2 + +*--- GS/OS + +midiERR ds 2 + +midiOPEN dw 12 + ds 2 + adrl pSEQ + ds 2 + ds 2 + ds 2 + ds 2 + ds 4 + ds 2 + ds 8 + ds 8 + ds 4 +midiEOF ds 4 + +midiREAD dw 4 + ds 2 + ds 4 + ds 4 + ds 4 + +midiCLOSE dw 1 + ds 2 + +midiSETMARK dw 3 + ds 2 + ds 2 + adrl $900 ; +$900 pour WAV + +*--- GS/OS Strings + +pSEQ strl '1/Data/Sequence' +pWAV strl '1/Data/Piano.Wav' +pBNK strl '1/Data/Piano.Bnk' + +*--- Memory + +ptrSEQ ds 4 +ptrWAV ds 4 +ptrBNK ds 4 + +*--- Flags + +fgMIDI ds 2 ; can play MIDI if 0 + +*--- Instruments + +ptrINST ds 4 + +*--- MidiSynth + +seqPlayRec + ds 4 + ds 4 + ds 4 + ds 4 +seqPlay ds 2 ; Play +seqClock ds 4 + +callBackRec adrl replayMUSIC ; When sequence ends ! + ds 4 + ds 4 + ds 4 + ds 4 + ds 4 + ds 4 + ds 4 + ds 4 + ds 4 + ds 4 + ds 4 + ds 4 + ds 4 diff --git a/billpalmer/palmer.s b/billpalmer/palmer.s new file mode 100644 index 0000000..fe17c89 --- /dev/null +++ b/billpalmer/palmer.s @@ -0,0 +1,2191 @@ +* +* 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 + +*--- diff --git a/billpalmer/roomfr.asm b/billpalmer/roomfr.asm new file mode 100644 index 0000000..cbb270f --- /dev/null +++ b/billpalmer/roomfr.asm @@ -0,0 +1,1407 @@ +* +* Bill Palmer +* + +lessalles + da s00,s01,s02,s03,s04,s05,s06,s07,s08,s09 + da s10,s11,s12,s13,s14,s15,s16,s17,s18,s19 + da s20,s21,s22,s23,s24,s25,s26,s27,s28,s29 + da s30,s31,s32,s33,s34,s35,s36,s37,s38,s39 + da s40,s41,s42,s43,s44,s45,s46,s47,s48,s49 + da s50,s51,s52,s53,s54,s55,s56 + +*--- + +s00 + rts + +*--- + +s01 + lda instruction1 + cmp #main + bne s0199 + lda zone_cliquee + cmp #1 + bne s012 + + ldx #laitue + lda #s1_str1 + jmp apparition_objet + +s012 cmp #2 + bne s013 + + ldx #journal + lda #s1_str2 + jmp apparition_objet + +s013 cmp #4 + bne s0199 + + lda #2 + sta salle + +s0199 rts + +s1_str1 str 'Bill r'8e'cup'8f're une laitue pas tr'8f's fra'94'che' +s1_str2 str 'Tiens, le journal du jour est arriv'8e + +*--- + +s02 + lda instruction1 + cmp #main + bne s0299 + lda zone_cliquee + cmp #3 + bne s022 + + ldx #livre + lda #s2_str3 + jmp apparition_objet + +s022 cmp #2 + bne s0299 + + ldx #carte_de_credit + lda #s2_str2 + jmp apparition_objet + +s0299 rts + +s2_str3 str 'Bill remarque un ancien manuel' +s2_str2 str 'Saperlipopette ! La carte de cr'8e'dit que Bill pensait avoir perdue '88' tout jamais' + +*--- + +s03 + lda instruction1 + cmp #main + bne s0399 + lda zone_cliquee + cmp #1 + bne s032 + + ldx #machette + lda #strVIDE + jsr apparition_objet + ldx #souris_mecanique + lda #strVIDE + jsr apparition_objet + ldx #carte_didentite + lda #strVIDE + jsr apparition_objet + ldx #boite_de_conserve + lda #strVIDE + jsr apparition_objet + ldx #ouvre_boite + lda #strVIDE + jmp apparition_objet + +s032 cmp #2 + bne s0399 + + ldx #passeport + lda #s3_str2 + jmp apparition_objet + +s0399 rts + +s3_str2 str 'Fichtre ! Le passeport que Bill dans son inorganisation toute h'8e'ro'95'que avait '8e'gar'8e' apr'8f's un s'8e'jour en Afrique du sud...' + +*--- + +s04 + lda instruction1 + cmp #main + bne s0499 + lda zone_cliquee + cmp #3 + bne s0499 + + lda #5 + sta salle +s0499 rts + +*--- + +s05 + lda instruction1 + cmp #oeil + bne s0599 + lda zone_cliquee + cmp #1 + bne s0599 + + ldx #bombe + lda #s5_str1 + jmp apparition_objet + +s0599 rts + +s5_str1 str 'Explorant d'8e'licatement les recoins du moteur du v'8e'hicule, Bill remarque un curieux engin visiblement plac'8e' l'88' '88' des fins hostiles' + +*--- + +s06 + lda instruction1 + cmp #main + bne s0699 + lda zone_cliquee + cmp #1 + bne s063 + + ldx #bombe + lda objet-1,x + and #$ff + cmp #objet_inexistant + bne s062 + + lda #s6_str1 + jmp fin + +s062 lda #s6_str2 + jsr ecriture + lda #7 + sta salle + rts + +s063 cmp #3 + bne s0699 + + ldx #briquet + lda #s6_str3 + jmp apparition_objet + +s0699 rts + +s6_str1 str 'Baaaaooooouuuuummmmm ! ! ! ! ! ! Sans que Bill ait eu le temps de r'8e'agir, la voiture explose en mille morceaux. Echouer si pr'8f's du but...' +s6_str2 str 'La voiture d'8e'marre...' +s6_str3 str 'Un briquet tra'94'nait par l'88'...' +*--- + +s07 +s0799 rts + +*--- + +s08 +s0899 rts + +*--- + +s09 + lda instruction1 + cmp #main + bne s0999 + lda instruction2 + cmp #carte_de_credit + bne s0901 + + ldx #billet_davion + lda #s9_str1 + jmp apparition_objet + +s0901 cmp #billet_davion + bne s0999 + + lda #10 + sta salle + +s0999 rts + +s9_str1 str 'L'27'h'99'tesse donne '88' Bill son billet pour le N'27'Gwanal'8e'l'8e + +*--- + +s10 + lda instruction1 + cmp #droite + bne s1001 + + lda #s10_str1 + jmp ecriture + +s1001 cmp #main + bne s1099 + lda instruction2 + cmp #passeport + bne s1099 + + lda #11 + sta salle + lda #s10_str2 + jmp ecriture + +s1099 rts + +s10_str1 str 'On ne passe pas !' +s10_str2 str 'C'27'est en r'8f'gle, vous pouvez passer !' + +*--- + +s11 +s1199 rts + +*--- + +s12 +s1299 rts + +*--- + +s13 + lda instruction1 + cmp #main + bne s1399 + lda zone_cliquee + cmp #3 + bne s1399 + + lda #s13_str3 + jmp fin + +s1399 rts + +s13_str3 str 'Les pierres peuvent cacher beaucoup d'27'animaux. Et les serpents sont souvent tr'8f's dangereux...' + +*--- + +s14 +s1499 rts + +*--- + +s15 + lda instruction1 + cmp #main + bne s1599 + lda instruction2 + cmp #carte_de_credit + bne s1501 + + lda #s15_str1 + jmp ecriture + +s1501 cmp #livre + bne s1502 + + ldx #livre + lda #s15_str2 + jsr disparition_objet + sep #$20 + ldx #livre_donne + lda #TRUE + sta indicateur-1,x + rep #$20 + +s1502 lda instruction2 + cmp #laitue + bne s1599 + + ldx #livre_donne + lda indicateur-1,x + and #$ff + beq s1503 ; FALSE + + lda #17 + sta salle + + ldx #laitue + lda #s15_str3 + jmp disparition_objet + +s1503 + lda #s15_str4 + jmp ecriture + +s1599 rts + +s15_str1 str 'Qu'27'ice que c'27'est qu'278d'a ? T'27'y payes pas comme '8d'a...' +s15_str2 str 'T'27'y es un vrai z'27'aventurier alors ! ! J'27'y t'27'y garde le livre et t'27'y pars avec le dromadaire !' +s15_str3 str 'Le dromadaire avale la laitue et se baisse pour que Bill parte sur son dos' +s15_str4 str 'L'27'homme refuse que Bill nourrisse les dromadaires' + +*--- + +s16 + sep #$20 + ldx #bill_desert + lda indicateur-1,x + cmp #-1 + beq s1601 + inc indicateur-1,x +s1601 rep #$20 + + lda indicateur-1,x + and #$ff + cmp #4 + bne s1699 + + lda #s16_str1 + jmp fin +s1699 rts + +s16_str1 str 'Sans moyen de transport s'9e'r et rapide, Bill meurt bient'99't '8e'puis'8e + +*--- Was protection check + +s17 +s1799 rts + +*--- + +s18 +s1899 rts + +*--- + +s19 + lda instruction1 + cmp #main + bne s1999 + lda instruction2 + cmp #carte_de_credit + bne s1902 + + lda #s19_str1 + jmp ecriture + +s1902 cmp #machette + bne s1999 + + lda #s19_str2 + jmp ecriture + +s1999 rts + +s19_str1 str 'Les cartes de cr'8e'dit ne sont pas accept'8e'es. Bill va devoir prendre le train sans billet' +s19_str2 str 'On ne joue pas les fiers-'88'-bras dans ma gare. L'27'homme se rendort...' + +*--- + +s20 + lda instruction1 + cmp #main + bne s2099 + lda zone_cliquee + cmp #4 + bne s2001 + + lda #s20_str4 + jsr ecriture + + sep #$20 + ldx #train_arrete + lda #TRUE + sta indicateur-1,x + rep #$20 + +s2001 lda zone_cliquee + cmp #5 + bne s2003 + + ldx #train_arrete + lda indicateur-1,x + and #$ff + beq s2002 + + lda #22 + sta salle + bra s2003 + +s2002 lda #23 + sta salle + +s2003 sep #$20 + ldx #controleur_passe + lda indicateur-1,x + cmp #-1 + beq s2004 + inc indicateur-1,x +s2004 rep #$20 + + lda indicateur-1,x + and #$ff + cmp #8 + bcc s2099 + + lda #s20_str3 + jmp fin + +s2099 rts + +s20_str4 str 'Le train est arr'90't'8e +s20_str3 str 'Le contr'99'leur vient et arr'90'te Bill qui n'27'a pas de billet' + +*--- + +s21 +s2199 rts + +*--- + +s22 +s2299 rts + +*--- + +s23 + lda instruction1 + cmp #main + bne s2399 + lda zone_cliquee + cmp #1 + bne s2399 + + lda #s23_str1 + jmp fin + +s2399 rts + +s23_str1 str 'La pierre cachait un scorpion. Et les scorpions d'8e'testent '90'tre d'8e'rang'8e's... Mauvais plan' + +*--- + +s24 +s2499 rts + +*--- + +s25 + sep #$20 + ldx #elephant_arrive + lda indicateur-1,x + cmp #-1 + beq s2500 + inc indicateur-1,x +s2500 rep #$20 + + lda indicateur-1,x + and #$ff + cmp #6 + bcc s2501 + + lda #s25_str1 + jmp fin + +s2501 lda instruction1 + cmp #main + bne s2599 + lda instruction2 + cmp #souris_mecanique + bne s2599 + + lda #s25_str2 + jsr ecriture + + sep #$20 + ldx #elephant_enfuis + lda #TRUE + sta indicateur-1,x + rep #$20 + + lda #26 + sta salle + +s2599 rts + +s25_str1 str 'Bill est lamin'8e', '8e'crabouill'8e' et atomis'8e' par le mammif'8f're en d'8e'lire' +s25_str2 str 'Effray'8e' par l'27'engin, l'27'animal prend ses jambes '88' son cou et s'27'enfuit' + +*--- + +s26 + lda instruction1 + cmp #main + bne s2699 + lda instruction2 + cmp #machette + bne s2699 + + ldx #brindilles + lda #s26_str1 + jmp apparition_objet + +s2699 rts + +s26_str1 str 'Bill arrive '88' couper quelques brindilles' + +*--- + +s27 + lda instruction1 + cmp #main + bne s2799 + lda zone_cliquee + cmp #1 + bne s2701 + + lda #30 + sta salle + +s2701 cmp #3 + bne s2799 + + ldx #photo + lda #s27_str3 + jmp apparition_objet + +s2799 rts + +s27_str3 str 'En le fouillant, Bill d'8e'couvre une photographie' + +*--- + +s28 + lda instruction1 + cmp #main + bne s2899 + lda zone_cliquee + cmp #1 + bne s2899 + + lda #s28_str1 + jsr ecriture + + lda #29 + sta salle + +s2899 rts + +s28_str1 str 'Bill commence '88' grimper la colline' + +*--- + +s29 + sep #$20 + ldx #mechant + lda indicateur-1,x + cmp #-1 + beq s2901 + inc indicateur-1,x +s2901 rep #$20 + + lda indicateur-1,x + and #$ff + cmp #4 + bcc s2999 + + lda #s29_str1 + jmp fin +s2999 rts + +s29_str1 str 'L'27'ignoble individu '8e'trangle Bill avec son couteau' + +*--- + +s30 + lda instruction1 + cmp #main + bne s3099 + lda zone_cliquee + cmp #2 + bne s3099 + + lda #s30_str2 + jmp fin + +s3099 rts + +s30_str2 str 'Manque de chance, la touffe d'27'herbe se d'8e'tache de la roche et Bill tombe dans le vide' + +*--- + +s31 +s3199 rts + +*--- + +s32 + sep #$20 + ldx #mechant + lda indicateur-1,x + cmp #-1 + beq s3200 + inc indicateur-1,x +s3200 rep #$20 + + lda indicateur-1,x + and #$ff + cmp #8 + bcc s3201 + + lda #s32_str8 + jmp fin + +s3201 lda instruction1 + cmp #main + bne s3299 + lda zone_cliquee + cmp #1 + bne s3299 + + lda #s32_str1 + jsr ecriture + + sep #$20 + ldx #mechant_assome + lda #TRUE + sta indicateur-1,x + rep #$20 + + lda #31 + sta salle +s3299 rts + +s32_str8 str 'L'27'homme du Professeur rattrape Bill. C'27'en est fini...' +s32_str1 str 'Bill renverse la pierre dans le vide. Elle assomme le sc'8e'l'8e'rat qui le suivait' + +*--- + +s33 + ldx #photo_montree + lda indicateur-1,x + and #$ff + bne s3301 + + sep #$20 + ldx #camera_mort + lda indicateur-1,x + cmp #-1 + beq s3300 + inc indicateur-1,x +s3300 rep #$20 + + lda indicateur-1,x + and #$ff + cmp #8 + bcc s3301 + + lda #s33_str1 + jmp fin + +s3301 lda instruction1 + cmp #main + bne s3399 + lda instruction2 + cmp #photo + bne s3399 + + lda #s33_str2 + jsr ecriture + + sep #$20 + ldx #photo_montree + lda #TRUE + sta indicateur-1,x + rep #$20 + +s3399 rts + +s33_str1 str 'Soudain, un rayon pulv'8e'rise Bill (gniark gniark !)' +s33_str2 str 'Bill montre la photo '88' la cam'8e'ra qui semble r'8e'agir' + +*--- + +s34 + lda instruction1 + cmp #main + bne s3499 + lda instruction2 + cmp #briquet + bne s3402 + + ldx #brindilles + lda objet-1,x + and #$ff +* cmp #34 ; LOGO - original code + cmp #objet_pris + bne s3401 + + ldx #brindilles + lda #s34_str2 + jsr disparition_objet + + sep #$20 + ldx #feu_allume + lda #TRUE + sta indicateur-1,x + rep #$20 + + lda #35 + sta salle + rts + +s3401 lda #s34_str2 + jmp ecriture + +s3402 cmp #brindilles + bne s3499 + + lda #s34_str3 + jmp ecriture + +s3499 rts + +s34_str1 str 'Bill allume un feu avec les brindilles...' +s34_str2 str 'Il n'27'y a rien '88' br'9e'ler dans la pi'8f'ce' +s34_str3 str 'Et pourquoi ne pas les faire br'9e'ler ?' +*--- + +s35 +s3599 rts + +*--- + +s36 + lda instruction1 + cmp #main + bne s3699 + lda zone_cliquee + cmp #1 + bne s3699 + + ldx #professeur_parti + lda indicateur-1,x + and #$ff + cmp #4 + bcs s3601 + + lda #s36_str1 + jmp fin + +s3601 lda #38 + sta salle + lda #s36_str2 + jmp ecriture + +s3699 rts + +s36_str1 str 'Avant que Bill ait pu p'8e'n'8e'trer dans le laboratoire du Professeur X., celui-ci saisit une mitraillette et le transforme en passoire' +s36_str2 str 'Ouf... La porte s'27'ouvre !' + +*--- + +s37 +s3799 rts + +*--- + +s38 + lda instruction1 + cmp #main + bne s3803 + lda zone_cliquee + cmp #1 + bne s3801 + + ldx #appeau + lda #s38_str1 + jmp apparition_objet + +s3801 cmp #2 + bne s3802 + + ldx #mitraillette + lda #s38_str2 + jmp apparition_objet + +s3802 cmp #3 + bne s3803 + + lda #s38_str3 + jmp fin + +s3803 lda instruction1 + cmp #bouche + bne s3899 + lda zone_cliquee + cmp #3 + bne s3899 + + lda #s38_str4 + jmp fin + +s3899 rts + +s38_str1 str 'Bill trouve un appeau...' +s38_str2 str 'Ca alors ! Une mitraillette !' +s38_str3 str 'Bill aurait d'9e' savoir qu'27'il vaut mieux manipuler des produits toxiques avec des gants...' +s38_str4 str 'Bon sang ! C'278e'tait du poison ! Bill s'278e'trangle et agonise en quelques minutes' + +*--- + +s39 + lda instruction1 + cmp #oeil + bne s3999 + lda zone_cliquee + cmp #2 + bne s3999 + + sep #$20 + ldx #professeur_parti + lda indicateur-1,x + cmp #-1 + beq s3901 + inc indicateur-1,x +s3901 rep #$20 + + lda indicateur-1,x + and #$ff + cmp #3+1 + bcc s3999 + + lda #s39_str1 + jmp ecriture + +s3999 rts + +s39_str1 str 'Le Professeur reste pour inspecter ses hommes !' + +*--- + +s40 + lda instruction1 + cmp #bouche + bne s4001 + lda instruction2 + cmp #appeau + bne s4001 + + lda #41 + sta salle + lda #s40_str1 + jsr ecriture + +s4001 lda instruction1 + cmp #oeil + bne s4099 + lda zone_cliquee + cmp #2 + bne s4099 + + ldx #feu_allume + lda indicateur-1,x + and #$ff + beq s4002 + + lda #s40_str2 + jmp ecriture + +s4002 lda #s40_str3 + jmp ecriture + +s4099 rts + +s40_str1 str 'Attir'8e' par l'27'appeau, l'27'oiseau vient se poser...' +s40_str2 str 'De la fum'8e'e chaude s'27'en '8e'chappe' +s40_str3 str 'On dirait le conduit d'27'une chemin'8e'e' + +*--- + +s41 + ldx #feu_allume + lda indicateur-1,x + and #$ff + bne s4101 + + lda #40 + sta salle + lda #s41_str1 + jmp ecriture + +s4101 lda #42 + sta salle + lda #s41_str2 + jmp ecriture + +s4199 rts + +s41_str1 str 'L'27'oiseau repart aussit'99't' +s41_str2 str 'L'27'oiseau bouche le conduit de la chemin'8e'e, aussit'99't les hommes du Professeur sortent asphyxi'8e's...' + +*--- + +s42 + sep #$20 + ldx #homme_attaque + lda indicateur-1,x + cmp #-1 + beq s4200 + inc indicateur-1,x +s4200 rep #$20 + + lda indicateur-1,x + and #$ff + cmp #8 + bcc s4201 + + lda #s42_str1 + jmp fin + +s4201 lda instruction1 + cmp #main + bne s4299 + lda instruction2 + cmp #mitraillette + bne s4202 + + lda #43 + sta salle + lda #s42_str2 + jsr ecriture + jsr chargement_image + lda #s42_str3 + jsr ecriture + + lda #3 + jsr nowWAIT + + lda #44 + sta salle + rts + +s4202 cmp #machette + bne s4299 + + lda #s42_str4 + jmp fin + +s4299 rts + +s42_str1 str 'Les hommes du Professeur '8e'tripent Bill' +s42_str2 str 'Bill d'8e'gaine sa mitraillette...' +s42_str3 str 'Et massacre ses agresseurs...' +s42_str4 str 'Bill engage le combat '88' la machette mais il succombe sous le nombre' + +*--- Check protection + +s43 +s4399 rts + +*--- + +s44 +s4499 rts + +*--- + +s45 + lda instruction1 + cmp #main + bne s4599 + lda zone_cliquee + cmp #2 + bne s4599 + + lda #46 + sta salle + lda #s45_str2 + jsr ecriture + jsr chargement_image + lda #s45_str3 + jsr ecriture + + lda #48 + sta salle + + lda #3 + jsr nowWAIT + + ldx #1 +]lp phx + lda #strVIDE + jsr disparition_objet + plx + inx + cpx #nombre_objets + bcc ]lp + +s4599 rts + +s45_str2 str 'Bill tire sur le drapeau. Soudain...' +s45_str3 str 'Une trappe s'27'ouvre sous ses pieds. Bill est captur'8e' par les hommes du Professeur X.' + +*--- + +s46 +s4699 rts + +*--- + +s47 +s4799 rts + +*--- + +s48 + sep #$20 + ldx #canon + lda indicateur-1,x + cmp #-1 + beq s4600 + inc indicateur-1,x +s4600 rep #$20 + + lda indicateur-1,x + and #$ff + cmp #6 + bcc s4801 + + lda #s48_str6 + jmp fin + +s4801 lda instruction1 + cmp #main + bne s4899 + lda zone_cliquee + cmp #1 + bne s4899 + + lda #s48_str1 + jsr ecriture + + lda #49 + sta salle + +s4899 rts + +s48_str6 str 'Le canon r'8e'duit Bill en miettes. Le Professeur X. devient ma'94'tre du monde' +s48_str1 str 'Bill arrive '88' se lib'8e'rer discr'8f'tement et '88' '8e'teindre la m'8f'che' + +*--- + +s49 + lda instruction1 + cmp #main + bne s4999 + lda zone_cliquee + cmp #2 + beq s4901 + cmp #3 + bne s4902 + +s4901 lda #s49_str2 + jmp fin + +s4902 cmp #1 + bne s4999 + + lda #s49_str1 + jsr ecriture + lda #50 + sta salle + +s4999 rts + +s49_str2 str 'Bill commet une maladresse et se fait mortellement rep'8e'rer par le lieutenant du Professeur...' +s49_str1 str 'Bill baisse l'27'interrupteur, plongeant la pi'8f'ce enti'8f're dans l'27'obscurit'8e + +*--- + +s50 + lda instruction1 + cmp #main + bne s5099 + lda zone_cliquee + beq s5099 + + lda #s50_str1 + jmp fin + +s5099 rts + +s50_str1 str 'Plut'99't que de s'278e'clipser discr'8f'tement, Bill a cru bon de manifester sa pr'8e'sence...' + +*--- + +s51 + lda instruction1 + cmp #main + bne s5102 + lda zone_cliquee + cmp #2 + bne s5101 + + lda #s51_str2 + jmp fin + +s5101 cmp #3 + bne s5102 + + sep #$20 + ldx #destruction_base + lda #TRUE + sta indicateur-1,x + rep #$20 + +s5102 ldx #destruction_base + lda indicateur-1,x + and #$ff + beq s5103 + + sep #$20 + ldx #compte_a_rebours + lda indicateur-1,x + cmp #-1 + beq s5100 + inc indicateur-1,x +s5100 rep #$20 + + lda indicateur-1,x + and #$ff + cmp #6 + bcc s5103 + + lda #s51_str2 + jmp fin + +s5103 lda instruction1 + cmp #main + bne s5105 + lda zone_cliquee + cmp #4 + bne s5104 + + lda #s51_str4 + jsr ecriture + lda #54 + sta salle + +s5104 cmp #6 + bne s5105 + + ldx #revolver + lda #s51_str6 + jmp apparition_objet + +s5105 lda instruction1 + cmp #bouche + bne s5199 + lda zone_cliquee + cmp #5 + bne s5199 + + lda #52 + sta salle + +s5199 rts + +s51_str2 str 'La base et tout ce qu'27'elle contenait explose. Trop exp'8e'ditif...' +s51_str4 str 'Bill s'278e'jecte...' +s51_str6 str 'Voil'88' qui pourra '90'tre utile...' + +*--- + +s52 + lda instruction1 + cmp #main + bne s5201 + lda instruction2 + cmp #revolver + bne s5201 + + lda #53 + sta salle + + ldx #fetiche + lda #s52_str1 + jsr apparition_objet + +s5201 ldx #lieutenant + sep #$20 + lda indicateur-1,x + cmp #-1 + beq s5200 + inc indicateur-1,x +s5200 rep #$20 + + lda indicateur-1,x + and #$ff + cmp #4 + bcc s5202 + + lda #s52_str2 + jmp fin + +s5202 lda instruction1 + cmp #main + bne s5204 + lda zone_cliquee + cmp #2 + bne s5203 + + lda #s52_str3 + jmp fin + +s5203 cmp #3 + bne s5204 + + sep #$20 + ldx #destruction_base + lda #TRUE + sta indicateur-1,x + rep #$20 + +s5204 ldx #destruction_base + lda indicateur-1,x + and #$ff + beq s5205 + + sep #$20 + ldx #compte_a_rebours + lda indicateur-1,x + cmp #-1 + beq s5252 + inc indicateur-1,x +s5252 rep #$20 + + lda indicateur-1,x + and #$ff + cmp #6 + bcc s5205 + + lda #s52_str3 + jmp fin + +s5205 lda instruction1 + cmp #main + bne s5299 + lda zone_cliquee + cmp #4 + bne s5206 + + lda #s52_str4 + jsr ecriture + lda #54 + sta salle + +s5206 cmp #6 + bne s5299 + + ldx #revolver + lda #s52_str6 + jmp apparition_objet + +s5299 rts + +s52_str1 str 'Bill d'8e'gaine rapidement et tient en respect les deux hommes. Le Professeur doit l'89'cher le F'8e'tiche' +s52_str2 str 'L'27'homme de main du Professeur supprime froidement Bill' +s52_str3 str 'La base et tout ce qu'27'elle contenait explose. Trop exp'8e'ditif...' +s52_str4 str 'Bill s'278e'jecte...' +s52_str6 str 'Voil'88' qui pourra '90'tre utile...' + +*--- + +s53 + lda instruction1 + cmp #main + bne s5302 + lda zone_cliquee + cmp #2 + bne s5301 + + lda #s53_str2 + jmp fin + +s5301 cmp #3 + bne s5302 + + sep #$20 + ldx #destruction_base + lda #TRUE + sta indicateur-1,x + rep #$20 + +s5302 ldx #destruction_base + lda indicateur-1,x + and #$ff + beq s5303 + + sep #$20 + ldx #compte_a_rebours + lda indicateur-1,x + cmp #-1 + beq s5300 + inc indicateur-1,x +s5300 rep #$20 + + lda indicateur-1,x + and #$ff + cmp #6 + bcc s5303 + + lda #s53_str2 + jmp fin + +s5303 lda instruction1 + cmp #main + bne s5399 + lda zone_cliquee + cmp #4 + bne s5399 + + lda #s53_str4 + jsr ecriture + lda #54 + sta salle +s5399 rts + +s53_str2 str 'La base et tout ce qu'27'elle contenait explose. Trop exp'8E'ditif...' +s53_str4 str 'Bill s'278e'jecte...' + +*--- + +s54 + lda #55 + sta salle + jsr chargement_image + + lda #3 + jsr nowWAIT + + ldx #destruction_base + lda indicateur-1,x + and #$ff + bne s5401 + + lda #s54_str1 + jmp fin + +s5401 ldx #fetiche + lda objet-1,x + and #$ff + cmp #objet_pris + beq s5402 + + lda #s54_str2 + jmp fin + +s5402 lda #56 + sta salle + jsr chargement_image + + lda #3 + jsr nowWAIT + + lda #s54_str3 ; on a gagné ! + jmp fin + +s5499 rts + +s54_str1 str 'A sa chute, Bill est de nouveau captur'8e'. Il ne peut plus contrecarrer les plans du Professeur...' +s54_str2 str 'La base du Professeur X. est r'8e'duite en miettes. H'8e'las, Bill n'27'a pas r'8e'ussi '88' r'8e'cup'8e'rer le F'8e'tiche' +s54_str3 str 'FELICITATIONS ! ! Bill a r'8e'cup'8e'r'8e' le F'8e'tiche et d'8e'truit la base du Professeur X. Gageons que celui-ci prendra sa revanche...' + +*--- + +s55 +s5599 rts + +*--- + +s56 +s5699 rts \ No newline at end of file