diff options
Diffstat (limited to 'devtools/tasmrecover/dreamweb/sprite.asm')
-rw-r--r-- | devtools/tasmrecover/dreamweb/sprite.asm | 5033 |
1 files changed, 5033 insertions, 0 deletions
diff --git a/devtools/tasmrecover/dreamweb/sprite.asm b/devtools/tasmrecover/dreamweb/sprite.asm new file mode 100644 index 0000000000..45f807da3f --- /dev/null +++ b/devtools/tasmrecover/dreamweb/sprite.asm @@ -0,0 +1,5033 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +;------------------------------------------------------------People Routines---- + + + +Reelroutines db 1,44,0 ;Room number and x,y + dw 20 ;reel pointer + db 2,0,1 ;speed,speed count,convers. no. + + db 1,55,0 + dw 0 + db 50,20,0 + + db 24,22,0 + dw 74 + db 1,0,0 + + db 24,33,10 + dw 75 + db 1,0,1 + + db 1,44,0 + dw 27 + db 2,0,2 + + db 1,44,0 + dw 96 + db 3,0,4 + + db 1,44,0 + dw 118 + db 2,0,5 + + db 1,44,10 + dw 0 + db 2,0,0 + + db 5,22,20 + dw 53 + db 3,0,0 + + db 5,22,20 + dw 40 + db 1,0,2 + + db 5,22,20 + dw 50 + db 1,0,3 + + db 2,11,10 + dw 192 + db 1,0,0 + + db 2,11,10 + dw 182 + db 2,0,1 + + db 8,11,10 + dw 0 + db 2,0,1 + + db 23,0,50 + dw 0 + db 3,0,0 + + db 28,11,20 + dw 250 + db 4,0,0 + + db 23,0,50 + dw 43 + db 2,0,8 + + db 23,11,40 + dw 130 + db 2,0,1 + + db 23,22,40 + dw 122 + db 2,0,2 + + db 23,22,40 + dw 105 + db 2,0,3 + + db 23,22,40 + dw 81 + db 2,0,4 + + db 23,11,40 + dw 135 + db 2,0,5 + + db 23,22,40 + dw 145 + db 2,0,6 + + db 4,22,30 + dw 0 + db 2,0,0 + + db 45,22,30 + dw 200 + db 0,0,20 + + db 45,22,30 + dw 39 + db 2,0,0 + + db 45,22,30 + dw 25 + db 2,0,0 + + db 8,22,40 + dw 32 + db 2,0,0 + + db 7,11,20 + dw 64 + db 2,0,0 + + db 22,22,20 + dw 82 + db 2,0,0 + + db 27,11,30 + dw 0 + db 2,0,0 + + db 20,0,30 + dw 0 + db 2,0,0 + + db 14,33,40 + dw 21 + db 1,0,0 + + db 29,11,10 + dw 0 + db 1,0,0 + + db 2,22,0 + dw 2 + db 2,0,0 + + db 25,0,50 + dw 4 + db 2,0,0 + + db 50,22,30 + dw 121 + db 2,0,0 + + db 50,22,30 + dw 0 + db 20,0,0 + + db 52,22,30 + dw 192 + db 2,0,0 + + db 52,22,30 + dw 233 + db 2,0,0 + + db 50,22,40 + dw 104 + if cd + if german + db 65,0,0 + else + db 55,0,0 + endif + else + db 55,0,0 + endif + + db 53,33,0 + dw 99 + db 2,0,0 + + db 50,22,40 + dw 0 + db 3,0,0 + + db 50,22,30 + dw 162 + db 2,0,0 + + db 52,22,30 + dw 57 + db 2,0,0 + + db 52,22,30 + dw 0 + db 2,0,0 + + db 54,0,0 + dw 72 + db 3,0,0 + + db 55,44,0 + dw 0 + db 2,0,0 + + db 19,0,0 + dw 0 + db 28,0,0 + + db 14,22,0 + dw 2 + db 2,0,0 + + db 14,22,0 + dw 300 + db 1,0,0 + + db 10,22,30 + dw 174 + db 0,0,0 + + db 12,22,20 + dw 0 + db 1,0,0 + + db 11,11,20 + dw 0 + db 50,20,0 + + db 11,11,30 + dw 0 + db 50,20,0 + + db 11,22,20 + dw 0 + db 50,20,0 + + db 14,33,40 + dw 0 + db 50,20,0 + + db 255 + + +Lenofreelrouts equ $-reelroutines + + +Reelcalls dw gamer,sparkydrip,eden,edeninbath,sparky,smokebloke + dw manasleep,drunk,receptionist,malefan,femalefan + dw louis,louischair,soldier1,bossman,interviewer + dw heavy,manasleep2,mansatstill,drinker,bartender + dw othersmoker,tattooman,attendant,keeper,candles1 + dw smallcandle,security,copper,poolguard,rockstar + dw businessman,train,aide,mugger,helicopter + dw intromagic1,intromusic,intromagic2,candles2,gates + dw intromagic3,intromonks1,candles,intromonks2 + dw handclap,monkandryan,endgameseq,priest,madman + dw madmanstelly,alleybarksound,foghornsound + dw carparkdrip,carparkdrip,carparkdrip,carparkdrip + + + +;---------------------------------------------------------Character updates---- + + + +Alleybarksound proc near + + mov ax,[es:bx+3] + dec ax + cmp ax,0 + jnz nobark + push bx es + mov al,14 + call playchannel1 + pop es bx + mov ax,1000 +nobark: mov [es:bx+3],ax + ret + + endp + + + + +Intromusic proc near + + ret + + endp + + +Foghornsound proc near + + call randomnumber + cmp al,198 + jnz nofog + mov al,13 + call playchannel1 +nofog: ret + + endp + + + + +Receptionist proc near + + call checkspeed + jnz gotrecep + cmp cardpassflag,1 + jnz notsetcard + inc cardpassflag + mov byte ptr [es:bx+7],1 + mov word ptr [es:bx+3],64 +notsetcard: cmp word ptr [es:bx+3],58 + jnz notdes1 + call randomnumber + cmp al,30 + jc notdes2 + mov word ptr [es:bx+3],55 + jmp gotrecep + +notdes1: cmp word ptr [es:bx+3],60 + jnz notdes2 + call randomnumber + cmp al,240 + jc gotrecep + mov word ptr [es:bx+3],53 + jmp gotrecep + +notdes2: cmp word ptr [es:bx+3],88 + jnz notendcard + mov word ptr [es:bx+3],53 + jmp gotrecep + +notendcard: inc word ptr [es:bx+3] +gotrecep: call showgamereel + call addtopeoplelist + + mov al,[es:bx+7] + and al,128 + jz nottalkedrecep + mov talkedtorecep,1 +nottalkedrecep: ret + + endp + + + + +Smokebloke proc near + + cmp rockstardead,0 + jnz notspokento + mov al,[es:bx+7] + and al,128 + jz notspokento + push es bx + mov al,5 + call setlocation + pop bx es +notspokento: ;mov al,[es:bx+7] + ;and al,127 + ;mov [es:bx+7],al + call checkspeed + jnz gotsmokeb + cmp word ptr [es:bx+3],100 + jnz notsmokeb1 + call randomnumber + cmp al,30 + jc notsmokeb2 + mov word ptr [es:bx+3],96 + jmp gotsmokeb + +notsmokeb1: cmp word ptr [es:bx+3],117 + jnz notsmokeb2 + mov word ptr [es:bx+3],96 + jmp gotsmokeb + +notsmokeb2: inc word ptr [es:bx+3] +gotsmokeb: call showgamereel + call addtopeoplelist + ret + + endp + + + + + + + + + + +Attendant proc near + + call showgamereel + call addtopeoplelist + mov al,[es:bx+7] + and al,128 + jz nottalked + mov talkedtoattendant,1 +nottalked: ret + + endp + + + + + + +Manasleep proc near + + mov al,[es:bx+7] + and al,127 + mov [es:bx+7],al + call showgamereel + call addtopeoplelist + ret + + endp + + + +Eden proc near + + cmp generaldead,0 + jnz notinbed + call showgamereel + call addtopeoplelist +notinbed: ret + + endp + + + +Edeninbath proc near + + cmp generaldead,0 + jz notinbath + cmp sartaindead,0 + jnz notinbath + call showgamereel + call addtopeoplelist +notinbath: ret + + endp + + + +Malefan proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + + +Femalefan proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + + + +Louis proc near + + cmp rockstardead,0 + jnz notlouis1 + call showgamereel + call addtopeoplelist +notlouis1: ret + + endp + + + + +Louischair proc near + + cmp rockstardead,0 + jz notlouis2 + call checkspeed + jnz notlouisanim + mov ax,[es:bx+3] + inc ax + cmp ax,191 + jz restartlouis + cmp ax,185 + jz randomlouis + mov [es:bx+3],ax + jmp notlouisanim +randomlouis: mov [es:bx+3],ax + call randomnumber + cmp al,245 + jnc notlouisanim +restartlouis: mov ax,182 + mov [es:bx+3],ax +notlouisanim: call showgamereel + call addtopeoplelist +notlouis2: ret + + endp + + + +Manasleep2 proc near + + mov al,[es:bx+7] + and al,127 + mov [es:bx+7],al + call showgamereel + call addtopeoplelist + ret + + endp + + + + +Mansatstill proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + +Tattooman proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + +Drinker proc near + + call checkspeed + jnz gotdrinker + inc word ptr [es:bx+3] + cmp word ptr [es:bx+3],115 + jnz notdrinker1 + mov word ptr [es:bx+3],105 + jmp gotdrinker + +notdrinker1: cmp word ptr [es:bx+3],106 + jnz gotdrinker + call randomnumber + cmp al,3 + jc gotdrinker + mov word ptr [es:bx+3],105 + +gotdrinker: call showgamereel + call addtopeoplelist + ret + + endp + + + + + +Bartender proc near + + call checkspeed + jnz gotsmoket + cmp word ptr [es:bx+3],86 + jnz notsmoket1 + call randomnumber + cmp al,18 + jc notsmoket2 + mov word ptr [es:bx+3],81 + jmp gotsmoket + +notsmoket1: cmp word ptr [es:bx+3],103 + jnz notsmoket2 + mov word ptr [es:bx+3],81 + jmp gotsmoket + +notsmoket2: inc word ptr [es:bx+3] +gotsmoket: call showgamereel + cmp gunpassflag,1 + jnz notgotgun + mov byte ptr [es:bx+7],9 +notgotgun: call addtopeoplelist + ret + + endp + + + + + + + +Othersmoker proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + + + + + +Barwoman proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + + + + + + + + +Interviewer proc near + + cmp reeltowatch,68 + jnz notgeneralstart + inc word ptr [es:bx+3] +notgeneralstart: cmp word ptr [es:bx+3],250 + jz talking + call checkspeed + jnz talking + cmp word ptr [es:bx+3],259 + jz talking + inc word ptr [es:bx+3] +talking: call showgamereel + ret + + endp + + + + + +Soldier1 proc near + + cmp word ptr [es:bx+3],0 + jz soldierwait + mov watchingtime,10 + cmp word ptr [es:bx+3],30 + jnz notaftersshot + inc combatcount + cmp combatcount,40 + jnz gotsoldframe + mov mandead,2 + jmp gotsoldframe +notaftersshot: call checkspeed + jnz gotsoldframe + inc word ptr [es:bx+3] + jmp gotsoldframe +soldierwait: cmp lastweapon,1 + jnz gotsoldframe + mov watchingtime,10 + cmp manspath,2 + jnz gotsoldframe + cmp facing,4 + jnz gotsoldframe + inc word ptr [es:bx+3] + mov lastweapon,-1 + mov combatcount,0 +gotsoldframe: call showgamereel + call addtopeoplelist + ret + + endp + + + + + + + + +Rockstar proc near + + mov ax,[es:bx+3] + cmp ax,303 + jz rockcombatend + cmp ax,118 + jz rockcombatend + call checkspeed + jnz rockspeed + + mov ax,[es:bx+3] + inc ax + cmp ax,118 + jnz notbeforedead + mov mandead,2 + jmp gotrockframe + +notbeforedead: cmp ax,79 + jnz gotrockframe + dec ax + cmp lastweapon,1 + jnz notgunonrock + mov lastweapon,-1 + mov ax,123 + jmp gotrockframe +notgunonrock: inc combatcount + cmp combatcount,40 + jnz gotrockframe + mov combatcount,0 + mov ax,79 + +gotrockframe: mov [es:bx+3],ax +rockspeed: call showgamereel + cmp word ptr [es:bx+3],78 + jnz notalkrock + call addtopeoplelist + mov pointermode,2 + mov watchingtime,0 + ret + +notalkrock: mov watchingtime,2 + mov pointermode,0 + mov al,mapy + mov [es:bx+2],al + ret + +rockcombatend: mov newlocation,45 + call showgamereel + ret + + endp + + + + + + + + + + + + + + + +Helicopter proc near + + mov ax,[es:bx+3] + cmp ax,203 + jz heliwon + ;cmp ax,53 + ;jz helicombatend + call checkspeed + jnz helispeed + + mov ax,[es:bx+3] + inc ax + cmp ax,53 + jnz notbeforehdead + inc combatcount + cmp combatcount,8 + jc waitabit + mov mandead,2 +waitabit: mov ax,49 + jmp gotheliframe + +notbeforehdead: cmp ax,9 + jnz gotheliframe + dec ax + cmp lastweapon,1 + jnz notgunonheli + mov lastweapon,-1 + mov ax,55 + jmp gotheliframe +notgunonheli: mov ax,5 + inc combatcount + cmp combatcount,20 + jnz gotheliframe + mov combatcount,0 + mov ax,9 + +gotheliframe: mov [es:bx+3],ax +helispeed: call showgamereel + mov al,mapx + mov [es:bx+1],al +helicombatend: mov ax,[es:bx+3] + cmp ax,9 ;8 + jnc notwaitingheli + cmp combatcount,7 + jc notwaitingheli + mov pointermode,2 + mov watchingtime,0 + ret +notwaitingheli: mov pointermode,0 + mov watchingtime,2 + ret + +heliwon: mov pointermode,0 + ret + + endp + + +Mugger proc near + + mov ax,[es:bx+3] + cmp ax,138 + jz endmugger1 + cmp ax,176 + jz endmugger2 + cmp ax,2 + jnz havesetwatch + mov watchingtime,175*2 +havesetwatch: call checkspeed + jnz notmugger + inc word ptr [es:bx+3] +notmugger: call showgamereel + mov al,mapx + mov [es:bx+1],al + ret + +endmugger1: push es bx + call createpanel2 + call showicon + mov al,41 + call findpuztext + mov di,33+20 + mov bx,104 + mov dl,241 + mov ah,0 + call printdirect + call worktoscreen + mov cx,300 + call hangon + pop bx es + push es bx + mov word ptr [es:bx+3],140 + mov manspath,2 + mov finaldest,2 + call findxyfrompath + mov resetmanxy,1 + mov al,"W" + mov ah,"E" + mov cl,"T" + mov ch,"A" + call findexobject + mov command,al + mov objecttype,4 + call removeobfrominv + mov al,"W" + mov ah,"E" + mov cl,"T" + mov ch,"B" + call findexobject + mov command,al + mov objecttype,4 + call removeobfrominv + call makemainscreen + mov al,48 + mov bl,68-32 + mov bh,54+64 + mov cx,70 ; time on screen + mov dx,10 ; pause before show + call setuptimeduse + mov beenmugged,1 + pop bx es + ret + +endmugger2: ret + + + endp + + + + + + + + +Aide proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + + + + + +Businessman proc near + + mov pointermode,0 + mov watchingtime,2 + mov ax,[es:bx+3] + cmp ax,2 + jnz notfirstbiz + push ax bx es + mov al,49 + mov cx,30 + mov dx,1 + mov bl,68 + mov bh,174 + call setuptimeduse + pop es bx ax + +notfirstbiz: cmp ax,95 + jz buscombatwonend + cmp ax,49 + jz buscombatend + + call checkspeed + jnz busspeed + + mov ax,[es:bx+3] + inc ax + cmp ax,48 + jnz notbeforedeadb + mov mandead,2 + jmp gotbusframe + +notbeforedeadb: cmp ax,15 + jnz buscombatwon + dec ax + cmp lastweapon,3 + jnz notshieldonbus + mov lastweapon,-1 + mov combatcount,0 + mov ax,51 + jmp gotbusframe +notshieldonbus: inc combatcount + cmp combatcount,20 + jnz gotbusframe + mov combatcount,0 + mov ax,15 + jmp gotbusframe + +buscombatwon: cmp ax,91 + jnz gotbusframe + push bx es + mov al,0 + call turnpathon + mov al,1 + call turnpathon + mov al,2 + call turnpathon + mov al,3 + call turnpathoff + mov manspath,5 + mov finaldest,5 + call findxyfrompath + mov resetmanxy,1 + pop es bx + mov ax,92 + jmp gotbusframe + +gotbusframe: mov [es:bx+3],ax +busspeed: call showgamereel + mov al,mapy + mov [es:bx+2],al + mov ax,[es:bx+3] + cmp ax,14 + jnz buscombatend + mov watchingtime,0 + mov pointermode,2 + ret + +buscombatend: ret + +buscombatwonend: mov pointermode,0 + mov watchingtime,0 + ret + + endp + + + + + + +Poolguard proc near + + mov ax,[es:bx+3] + cmp ax,214 + jz combatover2 + cmp ax,258 + jz combatover2 + cmp ax,185 + jz combatover1 + cmp ax,0 + jnz notfirstpool + mov al,0 + call turnpathon +notfirstpool: call checkspeed + jnz guardspeed + + mov ax,[es:bx+3] + inc ax + cmp ax,122 + jnz notendguard1 + dec ax + cmp lastweapon,2 + jnz notaxeonpool + mov lastweapon,-1 + mov ax,122 + jmp gotguardframe +notaxeonpool: inc combatcount + cmp combatcount,40 + jnz gotguardframe + mov combatcount,0 + mov ax,195 + jmp gotguardframe + +notendguard1: cmp ax,147 + jnz gotguardframe + dec ax + cmp lastweapon,1 + jnz notgunonpool + mov lastweapon,-1 + mov ax,147 + jmp gotguardframe +notgunonpool: inc combatcount + cmp combatcount,40 + jnz gotguardframe + mov combatcount,0 + mov ax,220 + +gotguardframe: mov [es:bx+3],ax +guardspeed: call showgamereel + mov ax,[es:bx+3] + cmp ax,121 + jz iswaitingpool + cmp ax,146 + jz iswaitingpool + mov pointermode,0 + mov watchingtime,2 + ret +iswaitingpool: mov pointermode,2 + mov watchingtime,0 + ret + +combatover1: mov watchingtime,0 + mov pointermode,0 + mov al,0 + call turnpathon + mov al,1 + call turnpathoff + ret + +combatover2: call showgamereel + mov watchingtime,2 + mov pointermode,0 + inc combatcount + cmp combatcount,100 + jc doneover2 + mov watchingtime,0 + mov mandead,2 +doneover2: ret + + endp + + + + + + + + + + +Security proc near + + cmp word ptr [es:bx+3],32 + jz securwait + cmp word ptr [es:bx+3],69 + jnz notaftersec + ret +notaftersec: mov watchingtime,10 + call checkspeed + jnz gotsecurframe + inc word ptr [es:bx+3] + jmp gotsecurframe +securwait: cmp lastweapon,1 + jnz gotsecurframe + mov watchingtime,10 + cmp manspath,9 + jnz gotsecurframe + cmp facing,0 + jnz gotsecurframe + mov lastweapon,-1 + inc word ptr [es:bx+3] +gotsecurframe: call showgamereel + call addtopeoplelist + ret + + endp + + + + + + +Heavy proc near + + mov al,[es:bx+7] + and al,127 + mov [es:bx+7],al + cmp word ptr [es:bx+3],43 + jz heavywait + mov watchingtime,10 + cmp word ptr [es:bx+3],70 + jnz notafterhshot + inc combatcount + cmp combatcount,80 + jnz gotheavyframe + mov mandead,2 + jmp gotheavyframe +notafterhshot: call checkspeed + jnz gotheavyframe + inc word ptr [es:bx+3] + jmp gotheavyframe +heavywait: cmp lastweapon,1 + jnz gotheavyframe + cmp manspath,5 + jnz gotheavyframe + cmp facing,4 + jnz gotheavyframe + mov lastweapon,-1 + inc word ptr [es:bx+3] + mov combatcount,0 +gotheavyframe: call showgamereel + call addtopeoplelist + ret + + endp + + + + +Bossman proc near + + call checkspeed + jnz notboss + mov ax,[es:bx+3] + inc ax + cmp ax,4 + jz firstdes + cmp ax,20 + jz secdes + cmp ax,41 + jnz gotallboss + mov ax,0 + inc gunpassflag + mov byte ptr [es:bx+7],10 + jmp gotallboss +firstdes: cmp gunpassflag,1 + jz gotallboss + push ax + call randomnumber + mov cl,al + pop ax + cmp cl,10 + jc gotallboss + mov ax,0 + jmp gotallboss +secdes: cmp gunpassflag,1 + jz gotallboss + mov ax,0 +gotallboss: mov [es:bx+3],ax +notboss: call showgamereel + call addtopeoplelist + + mov al,[es:bx+7] + and al,128 + jz nottalkedboss + mov talkedtoboss,1 +nottalkedboss: ret + + endp + + + + + +Gamer proc near + + call checkspeed + jnz gamerfin +gameragain: call randomnum1 + and al,7 + cmp al,5 + jnc gameragain + add al,20 + cmp al,[es:bx+3] + jz gameragain + mov ah,0 + mov [es:bx+3],ax +gamerfin: call showgamereel + call addtopeoplelist + ret + + endp + + + + + +Sparkydrip proc near + + call checkspeed + jnz cantdrip + mov al,14 + mov ah,0 + call playchannel0 +cantdrip: ret + + endp + + + +Carparkdrip proc near + + call checkspeed + jnz cantdrip2 + mov al,14 + call playchannel1 +cantdrip2: ret + + endp + + + +Keeper proc near + + cmp keeperflag,0 + jnz notwaiting + cmp reeltowatch,190 + jc waiting + inc keeperflag + mov ah,[es:bx+7] + and ah,127 + cmp ah,dreamnumber + jz notdiff + mov al,dreamnumber + mov [es:bx+7],al +notdiff: ret +notwaiting: call addtopeoplelist + call showgamereel +waiting: ret + + endp + + + +Candles1 proc near + + call checkspeed + jnz candle1 + mov ax,[es:bx+3] + inc ax + cmp ax,44 + jnz notendcandle1 + mov ax,39 +notendcandle1: mov [es:bx+3],ax +candle1: call showgamereel + ret + + endp + + + +Smallcandle proc near + + call checkspeed + jnz smallcandlef + mov ax,[es:bx+3] + inc ax + cmp ax,37 + jnz notendsmallcandle + mov ax,25 +notendsmallcandle: mov [es:bx+3],ax +smallcandlef: call showgamereel + ret + + endp + + + + + + + + + + + +Intromagic1 proc near + + call checkspeed + jnz introm1fin + mov ax,[es:bx+3] + inc ax + cmp ax,145 + jnz gotintrom1 + mov ax,121 +gotintrom1: mov [es:bx+3],ax + cmp ax,121 + jnz introm1fin + inc introcount + push es bx + call intro1text + pop bx es + cmp introcount,8 ; was 7 + jnz introm1fin + add mapy,10 + mov nowinnewroom,1 +introm1fin: call showgamereel + ret + + endp + + + + +Candles proc near + + call checkspeed + jnz candlesfin + mov ax,[es:bx+3] + inc ax + cmp ax,167 + jnz gotcandles + mov ax,162 +gotcandles: mov [es:bx+3],ax +candlesfin: call showgamereel + ret + + endp + + + +Candles2 proc near + + call checkspeed + jnz candles2fin + mov ax,[es:bx+3] + inc ax + cmp ax,238 + jnz gotcandles2 + mov ax,233 +gotcandles2: mov [es:bx+3],ax +candles2fin: call showgamereel + ret + + endp + + + +Gates proc near + + call checkspeed + jnz gatesfin + mov ax,[es:bx+3] + inc ax + cmp ax,116 + jnz notbang + push ax bx es + mov al,17 ;12 + call playchannel1 + pop es bx ax +notbang: cmp ax,110 + jc slowgates + mov byte ptr [es:bx+5],2 +slowgates: cmp ax,120 + jnz gotgates + mov getback,1 + mov ax,119 +gotgates: mov [es:bx+3],ax + push es bx + call intro3text + pop bx es +gatesfin: call showgamereel + ret + + endp + + + + +Intromagic2 proc near + + call checkspeed + jnz introm2fin + mov ax,[es:bx+3] + inc ax + cmp ax,216 + jnz gotintrom2 + mov ax,192 +gotintrom2: mov [es:bx+3],ax +introm2fin: call showgamereel + ret + + endp + + + + +Intromagic3 proc near + + call checkspeed + jnz introm3fin + mov ax,[es:bx+3] + inc ax + cmp ax,218 + jnz gotintrom3 + mov getback,1 +gotintrom3: mov [es:bx+3],ax +introm3fin: call showgamereel + mov al,mapx + mov [es:bx+1],al + ret + + endp + + + + + + + +Intromonks1 proc near + + call checkspeed + jnz intromonk1fin + mov ax,[es:bx+3] + inc ax + cmp ax,80 + jnz notendmonk1 + add mapy,10 + mov nowinnewroom,1 + call showgamereel + ret +notendmonk1: cmp ax,30 + jnz gotintromonk1 + sub mapy,10 + mov nowinnewroom,1 + mov ax,51 +gotintromonk1: mov [es:bx+3],ax + cmp ax,5 + jz waitstep + cmp ax,15 + jz waitstep + cmp ax,25 + jz waitstep + cmp ax,61 + jz waitstep + cmp ax,71 + jz waitstep + jmp intromonk1fin +waitstep: push es bx + call intro2text + pop bx es + mov byte ptr [es:bx+6],-20 +intromonk1fin: call showgamereel + mov al,mapy + mov [es:bx+2],al + ret + + endp + + + + +Intromonks2 proc near + + call checkspeed + jnz intromonk2fin + mov ax,[es:bx+3] + inc ax + cmp ax,87 + jnz nottalk1 + inc introcount + push es bx + call monks2text + pop bx es + cmp introcount,19 + jnz notlasttalk1 + mov ax,87 + jmp gotintromonk2 +notlasttalk1: mov ax,74 + jmp gotintromonk2 + +nottalk1: cmp ax,110 + jnz notraisearm + inc introcount + push es bx + call monks2text + pop bx es + if cd + if german + cmp introcount,42 + else + cmp introcount,35 + endif + else + cmp introcount,35 + endif + jnz notlastraise + mov ax,111 + jmp gotintromonk2 +notlastraise: mov ax,98 + jmp gotintromonk2 + +notraisearm: cmp ax,176 + jnz notendmonk2 + mov getback,1 + jmp gotintromonk2 +notendmonk2: cmp ax,125 + jnz gotintromonk2 + mov ax,140 +gotintromonk2: mov [es:bx+3],ax +intromonk2fin: call showgamereel + ret + + endp + + + + + +Handclap proc near + + ret + + endp + + + + + if german + if cd + +Monks2text proc near + + cmp introcount,1 + jnz notmonk2text1 + mov al,8 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text1: cmp introcount,5 + jnz notmonk2text2 + mov al,9 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text2: cmp introcount,9 + jnz notmonk2text3 + mov al,10 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text3: cmp introcount,13 + jnz notmonk2text4 + mov introcount,14 + mov al,11 + mov bl,0 + mov bh,105 + mov cx,100 + jmp gotmonks2text +notmonk2text4: cmp introcount,19 + jnz notmonk2text7 + mov al,14 + mov bl,36 + mov bh,160 + mov cx,100 ;32 + mov dx,1 + mov ah,82 + jmp setuptimedtemp +notmonk2text7: cmp introcount,23 + jnz notmonk2text8 + mov al,15 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text8: cmp introcount,27 + jnz notmonk2text9 + mov al,16 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text9: cmp introcount,30 + jnz notmonk2text10 + mov al,17 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text10: cmp introcount,35 + jnz notmonk2text11 + mov al,18 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text11: ret + +gotmonks2text: mov dx,1 + mov cx,120 + mov ah,82 + call setuptimedtemp + ret + + endp + + else + +Monks2text proc near + + cmp introcount,1 + jnz notmonk2text1 + mov al,8 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text1: cmp introcount,4 + jnz notmonk2text2 + mov al,9 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text2: cmp introcount,7 + jnz notmonk2text3 + mov al,10 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text3: cmp introcount,10 + jnz notmonk2text4 + if cd + mov introcount,12 + endif + mov al,11 + mov bl,0 + mov bh,105 + mov cx,100 + jmp gotmonks2text +notmonk2text4: cmp introcount,13 + jnz notmonk2text5 + if cd + mov introcount,17; 18 + ret + endif + mov al,12 + mov bl,0 + mov bh,120 + mov cx,100 + jmp gotmonks2text +notmonk2text5: cmp introcount,16 + jnz notmonk2text6 + mov al,13 + mov bl,0 + mov bh,135 + mov cx,100 + jmp gotmonks2text +notmonk2text6: cmp introcount,19 + jnz notmonk2text7 + mov al,14 + mov bl,36 + mov bh,160 + mov cx,100 ;32 + mov dx,1 + mov ah,82 + jmp setuptimedtemp +notmonk2text7: cmp introcount,22 + jnz notmonk2text8 + mov al,15 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text8: cmp introcount,25 + jnz notmonk2text9 + mov al,16 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text9: if cd + cmp introcount,27 + else + cmp introcount,28 + endif + jnz notmonk2text10 + mov al,17 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text10: cmp introcount,31 + jnz notmonk2text11 + mov al,18 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text11: ret + +gotmonks2text: mov dx,1 + mov cx,120 + mov ah,82 + call setuptimedtemp + ret + + endp + + + endif + else + +Monks2text proc near + + cmp introcount,1 + jnz notmonk2text1 + mov al,8 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text1: cmp introcount,4 + jnz notmonk2text2 + mov al,9 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text2: cmp introcount,7 + jnz notmonk2text3 + mov al,10 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text3: cmp introcount,10 + jnz notmonk2text4 + if cd + mov introcount,12 + endif + mov al,11 + mov bl,0 + mov bh,105 + mov cx,100 + jmp gotmonks2text +notmonk2text4: cmp introcount,13 + jnz notmonk2text5 + if cd + mov introcount,17; 18 + ret + endif + mov al,12 + mov bl,0 + mov bh,120 + mov cx,100 + jmp gotmonks2text +notmonk2text5: cmp introcount,16 + jnz notmonk2text6 + mov al,13 + mov bl,0 + mov bh,135 + mov cx,100 + jmp gotmonks2text +notmonk2text6: cmp introcount,19 + jnz notmonk2text7 + mov al,14 + mov bl,36 + mov bh,160 + mov cx,100 ;32 + mov dx,1 + mov ah,82 + jmp setuptimedtemp +notmonk2text7: cmp introcount,22 + jnz notmonk2text8 + mov al,15 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text8: cmp introcount,25 + jnz notmonk2text9 + mov al,16 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text9: if cd + cmp introcount,27 + else + cmp introcount,28 + endif + jnz notmonk2text10 + mov al,17 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text10: cmp introcount,31 + jnz notmonk2text11 + mov al,18 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text11: ret + +gotmonks2text: mov dx,1 + mov cx,120 + mov ah,82 + call setuptimedtemp + ret + + endp + + endif + + + + + + +Intro1text proc near + + cmp introcount,2 + jnz notintro1text1 + mov al,40 + mov bl,34 + mov bh,130 + mov cx,90 + jmp gotintro1text +notintro1text1: cmp introcount,4 + jnz notintro1text2 + mov al,41 + mov bl,34 + mov bh,130 + mov cx,90 + jmp gotintro1text +notintro1text2: cmp introcount,6 + jnz notintro1text3 + mov al,42 + mov bl,34 + mov bh,130 + mov cx,90 + jmp gotintro1text +notintro1text3: ret + +gotintro1text: mov dx,1 + mov ah,82 + if cd + cmp ch1playing,255 + jz oktalk2 + dec introcount + ret + endif +oktalk2: call setuptimedtemp + ret + + endp + + + +Intro2text proc near + + cmp ax,5 + jnz notintro2text1 + mov al,43 + mov bl,34 + mov bh,40 + mov cx,90 + jmp gotintro2text +notintro2text1: cmp ax,15 + jnz notintro2text2 + mov al,44 + mov bl,34 + mov bh,40 + mov cx,90 + jmp gotintro2text +notintro2text2: ret + +gotintro2text: mov dx,1 + mov ah,82 + call setuptimedtemp + ret + + endp + + + + + + +Intro3text proc near + + cmp ax,107 + jnz notintro3text1 + mov al,45 + mov bl,36 + mov bh,56 + mov cx,100 + jmp gotintro3text +notintro3text1: if cd + cmp ax,108 + else + cmp ax,109 + endif + jnz notintro3text2 + mov al,46 + mov bl,36 + mov bh,56 + mov cx,100 + jmp gotintro3text +notintro3text2: ret + +gotintro3text: mov dx,1 + mov ah,82 + call setuptimedtemp + ret + + endp + + + + + + + +Monkandryan proc near + + call checkspeed + jnz notmonkryan + mov ax,[es:bx+3] + inc ax + cmp ax,83 + jnz gotmonkryan + inc introcount + push es bx + call textformonk + pop bx es + mov ax,77 + cmp introcount,57 + jnz gotmonkryan + mov getback,1 + ret +gotmonkryan: mov [es:bx+3],ax +notmonkryan: call showgamereel + ret + + endp + + + + + +Endgameseq proc near + + call checkspeed + jnz notendseq + mov ax,[es:bx+3] + inc ax + cmp ax,51 + jnz gotendseq + cmp introcount,140 + jz gotendseq + inc introcount + push es bx + call textforend + pop bx es + mov ax,50 +gotendseq: mov [es:bx+3],ax + cmp ax,134 + jnz notfadedown + push es bx ax + call fadescreendownhalf + pop ax bx es + jmp notendseq +notfadedown: cmp ax,324 + jnz notfadeend + push es bx ax + call fadescreendowns + mov volumeto,7 + mov volumedirection,1 + pop ax bx es +notfadeend: cmp ax,340 + jnz notendseq + mov getback,1 +notendseq: call showgamereel + mov al,mapy + mov [es:bx+2],al + mov ax,[es:bx+3] + cmp ax,145 + jnz notendcreds + mov word ptr [es:bx+3],146 + call rollendcredits +notendcreds: ret + + endp + + + + + + +Rollendcredits proc near + + mov al,16 + mov ah,255 + call playchannel0 + mov volume,7 + mov volumeto,0 + mov volumedirection,-1 + + mov cl,160 + mov ch,160 + mov di,75 + mov bx,20 + mov ds,mapstore + mov si,0 + call multiget + + mov es,textfile1 + mov si,3*2 + mov ax,[es:si] + mov si,ax + add si,textstart + + mov cx,254 +endcredits1: push cx + + mov bx,10 + mov cx,linespacing +endcredits2: push cx si di es bx + + call vsync + mov cl,160 + mov ch,160 + mov di,75 + mov bx,20 + mov ds,mapstore + mov si,0 + call multiput + call vsync + pop bx es di si + push si di es bx + + mov cx,18 +onelot: push cx + mov di,75 + mov dx,161 + mov ax,0 + call printdirect + add bx,linespacing + pop cx + loop onelot + + call vsync + mov cl,160 + mov ch,160 + mov di,75 + mov bx,20 + call multidump + + pop bx es di si cx + dec bx + loop endcredits2 + pop cx +looknext: mov al,[es:si] + inc si + cmp al,":" + jz gotnext + cmp al,0 + jz gotnext + jmp looknext +gotnext: loop endcredits1 + + mov cx,100 + call hangon + call paneltomap + call fadescreenuphalf + ret + + endp + + + + + + +Priest proc near + + cmp word ptr [es:bx+3],8 + jz priestspoken + mov pointermode,0 + mov watchingtime,2 + call checkspeed + jnz priestwait + inc word ptr [es:bx+3] + push es bx + call priesttext + pop bx es +priestwait: ret + +priestspoken: ret + + endp + + + + + + +Madmanstelly proc near + + mov ax,[es:bx+3] + inc ax + cmp ax,307 + jnz notendtelly + mov ax,300 +notendtelly: mov [es:bx+3],ax + call showgamereel + ret + + endp + + + + + +Madman proc near + + mov watchingtime,2 + call checkspeed + jnz nomadspeed + mov ax,[es:bx+3] + cmp ax,364 + jnc ryansded + cmp ax,10 + jnz notfirstmad + push es bx ax + mov dx,offset cs:introtextname + call loadtemptext + pop ax bx es + mov combatcount,-1 + mov speechcount,0 +notfirstmad: inc ax + cmp ax,294 + jz madmanspoken + cmp ax,66 + jnz nomadspeak + inc combatcount + push es bx + call madmantext + pop bx es + mov ax,53 + if cd + cmp combatcount,64 + else + cmp combatcount,62 + endif + jc nomadspeak + if cd + cmp combatcount,70 + else + cmp combatcount,68 + endif + jz killryan + cmp lastweapon,8 + jnz nomadspeak + if cd + mov combatcount,72 + else + mov combatcount,70 + endif + mov lastweapon,-1 + mov madmanflag,1 + mov ax,67 + jmp nomadspeak +killryan: mov ax,310 +nomadspeak: mov [es:bx+3],ax +nomadspeed: call showgamereel + mov al,mapx + mov [es:bx+1],al + call madmode + ret +madmanspoken: cmp wongame,1 + jz alreadywon + mov wongame,1 + push es bx + call getridoftemptext + pop bx es +alreadywon: ret + +ryansded: mov mandead,2 + call showgamereel + ret + + endp + + + + + + + + + + if cd +Madmantext proc near + + cmp speechcount,63 + jnc nomadtext + cmp ch1playing,255 + jnz nomadtext + + mov al,speechcount + inc speechcount + add al,47 + mov bl,72 + mov bh,80 + mov cx,90 + mov dx,1 + mov ah,82 + call setuptimedtemp +nomadtext: ret + + endp + + else + +Madmantext proc near + + cmp combatcount,61 + jnc nomadtext + mov al,combatcount + and al,3 + jnz nomadtext + mov al,combatcount + shr al,1 + shr al,1 + add al,47 + mov bl,72 + mov bh,80 + mov cx,90 + mov dx,1 + mov ah,82 + call setuptimedtemp +nomadtext: ret + + endp + endif + + + + +Madmode proc near + + mov watchingtime,2 + mov pointermode,0 + if cd + cmp combatcount,65 + else + cmp combatcount,63 + endif + jc iswatchmad + if cd + cmp combatcount,70 + else + cmp combatcount,68 + endif + jnc iswatchmad + mov pointermode,2 +iswatchmad: ret + + endp + + + + + +Priesttext proc near + + cmp word ptr [es:bx+3],2 + jc nopriesttext + cmp word ptr [es:bx+3],7 + jnc nopriesttext + mov al,[es:bx+3] + and al,1 + jnz nopriesttext + mov al,[es:bx+3] + shr al,1 + add al,50 + mov bl,72 + mov bh,80 + mov cx,54 + mov dx,1 + call setuptimeduse +nopriesttext: ret + + endp + + + + +Textforend proc near + + cmp introcount,20 + jnz notendtext1 + mov al,0 + mov bl,34 + mov bh,20 + mov cx,60 + jmp gotendtext +notendtext1: if cd + cmp introcount,50 + else + cmp introcount,65 + endif + jnz notendtext2 + mov al,1 + mov bl,34 + mov bh,20 + mov cx,60 + jmp gotendtext +notendtext2: if cd + cmp introcount,85 + else + cmp introcount,110 + endif + jnz notendtext3 + mov al,2 + mov bl,34 + mov bh,20 + mov cx,60 + jmp gotendtext +notendtext3: ret + +gotendtext: mov dx,1 + mov ah,83 + call setuptimedtemp + ret + + endp + + + + + + + + +Textformonk proc near + + cmp introcount,1 + jnz notmonktext1 + mov al,19 + mov bl,68 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext1: cmp introcount,5 + jnz notmonktext2 + mov al,20 + mov bl,68 + mov bh,38 + mov cx,120 + jmp gotmonktext +notmonktext2: cmp introcount,9 + jnz notmonktext3 + mov al,21 + mov bl,48 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext3: cmp introcount,13 + jnz notmonktext4 + mov al,22 + mov bl,68 + mov bh,38 + mov cx,120 + jmp gotmonktext +notmonktext4: if cd + cmp introcount,15 + else + cmp introcount,17 + endif + jnz notmonktext5 + mov al,23 + mov bl,68 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext5: cmp introcount,21 + jnz notmonktext6 + mov al,24 + mov bl,68 + mov bh,38 + mov cx,120 + jmp gotmonktext +notmonktext6: cmp introcount,25 + jnz notmonktext7 + mov al,25 + mov bl,68 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext7: cmp introcount,29 + jnz notmonktext8 + mov al,26 + mov bl,68 + mov bh,38 + mov cx,120 + jmp gotmonktext +notmonktext8: cmp introcount,33 + jnz notmonktext9 + mov al,27 + mov bl,68 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext9: cmp introcount,37 + jnz notmonktext10 + mov al,28 + mov bl,68 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext10: cmp introcount,41 + jnz notmonktext11 + mov al,29 + mov bl,68 + mov bh,38 + mov cx,120 + jmp gotmonktext +notmonktext11: cmp introcount,45 + jnz notmonktext12 + mov al,30 + mov bl,68 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext12: if cd + cmp introcount,52 + else + cmp introcount,49 + endif + jnz notmonktext13 + mov al,31 + mov bl,68 + mov bh,154 + mov cx,220 ;132 + jmp gotmonktext +notmonktext13: cmp introcount,53 + jnz notendtitles + call fadescreendowns + if cd + mov volumeto,7 + mov volumedirection,1 + endif +notendtitles: ret + +gotmonktext: mov dx,1 + mov ah,82 + if cd + cmp ch1playing,255 + jz oktalk + dec introcount + ret + endif +oktalk: call setuptimedtemp + ret + + endp + + + + + + + + + + +Drunk proc near + + cmp generaldead,0 + jnz trampgone + mov al,[es:bx+7] + and al,127 + mov [es:bx+7],al + call showgamereel + call addtopeoplelist +trampgone: ret + + endp + + +Advisor proc near + + call checkspeed + jnz noadvisor + jmp noadvisor + mov ax,[es:bx+3] + inc ax + cmp ax,123 + jnz notendadvis + mov ax,106 + jmp gotadvframe +notendadvis: cmp ax,108 + jnz gotadvframe + push ax + call randomnumber + mov cl,al + pop ax + cmp cl,3 + jc gotadvframe + mov ax,106 +gotadvframe: mov [es:bx+3],ax +noadvisor: call showgamereel + call addtopeoplelist + ret + + endp + + + +Copper proc near + + call checkspeed + jnz nocopper + mov ax,[es:bx+3] + inc ax + cmp ax,94 + jnz notendcopper + mov ax,64 + jmp gotcopframe +notendcopper: cmp ax,81 + jz mightwait + cmp ax,66 + jnz gotcopframe +mightwait: push ax + call randomnumber + mov cl,al + pop ax + cmp cl,7 + jc gotcopframe + dec ax +gotcopframe: mov [es:bx+3],ax +nocopper: call showgamereel + call addtopeoplelist + ret + + endp + + + + + + + + + + +Sparky proc near + + cmp card1money,0 + jz animsparky + mov byte ptr [es:bx+7],3 + jmp animsparky + +animsparky: call checkspeed + jnz finishsparky + cmp word ptr [es:bx+3],34 + jnz notsparky1 + call randomnumber + cmp al,30 + jc dosparky + mov word ptr [es:bx+3],27 + jmp finishsparky + +notsparky1: cmp word ptr [es:bx+3],48 + jnz dosparky + mov word ptr [es:bx+3],27 + jmp finishsparky + +dosparky: inc word ptr [es:bx+3] +finishsparky: call showgamereel + call addtopeoplelist + + mov al,[es:bx+7] + and al,128 + jz nottalkedsparky + mov talkedtosparky,1 +nottalkedsparky: ret + + endp + + + + + +Train proc near + + ret + mov ax,[es:bx+3] + cmp ax,21 + jnc notrainyet + inc ax + jmp gottrainframe +notrainyet: call randomnumber + cmp al,253 + jc notrainatall + cmp manspath,5 + jnz notrainatall + cmp finaldest,5 + jnz notrainatall + mov ax,5 +gottrainframe: mov [es:bx+3],ax + call showgamereel +notrainatall: ret + + endp + + + + + + + +Addtopeoplelist proc near + + push es bx bx + mov cl,[es:bx+7] + mov ax,[es:bx+3] + mov bx,listpos + mov es,buffers + mov [es:bx],ax ;reel pointer position + pop ax + mov [es:bx+2],ax + mov [es:bx+4],cl ;coversation number + pop bx es + add listpos,5 + ret + + endp + + + +Showgamereel proc near + + mov ax,[es:bx+3] + cmp ax,512 + jnc noshow + mov reelpointer,ax + push es bx + call plotreel + pop bx es + mov ax,reelpointer + mov [es:bx+3],ax +noshow: ret + + endp + + + + + + +Checkspeed proc near + + cmp lastweapon,-1 + jnz forcenext + inc byte ptr [es:bx+6] + mov al,[es:bx+6] + cmp al,[es:bx+5] + jnz notspeed + mov al,0 + mov [es:bx+6],al + cmp al,al +notspeed: ret + +forcenext: cmp al,al + ret + + endp + + + + + + + + + + +;------------------------------------------------------------Sprite Routines---- + + + +Clearsprites proc near + + mov es,buffers + mov di,spritetable + mov al,255 + mov cx,tablesize*16 + rep stosb + ret + + endp + + + + +Makesprite proc near ;si holds x,y cx holds update + ;di,dx holds data offset,seg + mov es,buffers + mov bx,spritetable +$17: cmp byte ptr [es:bx+15],255 + jz $17a + add bx,tablesize + jmp $17 + +$17a: mov [es:bx],cx + mov [es:bx+10],si + mov [es:bx+6],dx + mov [es:bx+8],di + mov [es:bx+2],0ffffh + mov byte ptr [es:bx+15],0 + mov byte ptr [es:bx+18],0 + ret + + endp + + + + + + + + + + +Delsprite proc near + + mov di,bx + mov cx,tablesize + mov al,255 + rep stosb + ret + + endp + + + + + + + + + + +Spriteupdate proc near + + mov es,buffers + mov bx,spritetable + mov al,ryanon + mov byte ptr [es:bx+31],al + + mov es,buffers + mov bx,spritetable + mov cx,16 +$18: push cx bx + mov ax,[es:bx] + cmp ax,0ffffh + jz $18a + push es ds + mov cx,[es:bx+2] + mov [es:bx+24],cx + call ax + pop ds es +$18a: pop bx cx + cmp nowinnewroom,1 + jz $18b + add bx,tablesize + loop $18 + +$18b: ret + + endp + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Printsprites proc near + + mov es,buffers + mov cx,0 +priorityloop: push cx + mov priority,cl + mov bx,spritetable + mov cx,16 +prtspriteloop: push cx bx + mov ax,[es:bx] + cmp ax,0ffffh + jz skipsprite + mov al,priority + cmp al,[es:bx+23] + jnz skipsprite + cmp byte ptr [es:bx+31],1 + jz skipsprite + call printasprite +skipsprite: pop bx cx + add bx,tablesize + loop prtspriteloop + pop cx + inc cx + cmp cx,7 + jnz priorityloop + ret + + endp + + + + + + + + + + +Printasprite proc near + + push es bx + mov si,bx + mov ds,[es:si+6] + mov al,[es:si+11] + mov ah,0 + cmp al,220 + jc notnegative1 + mov ah,255 +notnegative1: mov bx,ax + add bx,mapady + mov al,[es:si+10] + mov ah,0 + cmp al,220 + jc notnegative2 + mov ah,255 +notnegative2: mov di,ax + add di,mapadx + mov al,[es:si+15] + mov ah,0 + cmp byte ptr [es:si+30],0 + jz steadyframe + mov ah,8 +steadyframe: cmp priority,6 + jnz notquickp +notquickp: call showframe + pop bx es + ret + + endp + + + + +;cmp priority,6 +; ;jz quicksprite ; WIll NEED TO DO THIS LATER!!!!! +;Quicksprite: mov cl,al +; mov ch,0 +; mov dx,[es:bx+6] +; mov es,workspace +; mov ds,dx +; mov bx,ax +; mov dx,vgawidth +; +;printquickloop: push di si +; +; push si +; add si,cx +; dec si +; jmp startzero +;zeroloop: dec si +; dec cl +;startzero: cmp [si],ch +; jz zeroloop +; pop si +; +;;printquickline: cmp [si],ch +; jnz foundfirstpix +; inc si +; inc di +; dec cl +; jnz printquickline +; +;foundfirstpix: cmp cl,0 +; jz finquickspr +; rep movsb +; +;finquickspr: pop si di +; mov cl,bl +; add si,cx +; add di,dx +; dec bh +; jnz printquickloop +; +; pop bx ds es +; ret + + + + + + + +;Calcframe proc near +; +; ret +; +; mov al,[es:bx+15] +; mov ah,0 +; mov cx,6 +; mul cx +; add ax,[es:bx+8] +; +; mov dx,[es:bx+6] +; push bx +; mov ds,dx +; mov bx,ax +; mov ax,[bx] +; mov cx,[bx+2] +; mov dx,[bx+4] +; pop bx +; mov [es:bx+2],ax +; add cx,[es:bx+8] +; add cx,2080 +; mov [es:bx+4],cx ;calculates frame data +; +; mov al,[es:bx+10] ;this bit calculates the actual +; add al,dl ;x and y (including any offset) +; mov [es:bx+12],al +; mov al,[es:bx+11] +; add al,dh +; mov [es:bx+13],al +; ret +; +; endp + + + + + + + + + + + + + + + + + + + + +Checkone proc near ;cx=x,y to check + + push cx + mov al,ch + mov ah,0 + mov cl,4 + shr ax,cl + mov dl,al + pop cx + mov al,cl + mov ah,0 + mov cl,4 + shr ax,cl + mov ah,dl ; al,ah holds x,y in blocks + + push ax + mov ch,0 + mov cl,al + push cx + mov al,ah + mov ah,0 + mov cx,11 + mul cx + pop cx + add ax,cx + + mov cx,3 + mul cx + mov si,ax + + mov ds,buffers + add si,mapflags + lodsw + mov cx,ax + lodsb + pop dx + ret + + + endp + + + + + + + + + + + + + + + + + + +Findsource proc near + + mov ax,currentframe + cmp ax,160 + jnc over1000 + mov ds,reel1 + mov takeoff,0 + ret +over1000: cmp ax,320 + jnc over1001 + mov ds,reel2 + mov takeoff,160 + ret +over1001: mov ds,reel3 + mov takeoff,320 + ret + + endp + + + + + + + + + + + +;---------------------------------------------------------Routines for Ryan---- + + +Initman proc near + + ;mov linepointer,254 + mov al,ryanx + mov ah,ryany + mov si,ax + mov cx,offset cs:mainman + mov dx,mainsprites + mov di,0 + call makesprite + mov byte ptr [es:bx+23],4 + mov byte ptr [es:bx+22],0 + mov byte ptr [es:bx+29],0 + ret + + endp + + + + + + + +Mainman proc near + + cmp resetmanxy,1 + jnz notinnewroom + mov resetmanxy,0 + mov al,ryanx + mov ah,ryany + mov [es:bx+10],ax + mov byte ptr [es:bx+29],0 + jmp executewalk +notinnewroom: dec byte ptr [es:bx+22] + cmp byte ptr [es:bx+22],-1 + jz executewalk + ret + + +executewalk: mov byte ptr [es:bx+22],0 ; speed + mov al,turntoface + cmp al,facing + jz facingok + call aboutturn + jmp notwalk + +facingok: cmp turndirection,0 + jz alreadyturned + cmp linepointer,254 + jnz alreadyturned + mov reasseschanges,1 + mov al,facing + cmp al,leavedirection + jnz alreadyturned + call checkforexit +alreadyturned: mov turndirection,0 + cmp linepointer,254 + jnz walkman + mov byte ptr [es:bx+29],0 + jmp notwalk + +walkman: mov al,[es:bx+29] + inc al + cmp al,11 + jnz notanimend1 + mov al,1 +notanimend1: mov [es:bx+29],al + + call walking + cmp linepointer,254 + jz afterwalk + + mov al,facing + and al,1 + jz isdouble + mov al,[es:bx+29] + cmp al,2 + jz afterwalk + cmp al,7 + jz afterwalk +isdouble: call walking +afterwalk: cmp linepointer,254 + jnz notwalk + mov al,turntoface + cmp al,facing + jnz notwalk + mov reasseschanges,1 + mov al,facing + cmp al,leavedirection + jnz notwalk + call checkforexit + +notwalk: mov al,facing + mov ah,0 + mov di,offset cs:facelist + add di,ax + mov al,[cs:di] + add al,[es:bx+29] + mov [es:bx+15],al + mov ax,[es:bx+10] + mov ryanx,al + mov ryany,ah + ret + +facelist: db 0,60,33,71,11,82,22,93 + + endp + + + + + + + + + + +Aboutturn proc near + + cmp turndirection,1 + jz incdir + cmp turndirection,-1 + jz decdir + mov al,facing + sub al,turntoface + jnc higher + neg al + cmp al,4 + jnc decdir + jmp incdir +higher: cmp al,4 + jnc incdir + jmp decdir + +incdir: mov turndirection,1 + mov al,facing + inc al + and al,7 + mov facing,al + mov byte ptr [es:bx+29],0 + ret + +decdir: mov turndirection,-1 + mov al,facing + dec al + and al,7 + mov facing,al + mov byte ptr [es:bx+29],0 + ret + + endp + + + + + + + + +Walking proc near + + cmp linedirection,0 + jz normalwalk + mov al,linepointer + dec al + mov linepointer,al + cmp al,200 + jnc endofline + jmp continuewalk + +normalwalk: mov al,linepointer + inc al + mov linepointer,al + cmp al,linelength + jnc endofline + +continuewalk: mov ah,0 + add ax,ax + push es bx + mov dx,seg linedata + mov es,dx + mov bx,offset es:linedata + add bx,ax + mov ax,[es:bx] + pop bx es +stillline: mov [es:bx+10],ax + ret + +endofline: mov linepointer,254 + mov al,destination + mov manspath,al + cmp al,finaldest + jz finishedwalk + mov al,finaldest + mov destination,al + push es bx + call autosetwalk + pop bx es + ret + +finishedwalk: call facerightway + ret + + endp + + + + + + + +Facerightway proc near + + push es bx ;Face object when finished + call getroomspaths ;walking + mov al,manspath + mov ah,0 + add ax,ax + add ax,ax + add ax,ax + add bx,ax + mov al,[es:bx+7] + mov turntoface,al + mov leavedirection,al + pop bx es + ret + + endp + + + + + + + +Checkforexit proc near + + mov cl,ryanx ;look under feet to see if + add cl,12 ;any flags are there + mov ch,ryany + add ch,12 + call checkone + mov lastflag,cl + mov lastflagex,ch + mov flagx,dl + mov flagy,dh + mov al,lastflag + + test al,64 + jz notnewdirect + mov al,lastflagex + mov autolocation,al + ret + +notnewdirect: test al,32 + jz notleave + push es bx + cmp reallocation,2 + jnz notlouis + mov bl,0 + push bx + mov al,"W" + mov ah,"E" + mov cl,"T" + mov ch,"A" + call isryanholding + pop bx + jz noshoe1 + inc bl +noshoe1: push bx + mov al,"W" + mov ah,"E" + mov cl,"T" + mov ch,"B" + call isryanholding + pop bx + jz noshoe2 + inc bl +noshoe2: cmp bl,2 + jz notlouis + mov al,42 + cmp bl,0 + jz notravmessage + inc al +notravmessage: mov cx,80 + mov dx,10 + mov bl,68 + mov bh,64 + call setuptimeduse + mov al,facing + add al,4 + and al,7 + mov turntoface,al + pop bx es + ret + +notlouis: pop bx es + mov needtotravel,1 + ret + + + +notleave: test al,4 + jz notaleft + call adjustleft + ret + +notaleft: test al,2 + jz notaright + call adjustright + ret + +notaright: test al,8 + jz notadown + call adjustdown + ret + +notadown: test al,16 + jz notanup + call adjustup + ret + +notanup: ret + + endp + + + + + +Adjustdown proc near + + push es bx + add mapy,10 + mov al,lastflagex + mov cl,16 + mul cl + mov [es:bx+11],al + mov nowinnewroom,1 + pop bx es + ret + + endp + + + + +Adjustup proc near + + push es bx + sub mapy,10 + mov al,lastflagex + mov cl,16 + mul cl + mov [es:bx+11],al + mov nowinnewroom,1 + pop bx es + ret + + endp + + + + + +Adjustleft proc near + + push es bx + mov lastflag,0 + sub mapx,11 + mov al,lastflagex + mov cl,16 + mul cl + mov [es:bx+10],al + mov nowinnewroom,1 + pop bx es + ret + + endp + + + + + + +Adjustright proc near + + push es bx + add mapx,11 + mov al,lastflagex + mov cl,16 + mul cl + sub al,2 + mov [es:bx+10],al + mov nowinnewroom,1 + pop bx es + ret + + endp + + + + + +Reminders proc nar + + cmp reallocation,24 + jnz notinedenslift + cmp mapx,44 + jnz notinedenslift + cmp progresspoints,0 + jnz notfirst + mov al,"D" + mov ah,"K" + mov cl,"E" + mov ch,"Y" + call isryanholding + jz forgotone + mov al,"C" + mov ah,"S" + mov cl,"H" + mov ch,"R" + call findexobject + cmp al,numexobjects + jz forgotone + mov ax,[es:bx+2] + cmp al,4 + jnz forgotone ;card is in inventory + cmp ah,255 + jz havegotcard ;card must be in an ex + mov cl,"P" ;object + mov ch,"U" + mov dl,"R" + mov dh,"S" + xchg al,ah + call compare + jnz forgotone ;is it in wallet? +havegotcard: inc progresspoints +notfirst: ret + +forgotone: mov al,50 ;message number + mov bl,54 ;x pos of message + mov bh,70 ;and y pos + mov cx,48 ;time on screen + mov dx,8 ;pause before show + call setuptimeduse + ret +notinedenslift: ret + + endp + + + + + +;--------------------------------------------------------------------------- +; +; Sprite update routines for rain effect +; +;--------------------------------------------------------------------------- + + + + +Initrain proc near + + mov es,buffers + mov di,rainlist + mov bx,offset cs:rainlocations +checkmorerain: mov al,[cs:bx] + cmp al,255 + jz finishinitrain + cmp al,reallocation + jnz checkrain + mov al,[cs:bx+1] + cmp al,mapx + jnz checkrain + mov al,[cs:bx+2] + cmp al,mapy + jnz checkrain + mov al,[cs:bx+3] + mov rainspace,al + jmp dorain +checkrain: add bx,4 + jmp checkmorerain + +dorain: mov cx,4 +initraintop: call randomnumber + and al,31 + add al,3 + cmp al,rainspace + jnc initraintop + add cl,al + cmp cl,mapxsize + jnc initrainside + push cx + call splitintolines + pop cx + jmp initraintop + +initrainside: mov cl,mapxsize + dec cl +initrainside2: call randomnumber + and al,31 + add al,3 + cmp al,rainspace + jnc initrainside2 + add ch,al + cmp ch,mapysize + jnc finishinitrain + push cx + call splitintolines + pop cx + jmp initrainside2 +finishinitrain: mov al,255 + stosb + ret + +rainlocations: db 1,44,10,16 ;location,map x,y,seed + db 4,11,30,14 + db 4,22,30,14 + db 3,33,10,14 + db 10,33,30,14 + db 10,22,30,24 + db 9,22,10,14 + db 2,33,0,14 + db 2,22,0,14 + db 6,11,30,14 + db 7,11,20,18 + db 7,0,20,18 + db 7,0,30,18 + db 55,44,0,14 + db 5,22,30,14 + + db 8,0,10,18 + db 8,11,10,18 + db 8,22,10,18 + db 8,33,10,18 + db 8,33,20,18 + db 8,33,30,18 + db 8,33,40,18 + db 8,22,40,18 + db 8,11,40,18 + + db 21,44,20,18 + db 255 + + endp + + + + + + + + + + +Splitintolines proc near + + +lookforlinestart: call getblockofpixel + cmp al,0 + jnz foundlinestart + dec cl + inc ch + cmp cl,0 + jz endofthisline + cmp ch,mapysize + jnc endofthisline + jmp lookforlinestart + +foundlinestart: mov [es:di],cx + mov bh,1 +lookforlineend: call getblockofpixel + cmp al,0 + jz foundlineend + dec cl + inc ch + cmp cl,0 + jz foundlineend + cmp ch,mapysize + jnc foundlineend + inc bh + jmp lookforlineend + +foundlineend: push cx + mov [es:di+2],bh + call randomnumber + mov [es:di+3],al + call randomnumber + mov [es:di+4],al + call randomnumber + and al,3 + add al,4 + mov [es:di+5],al + add di,6 + pop cx + cmp cl,0 + jz endofthisline + cmp ch,mapysize + jnc endofthisline + jmp lookforlinestart + +endofthisline: ret + + endp + + + + +Getblockofpixel proc near + + push cx es di + mov ax,mapxstart + add cl,al + mov ax,mapystart + add ch,al + call checkone + and cl,1 + jnz failrain + pop di es cx + ret +failrain: pop di es cx + mov al,0 + ret + + endp + + + + +Showrain proc near + + mov ds,mainsprites + mov si,6*58 + mov ax,[si+2] + mov si,ax + add si,2080 + + mov bx,rainlist + mov es,buffers + cmp byte ptr [es:bx],255 + jz nothunder + +morerain: mov es,buffers + cmp byte ptr [es:bx],255 + jz finishrain + + mov al,[es:bx+1] + mov ah,0 + add ax,mapady + add ax,mapystart + mov cx,320 + mul cx + mov cl,[es:bx] + mov ch,0 + add ax,cx + add ax,mapadx + add ax,mapxstart + mov di,ax + + mov cl,[es:bx+2] + mov ch,0 + mov ax,[es:bx+3] + mov dl,[es:bx+5] + mov dh,0 + sub ax,dx + and ax,511 + mov [es:bx+3],ax + add bx,6 + + push si + add si,ax + mov es,workspace + mov ah,0 + mov dx,320-2 +rainloop: lodsb + cmp al,ah + jz noplot + stosb + add di,dx + loop rainloop + pop si + jmp morerain +noplot: add di,320-1 + loop rainloop + pop si + jmp morerain + +finishrain: cmp ch1blockstocopy,0 + jnz nothunder + cmp reallocation,2 + jnz notlouisthund + cmp beenmugged,1 + jnz nothunder +notlouisthund: cmp reallocation,55 + jz nothunder + call randomnum1 + cmp al,1 + jnc nothunder + mov al,7 + cmp ch0playing,6 + jz isthunder1 + mov al,4 +isthunder1: call playchannel1 +nothunder: ret + + endp + + + + + + + +;--------------------------------------------------------------------------- +; +; Sprite update routines for background objects +; +;--------------------------------------------------------------------------- + + + + + + +Backobject proc near + + mov ds,setdat + mov di,[es:bx+20] + + mov al,[es:bx+18] + cmp al,0 + jz $48z + dec al + mov [es:bx+18],al + jmp finishback + +$48z: mov al,[di+7] + mov [es:bx+18],al + mov al,[di+8] + cmp al,6 + jnz notwidedoor + call widedoor + jmp finishback + +notwidedoor: cmp al,5 + jnz notrandom + call random + jmp finishback + +notrandom: cmp al,4 + jnz notlockdoor + call lockeddoorway + jmp finishback + +notlockdoor: cmp al,3 + jnz notlift + call liftsprite + jmp finishback + +notlift: cmp al,2 + jnz notdoor + call doorway + jmp finishback + +notdoor: cmp al,1 + jnz steadyob + call constant + jmp finishback + +steadyob: call steady + +finishback: ;call calcframe + ret + + endp + + + + + + + + + +Liftsprite proc near + + mov al,liftflag + cmp al,0 + jz liftclosed + cmp al,1 + jz liftopen + cmp al,3 + jz openlift + + mov al,[es:bx+19] + cmp al,0 + jz finishclose + dec al + cmp al,11 + jnz pokelift + push ax + mov al,3 + call liftnoise + pop ax + jmp pokelift +finishclose: mov liftflag,0 + ret + +openlift: mov al,[es:bx+19] + cmp al,12 + jz endoflist + inc al + cmp al,1 + jnz pokelift + push ax + mov al,2 + call liftnoise + pop ax +pokelift: mov [es:bx+19],al + mov ah,0 + push di + add di,ax + mov al,[di+18] + pop di + mov [es:bx+15],al + mov [di+17],al + ret + +endoflist: mov liftflag,1 + ret + +liftopen: mov al,liftpath + push es bx + call turnpathon + pop bx es + cmp counttoclose,0 + jz nocountclose + dec counttoclose + cmp counttoclose,0 + jnz nocountclose + mov liftflag,2 +nocountclose: mov al,12 + jmp pokelift + +liftclosed: mov al,liftpath + push es bx + call turnpathoff + pop bx es + cmp counttoopen,0 + jz nocountopen + dec counttoopen + cmp counttoopen,0 + jnz nocountopen + mov liftflag,3 +nocountopen: mov al,0 + jmp pokelift + + endp + + +Liftnoise proc near + + cmp reallocation,5 + jz hissnoise + cmp reallocation,21 + jz hissnoise + call playchannel1 + ret +hissnoise: if demo + mov al,25 + else + mov al,13 + endif + call playchannel1 + ret + + endp + + + + +Random proc near + + call randomnum1 + push di + and ax,7 + add di,18 + add di,ax + mov al,[di] + pop di + mov [es:bx+15],al + ret + + endp + + + + + + + + +Steady proc near + + mov al,[di+18] + mov [di+17],al + mov [es:bx+15],al + ret + + endp + + + + + +Constant proc near + + inc byte ptr [es:bx+19] + mov cl,[es:bx+19] + mov ch,0 + add di,cx + cmp byte ptr [di+18],255 + jnz gotconst + sub di,cx + mov cx,0 + mov [es:bx+19],cl +gotconst: mov al,[di+18] + sub di,cx + mov [es:bx+15],al + mov [di+17],al + ret + + endp + + + + + + + + + + + + + + +Doorway proc near + + mov doorcheck1,-24 + mov doorcheck2,10 + mov doorcheck3,-30 + mov doorcheck4,10 + call dodoor + ret + + endp + + + +Widedoor proc near + + mov doorcheck1,-24 + mov doorcheck2,24 + mov doorcheck3,-30 + mov doorcheck4,24 + call dodoor + ret + + endp + + + + + + + + + +Dodoor proc near + + mov al,ryanx + mov ah,ryany + mov cl,[es:bx+10] + mov ch,[es:bx+11] + + cmp al,cl + jnc rtofdoor + sub al,cl + cmp al,doorcheck1 + jnc upordown + jmp shutdoor +rtofdoor: sub al,cl + cmp al,doorcheck2 + jnc shutdoor + +upordown: cmp ah,ch + jnc botofdoor + sub ah,ch + cmp ah,doorcheck3 + jc shutdoor + jmp opendoor +botofdoor: sub ah,ch + cmp ah,doorcheck4 + jnc shutdoor + +opendoor: mov cl,[es:bx+19] + cmp throughdoor,1 + jnz notthrough + cmp cl,0 + jnz notthrough + mov cl,6 +notthrough: inc cl + cmp cl,1 + jnz notdoorsound2 + mov al,0 + cmp reallocation,5 + jnz nothoteldoor2 + if demo + mov al,25 + else + mov al,13 + endif +nothoteldoor2: call playchannel1 +notdoorsound2: mov ch,0 + + push di + add di,cx + mov al,[di+18] ; must be a better way than this + cmp al,255 + jnz atlast1 + dec di + dec cl +atlast1: mov [es:bx+19],cl + mov al,[di+18] + pop di + mov [es:bx+15],al + mov [di+17],al + mov throughdoor,1 + ret + + +shutdoor: mov cl,[es:bx+19] + cmp cl,5 + jnz notdoorsound1 + mov al,1 + cmp reallocation,5 + jnz nothoteldoor1 + if demo + mov al,25 + else + mov al,13 + endif +nothoteldoor1: call playchannel1 +notdoorsound1: cmp cl,0 + jz atlast2 + dec cl + mov [es:bx+19],cl +atlast2: mov ch,0 + push di + add di,cx + mov al,[di+18] + pop di + mov [es:bx+15],al + mov [di+17],al + cmp cl,5 + jnz notnearly + mov throughdoor,0 +notnearly: ret + + endp + + + + + + + + +Lockeddoorway proc near + + mov al,ryanx + mov ah,ryany + mov cl,[es:bx+10] + mov ch,[es:bx+11] + + cmp al,cl + jnc rtofdoor2 + sub al,cl + cmp al,-24 + jnc upordown2 + jmp shutdoor2 +rtofdoor2: sub al,cl + cmp al,10 + jnc shutdoor2 + +upordown2: cmp ah,ch + jnc botofdoor2 + sub ah,ch + cmp ah,-30 + jc shutdoor2 + jmp opendoor2 +botofdoor2: sub ah,ch + cmp ah,12 + jnc shutdoor2 + +opendoor2: cmp throughdoor,1 + jz mustbeopen + cmp lockstatus,1 + jz shutdoor +mustbeopen: mov cl,[es:bx+19] + cmp cl,1 + jnz notdoorsound4 + mov al,0 + call playchannel1 +notdoorsound4: cmp cl,6 ; was 3 + jnz noturnonyet + mov al,doorpath + push es bx + call turnpathon + pop bx es + +noturnonyet: mov cl,[es:bx+19] + cmp throughdoor,1 + jnz notthrough2 + cmp cl,0 + jnz notthrough2 + mov cl,6 +notthrough2: inc cl + mov ch,0 + + push di + add di,cx + mov al,[di+18] + cmp al,255 + jnz atlast3 + dec di + dec cl +atlast3: mov [es:bx+19],cl + mov al,[di+18] + pop di + mov [es:bx+15],al + mov [di+17],al + cmp cl,5 + jnz justshutting + mov throughdoor,1 +justshutting: ret + + + +shutdoor2: mov cl,[es:bx+19] + cmp cl,5 + jnz notdoorsound3 + mov al,1 + call playchannel1 +notdoorsound3: cmp cl,0 + jz atlast4 + dec cl + mov [es:bx+19],cl +atlast4: mov ch,0 + mov throughdoor,0 + push di + add di,cx + mov al,[di+18] + pop di + mov [es:bx+15],al + mov [di+17],al + cmp cl,0 ;1 + jnz notlocky + mov al,doorpath + push es bx + call turnpathoff + pop bx es + mov lockstatus,1 +notlocky: ret + + endp + + + + + + + + + + +;------------------------------------------------------------People handler---- + +Updatepeople proc near + + mov es,buffers + mov di,peoplelist + mov listpos,di + mov cx,12*5 + mov al,255 + rep stosb + + inc maintimer + push cs + pop es + mov bx,offset cs:reelroutines + mov di,offset cs:reelcalls +updateloop: mov al,[es:bx] + cmp al,255 + jz endupdate + cmp al,reallocation + jnz notinthisroom + mov cx,[es:bx+1] + cmp cl,mapx + jnz notinthisroom + cmp ch,mapy + jnz notinthisroom + push di + mov ax,[cs:di] + call ax + pop di +notinthisroom: add bx,8 + add di,2 + jmp updateloop +endupdate: ret + + endp + + + + + + + + + + + + + + +Getreelframeax proc near + + push ds + mov currentframe,ax + call findsource + push ds + pop es + pop ds + mov ax,currentframe + sub ax,takeoff + add ax,ax + mov cx,ax + add ax,ax + add ax,cx + mov bx,ax + ret + + endp + + + + + + + + + + +Reelsonscreen proc near + + call reconstruct + call updatepeople + call watchreel + call showrain + call usetimedtext + ret + + endp + + + + + + +Plotreel proc near + + call getreelstart +retryreel: push es si + mov ax,[es:si+2] + cmp al,220 + jc normalreel + cmp al,255 + jz normalreel + call dealwithspecial + inc reelpointer + pop si es + add si,40 + jmp retryreel + +normalreel: mov cx,8 +plotloop: push cx es si + mov ax,[es:si] + cmp ax,0ffffh + jz notplot + call showreelframe +notplot: pop si es cx + add si,5 + loop plotloop + call soundonreels + pop bx es + ret + + endp + + + + + +Soundonreels proc near + + mov bl,reallocation + add bl,bl + xor bh,bh + add bx,offset cs:roombyroom + mov si,[cs:bx] + +reelsoundloop: mov al,[cs:si] + cmp al,255 + jz endreelsound + mov ax,[cs:si+1] + cmp ax,reelpointer + jnz skipreelsound + + cmp ax,lastsoundreel + jz skipreelsound + + mov lastsoundreel,ax + mov al,[cs:si] + cmp al,64 + jc playchannel1 + cmp al,128 + jc channel0once + and al,63 + mov ah,255 + jmp playchannel0 +channel0once: and al,63 + mov ah,0 + jmp playchannel0 +skipreelsound: add si,3 + jmp reelsoundloop +endreelsound: mov ax,lastsoundreel + cmp ax,reelpointer + jz nochange2 + mov lastsoundreel,-1 +nochange2: ret + +roombyroom dw r0,r1,r2,r0,r0,r0,r6,r0,r8,r9,r10,r11,r12,r13,r14,r0,r0,r0,r0,r0 + dw r20,r0,r22,r23,r0,r25,r26,r27,r28,r29,r0,r0,r0,r0,r0 + dw r0,r0,r0,r0,r0,r0,r0,r0,r0,r0,r45,r46,r47,r0,r0,r0,r0,r52,r53,r0,r55 + +r0 db 255 + +r1 db 15 + dw 257 + db 255 + +r2 db 12 + dw 5 + db 13 + dw 21 + db 15 ;hitting floor? + dw 35 + db 17 + dw 50 + db 18 + dw 103 + db 19 + dw 108 + db 255 + +r6 db 18 + dw 19 + db 19 + dw 23 + db 255 + +r8 db 12 + dw 51 + db 13 + dw 53 + db 14 + dw 14 + db 15 + dw 20 + db 0 + dw 78 + db 255 + +r9 db 12 + dw 119 + db 12 + dw 145 + db 255 + +r10 db 13 + dw 16 + db 255 + +r11 db 13 + dw 20 + db 255 + +r12 db 14 + dw 16 + db 255 + +r13 db 15 + dw 4 + db 16 + dw 8 + db 17 + dw 134 + db 18 + dw 153 + db 255 + +r14 db 13 + dw 108 + db 15 + dw 326 + db 15 + dw 331 + db 15 + dw 336 + db 15 + dw 342 + db 15 + dw 348 + db 15 + dw 354 + db 18 + dw 159 + db 18 + dw 178 + db 19+128 + dw 217 + db 20+64 + dw 228 + db 255 + +r20 db 13 + dw 20 + db 13 + dw 21 + db 15 + dw 34 + db 13 + dw 52 + db 13 + dw 55 + db 25 + dw 57 + db 21 + dw 73 + db 255 + +r22 db 13 ;room,sample + dw 196 ;reelpointer + db 13 + dw 234 + db 13 + dw 156 + db 14 + dw 129 + db 13 + dw 124 + db 15 + dw 162 + db 15 + dw 200 + db 15 + dw 239 + db 17 + dw 99 + db 12 + dw 52 + db 255 + +r23 db 15 + dw 56 + db 16 + dw 64 + db 19 + dw 22 + db 20 + dw 33 + db 255 + +r25 db 20 + dw 11 + db 20 + dw 15 + db 15 + dw 28 + db 13 + dw 80 + db 21 + dw 82 + db 19+128 + dw 87 + db 23+64 + dw 128 + db 255 + +r26 db 12 + dw 13 + db 14 + dw 39 + db 12 + dw 67 + db 12 + dw 75 + db 12 + dw 83 + db 12 + dw 91 + db 15 + dw 102 ; was 90, should be mine cart + db 255 + +r27 db 22 + dw 36 + db 13 + dw 125 + db 18 + dw 88 + db 15 + dw 107 + db 14 + dw 127 + db 14 + dw 154 + db 19+128 + dw 170 + db 23+64 + dw 232 + db 255 + +r28 db 21 + dw 16 + db 21 + dw 72 + db 21 + dw 205 + db 22 + dw 63 ;65 + db 23+128 + dw 99 + db 24+64 + dw 158 + db 255 + +r29 db 13 + dw 21 + db 14 + dw 24 + db 19+128 + dw 50 + db 23+64 + dw 75 + if german + else + db 24 + dw 128 + endif + db 255 + +r45 db 19+64 + dw 46 + db 16 + dw 167 + db 255 + +r46 db 16 + dw 19 + db 14 + dw 36 + db 16 + dw 50 + db 14 + dw 65 + db 16 + dw 81 + db 14 + dw 96 + db 16 + dw 114 + db 14 + dw 129 + db 16 + dw 147 + db 14 + dw 162 + db 16 + dw 177 + db 14 + dw 191 + db 255 + +r47 db 13 + dw 48 + db 14 + dw 41 + db 15 + dw 78 + db 16 + dw 92 + db 255 + +r52 db 16 + dw 115 + db 255 + +r53 db 21 + dw 103 + db 20 + dw 199 + db 255 + +r55 db 17 + dw 53 + db 17 + dw 54 + db 17 + dw 55 + db 17 + dw 56 + db 17 + dw 57 + db 17 + dw 58 + db 17 + dw 59 + db 17 + dw 61 + db 17 + dw 63 + db 17 + dw 64 + db 17 + dw 65 + db 255 + + endp + + + + + + + + + +Reconstruct proc near + + cmp havedoneobs,0 + jz noneedtorecon + mov newobs,1 + call drawfloor + call spriteupdate + call printsprites + cmp foreignrelease, 0 + jz notfudge + cmp reallocation,20 + jnz notfudge + call undertextline +notfudge: + mov havedoneobs,0 +noneedtorecon: ret + + endp + + + + + + + + + + +Dealwithspecial proc near + + sub al,220 + cmp al,0 + jnz notplset + mov al,ah + call placesetobject + mov havedoneobs,1 + ret +notplset: cmp al,1 + jnz notremset + mov al,ah + call removesetobject + mov havedoneobs,1 + ret +notremset: cmp al,2 + jnz notplfree + mov al,ah + call placefreeobject + mov havedoneobs,1 + ret +notplfree: cmp al,3 + jnz notremfree + mov al,ah + call removefreeobject + mov havedoneobs,1 + ret +notremfree: cmp al,4 + jnz notryanoff + call switchryanoff + ret +notryanoff: cmp al,5 + jnz notryanon + mov turntoface,ah + mov facing,ah + call switchryanon + ret +notryanon: cmp al,6 + jnz notchangeloc + mov newlocation,ah ; was new loc in watch + ;call switchryanon + ret +notchangeloc: call movemap + ret + + endp + + + +Movemap proc near + + cmp ah,32 + jnz notmapup2 + sub mapy,20 + mov nowinnewroom,1 + ret + +notmapup2: cmp ah,16 + jnz notmapupspec + sub mapy,10 + mov nowinnewroom,1 + ret + +notmapupspec: cmp ah,8 + jnz notmapdownspec + add mapy,10 + mov nowinnewroom,1 + ret + +notmapdownspec: cmp ah,2 + jnz notmaprightspec + add mapx,11 + mov nowinnewroom,1 + ret + +notmaprightspec: sub mapx,11 + mov nowinnewroom,1 + ret + + endp + + + + +Getreelstart proc near + + mov ax,reelpointer + mov cx,40 + mul cx + mov es,reels + mov si,ax + add si,reellist + ret + + endp + + + + + +;------------------------------------------------------Printing a reel frame---- + + + +Showreelframe proc near + + mov al,[es:si+2] + mov ah,0 + mov di,ax + add di,mapadx + mov al,[es:si+3] + mov bx,ax + add bx,mapady + mov ax,[es:si] + mov currentframe,ax + call findsource + mov ax,currentframe + sub ax,takeoff + mov ah,8 + call showframe + ret + + endp + + + + + + +;------------------------------------------------------------------------------- + + + + + + + + + +Deleverything proc near + + mov al,mapysize + mov ah,0 + add ax,mapoffsety + cmp ax,182 + jnc bigroom + call maptopanel + ret +bigroom: sub mapysize,8 + call maptopanel + add mapysize,8 + ret + + endp + + + + + + + + + + + +Dumpeverything proc near + + mov es,buffers + mov bx,printedlist +dumpevery1: mov ax,[es:bx] + mov cx,[es:bx+2] + cmp ax,0ffffh + jz finishevery1 + cmp ax,[es:bx+(40*5)] + jnz notskip1 + cmp cx,[es:bx+(40*5)+2] + jz skip1 + +notskip1: push bx es ds + mov bl,ah + mov bh,0 + mov ah,0 + mov di,ax + add di,mapadx + add bx,mapady + call multidump + pop ds es bx + +skip1: add bx,5 + jmp dumpevery1 + +finishevery1: mov bx,printedlist+(40*5) +dumpevery2: mov ax,[es:bx] + mov cx,[es:bx+2] + cmp ax,0ffffh + jz finishevery2 + + push bx es ds + mov bl,ah + mov bh,0 + mov ah,0 + mov di,ax + add di,mapadx + add bx,mapady + call multidump + pop ds es bx + add bx,5 + jmp dumpevery2 + +finishevery2: ret + + endp + + + + + + + + + + + + + + |