mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-14 07:48:58 +00:00
3818 lines
46 KiB
NASM
3818 lines
46 KiB
NASM
;Copyright (c) 1990-2011 by Neil Dodwell
|
|
;Released with permission from Neil Dodwell under GPLv2
|
|
;See LICENSE file for full license text
|
|
|
|
Useobject proc near
|
|
|
|
mov withobject,255
|
|
|
|
cmp commandtype,229
|
|
jz alreadyuse
|
|
mov commandtype,229
|
|
|
|
mov bl,command
|
|
mov bh,objecttype
|
|
mov al,51
|
|
call commandwithob
|
|
alreadyuse: mov ax,mousebutton
|
|
cmp ax,oldbutton
|
|
jz nouse
|
|
and ax,1
|
|
jnz douse
|
|
nouse: ret
|
|
|
|
douse: call useroutine
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Useroutine proc near
|
|
|
|
cmp reallocation,50
|
|
jc nodream7
|
|
cmp pointerpower,0
|
|
jnz powerok
|
|
ret
|
|
powerok: mov pointerpower,0
|
|
|
|
nodream7: call getanyad
|
|
mov dx,seg uselist
|
|
mov ds,dx
|
|
mov si,offset uselist
|
|
checkuselist: push si
|
|
lodsb
|
|
sub al,"A"
|
|
cmp al,[es:bx+12]
|
|
jnz failed
|
|
lodsb
|
|
sub al,"A"
|
|
cmp al,[es:bx+13]
|
|
jnz failed
|
|
lodsb
|
|
sub al,"A"
|
|
cmp al,[es:bx+14]
|
|
jnz failed
|
|
lodsb
|
|
sub al,"A"
|
|
cmp al,[es:bx+15]
|
|
jnz failed
|
|
lodsw
|
|
pop si
|
|
call ax
|
|
ret
|
|
failed: pop si
|
|
add si,6
|
|
cmp byte ptr [si],140
|
|
jnz checkuselist
|
|
|
|
call delpointer
|
|
call getobtextstart
|
|
call findnextcolon
|
|
cmp al,0
|
|
jz cantuse2
|
|
call findnextcolon
|
|
cmp al,0
|
|
jz cantuse2
|
|
mov al,[es:si]
|
|
cmp al,0
|
|
jz cantuse2
|
|
call usetext
|
|
mov cx,400
|
|
call hangonp
|
|
call putbackobstuff
|
|
ret
|
|
cantuse2: call createpanel
|
|
call showpanel
|
|
call showman
|
|
call showexit
|
|
call obicons
|
|
mov di,33
|
|
mov bx,100
|
|
mov al,63
|
|
mov dl,241
|
|
call printmessage
|
|
call worktoscreenm
|
|
mov cx,50
|
|
call hangonp
|
|
call putbackobstuff
|
|
mov commandtype,255
|
|
ret
|
|
|
|
Uselist: db "NETW"
|
|
dw usemon
|
|
db "ELVA"
|
|
dw useelevator1
|
|
db "ELVB"
|
|
dw useelevator2
|
|
db "ELVC"
|
|
dw useelevator3
|
|
db "ELVE"
|
|
dw useelevator4
|
|
db "ELVF"
|
|
dw useelevator5
|
|
db "CGAT"
|
|
dw usechurchgate
|
|
db "REMO"
|
|
dw usestereo
|
|
db "BUTA"
|
|
dw usebuttona
|
|
db "CBOX"
|
|
dw usewinch
|
|
db "LITE"
|
|
dw uselighter
|
|
db "PLAT"
|
|
dw useplate
|
|
db "LIFT"
|
|
dw usecontrol
|
|
db "WIRE"
|
|
dw usewire
|
|
db "HNDL"
|
|
dw usehandle
|
|
db "HACH"
|
|
dw usehatch
|
|
db "DOOR"
|
|
dw useelvdoor
|
|
db "CSHR"
|
|
dw usecashcard
|
|
db "GUNA"
|
|
dw usegun
|
|
db "CRAA"
|
|
dw usecardreader1
|
|
db "CRBB"
|
|
dw usecardreader2
|
|
db "CRCC"
|
|
dw usecardreader3
|
|
db "SEAT"
|
|
dw sitdowninbar
|
|
db "MENU"
|
|
dw usemenu
|
|
db "COOK"
|
|
dw usecooker
|
|
db "ELCA"
|
|
dw callhotellift
|
|
db "EDCA"
|
|
dw calledenslift
|
|
db "DDCA"
|
|
dw calledensdlift
|
|
db "ALTR"
|
|
dw usealtar
|
|
db "LOKA"
|
|
dw openhoteldoor
|
|
db "LOKB"
|
|
dw openhoteldoor2
|
|
db "ENTA"
|
|
dw openlouis
|
|
db "ENTB"
|
|
dw openryan
|
|
db "ENTE"
|
|
dw openpoolboss
|
|
db "ENTC"
|
|
dw openyourneighbour
|
|
db "ENTD"
|
|
dw openeden
|
|
db "ENTH"
|
|
dw opensarters
|
|
db "WWAT"
|
|
dw wearwatch
|
|
db "POOL"
|
|
dw usepoolreader
|
|
db "WSHD"
|
|
dw wearshades
|
|
db "GRAF"
|
|
dw grafittidoor
|
|
db "TRAP"
|
|
dw trapdoor
|
|
db "CDPE"
|
|
dw edenscdplayer
|
|
|
|
db "DLOK"
|
|
dw opentvdoor
|
|
|
|
db "HOLE"
|
|
dw usehole
|
|
|
|
db "DRYR"
|
|
dw usedryer
|
|
|
|
db "HOLY"
|
|
dw usechurchhole
|
|
|
|
db "WALL"
|
|
dw usewall
|
|
db "BOOK"
|
|
dw usediary
|
|
|
|
db "AXED"
|
|
dw useaxe
|
|
db "SHLD"
|
|
dw useshield
|
|
|
|
db "BCNY"
|
|
dw userailing
|
|
db "LIDC"
|
|
dw usecoveredbox
|
|
db "LIDU"
|
|
dw useclearbox
|
|
db "LIDO"
|
|
dw useopenbox
|
|
db "PIPE"
|
|
dw usepipe
|
|
|
|
db "BALC"
|
|
dw usebalcony
|
|
db "WIND"
|
|
dw usewindow
|
|
db "PAPR"
|
|
dw viewfolder
|
|
|
|
db "UWTA"
|
|
dw usetrainer
|
|
db "UWTB"
|
|
dw usetrainer
|
|
|
|
db "STAT"
|
|
dw entersymbol
|
|
db "TLID"
|
|
dw opentomb
|
|
db "SLAB"
|
|
dw useslab
|
|
db "CART"
|
|
dw usecart
|
|
db "FCAR"
|
|
dw usefullcart
|
|
|
|
|
|
db "SLBA"
|
|
dw slabdoora
|
|
db "SLBB"
|
|
dw slabdoorb
|
|
db "SLBC"
|
|
dw slabdoorc
|
|
db "SLBD"
|
|
dw slabdoord
|
|
db "SLBE"
|
|
dw slabdoore
|
|
db "SLBF"
|
|
dw slabdoorf
|
|
db "PLIN"
|
|
dw useplinth
|
|
|
|
db "LADD"
|
|
dw useladder
|
|
db "LADB"
|
|
dw useladderb
|
|
|
|
db "GUMA"
|
|
dw chewy
|
|
|
|
db "SQEE"
|
|
dw wheelsound
|
|
db "TAPP"
|
|
dw runtap
|
|
db "GUIT"
|
|
dw playguitar
|
|
db "CONT"
|
|
dw hotelcontrol
|
|
|
|
db "BELL"
|
|
dw hotelbell
|
|
|
|
db 140,140,140,140
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;-----------------------------------------------------------Puzzle routines----
|
|
|
|
|
|
Wheelsound proc near
|
|
|
|
mov al,17
|
|
call playchannel1
|
|
call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Runtap proc near
|
|
|
|
cmp withobject,255
|
|
jnz tapwith
|
|
call withwhat
|
|
ret
|
|
tapwith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"C"
|
|
mov ch,"U"
|
|
mov dl,"P"
|
|
mov dh,"E"
|
|
call compare
|
|
jz fillcupfromtap
|
|
mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"C"
|
|
mov ch,"U"
|
|
mov dl,"P"
|
|
mov dh,"F"
|
|
call compare
|
|
jz cupfromtapfull
|
|
mov cx,300
|
|
mov al,56
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
fillcupfromtap: mov al,withobject
|
|
call getexad
|
|
mov byte ptr [es:bx+15],"F"-"A"
|
|
mov al,8
|
|
call playchannel1
|
|
mov cx,300
|
|
mov al,57
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
cupfromtapfull: mov cx,300
|
|
mov al,58
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
Playguitar proc near
|
|
|
|
mov al,14
|
|
call playchannel1
|
|
call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Hotelcontrol proc near
|
|
|
|
cmp reallocation,21
|
|
jnz notrightcont
|
|
cmp mapx,33
|
|
jnz notrightcont
|
|
call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
notrightcont: call showseconduse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Hotelbell proc near
|
|
|
|
if demo
|
|
mov al,24
|
|
else
|
|
mov al,12
|
|
endif
|
|
call playchannel1
|
|
call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Opentomb proc near
|
|
|
|
inc progresspoints
|
|
call showfirstuse
|
|
mov watchingtime,35*2
|
|
mov reeltowatch,1
|
|
mov endwatchreel,33
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Usetrainer proc near
|
|
|
|
call getanyad
|
|
cmp byte ptr [es:bx+2],4
|
|
jnz notheldtrainer
|
|
inc progresspoints
|
|
call makeworn
|
|
call showseconduse
|
|
call putbackobstuff
|
|
ret
|
|
notheldtrainer: call nothelderror
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Nothelderror proc near
|
|
|
|
call createpanel
|
|
call showpanel
|
|
call showman
|
|
call showexit
|
|
call obicons
|
|
mov di,64
|
|
mov bx,100
|
|
mov al,63
|
|
mov ah,1
|
|
mov dl,201
|
|
call printmessage2
|
|
call worktoscreenm
|
|
mov cx,50
|
|
call hangonp
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Usepipe proc near
|
|
|
|
cmp withobject,255
|
|
jnz pipewith
|
|
call withwhat
|
|
ret
|
|
pipewith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"C"
|
|
mov ch,"U"
|
|
mov dl,"P"
|
|
mov dh,"E"
|
|
call compare
|
|
jz fillcup
|
|
mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"C"
|
|
mov ch,"U"
|
|
mov dl,"P"
|
|
mov dh,"F"
|
|
call compare
|
|
jz alreadyfull
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
fillcup: mov cx,300
|
|
mov al,36
|
|
call showpuztext
|
|
call putbackobstuff
|
|
mov al,withobject
|
|
call getexad
|
|
mov byte ptr [es:bx+15],"F"-"A"
|
|
ret
|
|
|
|
alreadyfull: mov cx,300
|
|
mov al,35
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usefullcart proc near
|
|
|
|
inc progresspoints
|
|
mov al,2
|
|
mov ah,roomnum
|
|
add ah,6
|
|
call turnanypathon
|
|
mov manspath,4
|
|
mov facing,4
|
|
mov turntoface,4
|
|
mov finaldest,4
|
|
call findxyfrompath
|
|
mov resetmanxy,1
|
|
call showfirstuse
|
|
mov watchingtime,72*2
|
|
mov reeltowatch,58
|
|
mov endwatchreel,142
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Useplinth proc near
|
|
|
|
cmp withobject,255
|
|
jnz plinthwith
|
|
call withwhat
|
|
ret
|
|
|
|
plinthwith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"D"
|
|
mov ch,"K"
|
|
mov dl,"E"
|
|
mov dh,"Y"
|
|
call compare
|
|
jz isrightkey
|
|
call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
isrightkey: inc progresspoints
|
|
call showseconduse
|
|
mov watchingtime,220
|
|
mov reeltowatch,0
|
|
mov endwatchreel,104
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
mov al,roomafterdream
|
|
mov newlocation,al
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Chewy proc near
|
|
|
|
call showfirstuse
|
|
call getanyad
|
|
mov byte ptr [es:bx+2],255
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Useladder proc near
|
|
|
|
call showfirstuse
|
|
sub mapx,11
|
|
call findroominloc
|
|
mov facing,6
|
|
mov turntoface,6
|
|
mov manspath,0
|
|
mov destination,0
|
|
mov finaldest,0
|
|
call findxyfrompath
|
|
mov resetmanxy,1
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Useladderb proc near
|
|
|
|
call showfirstuse
|
|
add mapx,11
|
|
call findroominloc
|
|
mov facing,2
|
|
mov turntoface,2
|
|
mov manspath,1
|
|
mov destination,1
|
|
mov finaldest,1
|
|
call findxyfrompath
|
|
mov resetmanxy,1
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Slabdoora proc near
|
|
|
|
call showfirstuse
|
|
mov getback,1
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov reeltowatch,13
|
|
cmp dreamnumber,3
|
|
jnz slabawrong
|
|
inc progresspoints
|
|
mov watchingtime,60
|
|
mov endwatchreel,42
|
|
mov newlocation,47
|
|
ret
|
|
slabawrong: mov watchingtime,40
|
|
mov endwatchreel,34
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Slabdoorb proc near
|
|
|
|
cmp dreamnumber,1
|
|
jnz slabbwrong
|
|
mov al,"S"
|
|
mov ah,"H"
|
|
mov cl,"L"
|
|
mov ch,"D"
|
|
call isryanholding
|
|
jnz gotcrystal
|
|
mov al,44
|
|
mov cx,200
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
gotcrystal: call showfirstuse
|
|
inc progresspoints
|
|
mov getback,1
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov reeltowatch,44
|
|
mov watchingtime,60
|
|
mov endwatchreel,71
|
|
mov newlocation,47
|
|
ret
|
|
slabbwrong: call showfirstuse
|
|
mov getback,1
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov reeltowatch,44
|
|
mov watchingtime,40
|
|
mov endwatchreel,63
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Slabdoord proc near
|
|
|
|
call showfirstuse
|
|
mov getback,1
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov reeltowatch,75
|
|
cmp dreamnumber,0
|
|
jnz slabcwrong
|
|
inc progresspoints
|
|
mov watchingtime,60
|
|
mov endwatchreel,102
|
|
mov newlocation,47
|
|
ret
|
|
slabcwrong: mov watchingtime,40
|
|
mov endwatchreel,94
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Slabdoorc proc near
|
|
|
|
call showfirstuse
|
|
mov getback,1
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov reeltowatch,108
|
|
cmp dreamnumber,4
|
|
jnz slabdwrong
|
|
inc progresspoints
|
|
mov watchingtime,60
|
|
mov endwatchreel,135
|
|
mov newlocation,47
|
|
ret
|
|
slabdwrong: mov watchingtime,40
|
|
mov endwatchreel,127
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Slabdoore proc near
|
|
|
|
call showfirstuse
|
|
mov getback,1
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov reeltowatch,141
|
|
cmp dreamnumber,5
|
|
jnz slabewrong
|
|
inc progresspoints
|
|
mov watchingtime,60
|
|
mov endwatchreel,168
|
|
mov newlocation,47
|
|
ret
|
|
slabewrong: mov watchingtime,40
|
|
mov endwatchreel,160
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Slabdoorf proc near
|
|
|
|
call showfirstuse
|
|
mov getback,1
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov reeltowatch,171
|
|
cmp dreamnumber,2
|
|
jnz slabfwrong
|
|
inc progresspoints
|
|
mov watchingtime,60
|
|
mov endwatchreel,197
|
|
mov newlocation,47
|
|
ret
|
|
slabfwrong: mov watchingtime,40
|
|
mov endwatchreel,189
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Useslab proc near
|
|
|
|
cmp withobject,255
|
|
jnz slabwith
|
|
call withwhat
|
|
ret
|
|
slabwith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"J"
|
|
mov ch,"E"
|
|
mov dl,"W"
|
|
mov dh,"L"
|
|
call compare
|
|
jz nextslab
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
nextslab: mov al,withobject
|
|
call getexad
|
|
mov byte ptr [es:bx+2],0
|
|
mov al,command
|
|
push ax
|
|
call removesetobject
|
|
pop ax
|
|
inc al
|
|
push ax
|
|
call placesetobject
|
|
pop ax
|
|
cmp al,54
|
|
jnz notlastslab
|
|
mov al,0
|
|
call turnpathon
|
|
mov watchingtime,22
|
|
mov reeltowatch,35
|
|
mov endwatchreel,48
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
notlastslab: inc progresspoints
|
|
call showfirstuse
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Usecart proc near
|
|
|
|
cmp withobject,255
|
|
jnz cartwith
|
|
call withwhat
|
|
ret
|
|
cartwith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"R"
|
|
mov ch,"O"
|
|
mov dl,"C"
|
|
mov dh,"K"
|
|
call compare
|
|
jz nextcart
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
nextcart: mov al,withobject
|
|
call getexad
|
|
mov byte ptr [es:bx+2],0
|
|
mov al,command
|
|
push ax
|
|
call removesetobject
|
|
pop ax
|
|
inc al
|
|
call placesetobject
|
|
inc progresspoints
|
|
mov al,17
|
|
call playchannel1
|
|
call showfirstuse
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Useclearbox proc near
|
|
|
|
cmp withobject,255
|
|
jnz clearboxwith
|
|
call withwhat
|
|
ret
|
|
clearboxwith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"R"
|
|
mov ch,"A"
|
|
mov dl,"I"
|
|
mov dh,"L"
|
|
call compare
|
|
jz openbox
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
openbox: inc progresspoints
|
|
call showfirstuse
|
|
mov watchingtime,80
|
|
mov reeltowatch,67
|
|
mov endwatchreel,105
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Usecoveredbox proc near
|
|
|
|
inc progresspoints
|
|
call showfirstuse
|
|
mov watchingtime,50
|
|
mov reeltowatch,41
|
|
mov endwatchreel,66
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Userailing proc near
|
|
|
|
call showfirstuse
|
|
mov watchingtime,80
|
|
mov reeltowatch,0
|
|
mov endwatchreel,30
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
mov mandead,4
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Useopenbox proc near
|
|
|
|
cmp withobject,255
|
|
jnz openboxwith
|
|
call withwhat
|
|
ret
|
|
openboxwith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"C"
|
|
mov ch,"U"
|
|
mov dl,"P"
|
|
mov dh,"F"
|
|
call compare
|
|
jz destoryopenbox
|
|
mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"C"
|
|
mov ch,"U"
|
|
mov dl,"P"
|
|
mov dh,"E"
|
|
call compare
|
|
jz openboxwrong
|
|
call showfirstuse
|
|
ret
|
|
|
|
destoryopenbox: inc progresspoints
|
|
mov cx,300
|
|
mov al,37
|
|
call showpuztext
|
|
mov al,withobject
|
|
call getexad
|
|
mov byte ptr [es:bx+15],"E"-"A"
|
|
mov watchingtime,140
|
|
mov reeltowatch,105
|
|
mov endwatchreel,181
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov al,4
|
|
call turnpathon
|
|
mov getback,1
|
|
ret
|
|
|
|
openboxwrong: mov cx,300
|
|
mov al,38
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wearwatch proc near
|
|
|
|
cmp watchon,1
|
|
jz wearingwatch
|
|
call showfirstuse
|
|
mov watchon,1
|
|
mov getback,1
|
|
call getanyad
|
|
call makeworn
|
|
ret
|
|
wearingwatch: call showseconduse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Wearshades proc near
|
|
|
|
cmp shadeson,1
|
|
jz wearingshades
|
|
mov shadeson,1
|
|
call showfirstuse
|
|
mov getback,1
|
|
call getanyad
|
|
call makeworn
|
|
ret
|
|
wearingshades: call showseconduse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Sitdowninbar proc near
|
|
|
|
cmp watchmode,-1
|
|
jnz satdown
|
|
call showfirstuse
|
|
mov watchingtime,50
|
|
mov reeltowatch,55
|
|
mov endwatchreel,71
|
|
mov reeltohold,73
|
|
mov endofholdreel,83
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
ret
|
|
satdown: call showseconduse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Usechurchhole proc near
|
|
|
|
call showfirstuse
|
|
mov getback,1
|
|
mov watchingtime,28
|
|
mov reeltowatch,13
|
|
mov endwatchreel,26
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Usehole proc near
|
|
|
|
cmp withobject,255
|
|
jnz holewith
|
|
call withwhat
|
|
ret
|
|
holewith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"H"
|
|
mov ch,"N"
|
|
mov dl,"D"
|
|
mov dh,"A"
|
|
call compare
|
|
jz righthand
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
righthand: call showfirstuse
|
|
mov al,86
|
|
call removesetobject
|
|
mov al,withobject
|
|
call getexad
|
|
mov byte ptr [es:bx+2],255
|
|
mov canmovealtar,1
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Usealtar proc near
|
|
|
|
mov al,"C"
|
|
mov ah,"N"
|
|
mov cl,"D"
|
|
mov ch,"A"
|
|
call findexobject
|
|
cmp al,numexobjects
|
|
jz thingsonaltar
|
|
mov al,"C"
|
|
mov ah,"N"
|
|
mov cl,"D"
|
|
mov ch,"B"
|
|
call findexobject
|
|
cmp al,numexobjects
|
|
jz thingsonaltar
|
|
cmp canmovealtar,1
|
|
jz movealtar
|
|
mov cx,300
|
|
mov al,23
|
|
call showpuztext
|
|
mov getback,1
|
|
ret
|
|
|
|
movealtar: inc progresspoints
|
|
call showseconduse
|
|
mov watchingtime,160
|
|
mov reeltowatch,81
|
|
mov endwatchreel,174
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
|
|
mov al,47 ;message number
|
|
mov bl,52 ;x pos of message
|
|
mov bh,76 ;and y pos
|
|
mov cx,32 ;time on screen
|
|
mov dx,98 ;pause before show
|
|
call setuptimeduse
|
|
mov getback,1
|
|
ret
|
|
|
|
thingsonaltar: call showfirstuse
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Opentvdoor proc near
|
|
|
|
cmp withobject,255
|
|
jnz tvdoorwith
|
|
call withwhat
|
|
ret
|
|
tvdoorwith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"U"
|
|
mov ch,"L"
|
|
mov dl,"O"
|
|
mov dh,"K"
|
|
call compare
|
|
jz keyontv
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
keyontv: call showfirstuse
|
|
mov lockstatus,0
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usedryer proc near
|
|
|
|
mov al,12
|
|
call playchannel1
|
|
call showfirstuse
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Openlouis proc near
|
|
|
|
mov al,5
|
|
mov ah,2
|
|
mov cl,3
|
|
mov ch,8
|
|
call entercode
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Nextcolon proc near
|
|
|
|
lookcolon: mov al,[es:si]
|
|
inc si
|
|
cmp al,":"
|
|
jnz lookcolon
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Openyourneighbour proc near
|
|
|
|
mov al,255
|
|
mov ah,255
|
|
mov cl,255
|
|
mov ch,255
|
|
call entercode
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Usewindow proc near
|
|
|
|
cmp manspath,6
|
|
jnz notonbalc
|
|
inc progresspoints
|
|
call showfirstuse
|
|
mov newlocation,29
|
|
mov getback,1
|
|
ret
|
|
notonbalc: call showseconduse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Usebalcony proc near
|
|
|
|
call showfirstuse
|
|
mov al,6
|
|
call turnpathon
|
|
mov al,0
|
|
call turnpathoff
|
|
mov al,1
|
|
call turnpathoff
|
|
mov al,2
|
|
call turnpathoff
|
|
mov al,3
|
|
call turnpathoff
|
|
mov al,4
|
|
call turnpathoff
|
|
mov al,5
|
|
call turnpathoff
|
|
inc progresspoints
|
|
mov manspath,6
|
|
mov destination,6
|
|
mov finaldest,6
|
|
call findxyfrompath
|
|
call switchryanoff
|
|
mov resetmanxy,1
|
|
|
|
mov watchingtime,30*2
|
|
mov reeltowatch,183
|
|
mov endwatchreel,212
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Openryan proc near
|
|
|
|
mov al,5
|
|
mov ah,1
|
|
mov cl,0
|
|
mov ch,6
|
|
call entercode
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Openpoolboss proc near
|
|
|
|
mov al,5
|
|
mov ah,2
|
|
mov cl,2
|
|
mov ch,2
|
|
call entercode
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Openeden proc near
|
|
|
|
mov al,2
|
|
mov ah,8
|
|
mov cl,6
|
|
mov ch,5
|
|
call entercode
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
Opensarters proc near
|
|
|
|
mov al,7
|
|
mov ah,8
|
|
mov cl,3
|
|
mov ch,3
|
|
call entercode
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Isitright proc near
|
|
|
|
mov bx,seg presslist
|
|
mov es,bx
|
|
mov bx,offset es:presslist
|
|
cmp [es:bx+0],al
|
|
jnz notright
|
|
cmp [es:bx+1],ah
|
|
jnz notright
|
|
cmp [es:bx+2],cl
|
|
jnz notright
|
|
cmp [es:bx+3],ch
|
|
notright: ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Drawitall proc near
|
|
|
|
call createpanel
|
|
call drawfloor
|
|
;call dumpallmap
|
|
call printsprites
|
|
call showicon
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Openhoteldoor proc near
|
|
|
|
cmp withobject,255
|
|
jnz hoteldoorwith
|
|
call withwhat
|
|
ret
|
|
hoteldoorwith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"K"
|
|
mov ch,"E"
|
|
mov dl,"Y"
|
|
mov dh,"A"
|
|
call compare
|
|
jz keyonhotel1
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
keyonhotel1: if demo
|
|
mov al,27
|
|
else
|
|
mov al,16
|
|
endif
|
|
call playchannel1
|
|
call showfirstuse
|
|
;mov destination,1
|
|
;mov finaldest,1
|
|
;call autosetwalk
|
|
mov lockstatus,0
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Openhoteldoor2 proc near
|
|
|
|
cmp withobject,255
|
|
jnz hoteldoorwith2
|
|
call withwhat
|
|
ret
|
|
hoteldoorwith2: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"K"
|
|
mov ch,"E"
|
|
mov dl,"Y"
|
|
mov dh,"A"
|
|
call compare
|
|
jz keyonhotel2
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
keyonhotel2: if demo
|
|
mov al,27
|
|
else
|
|
mov al,16
|
|
endif
|
|
call playchannel1
|
|
call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Grafittidoor proc near
|
|
|
|
cmp withobject,255
|
|
jnz grafwith
|
|
call withwhat
|
|
ret
|
|
grafwith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"A"
|
|
mov ch,"P"
|
|
mov dl,"E"
|
|
mov dh,"N"
|
|
call compare
|
|
jz dograf
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
dograf: call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Trapdoor proc near
|
|
|
|
inc progresspoints
|
|
call showfirstuse
|
|
call switchryanoff
|
|
mov watchingtime,20*2
|
|
mov reeltowatch,181
|
|
mov endwatchreel,197
|
|
mov newlocation,26
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Callhotellift proc near
|
|
|
|
if demo
|
|
mov al,24
|
|
else
|
|
mov al,12
|
|
endif
|
|
call playchannel1
|
|
call showfirstuse
|
|
mov counttoopen,8
|
|
mov getback,1
|
|
mov destination,5
|
|
mov finaldest,5
|
|
call autosetwalk
|
|
mov al,4
|
|
call turnpathon
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Calledenslift proc near
|
|
|
|
call showfirstuse
|
|
mov counttoopen,8
|
|
mov getback,1
|
|
mov al,2
|
|
call turnpathon
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Calledensdlift proc near
|
|
|
|
cmp liftflag,1
|
|
jz edensdhere
|
|
call showfirstuse
|
|
mov counttoopen,8
|
|
mov getback,1
|
|
mov al,2
|
|
call turnpathon
|
|
ret
|
|
edensdhere: call showseconduse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usepoolreader proc near
|
|
|
|
cmp withobject,255
|
|
jnz poolwith
|
|
call withwhat
|
|
ret
|
|
poolwith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"M"
|
|
mov ch,"E"
|
|
mov dl,"M"
|
|
mov dh,"B"
|
|
call compare
|
|
jz openpool
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
openpool: cmp talkedtoattendant,1
|
|
jz canopenpool
|
|
call showseconduse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
canopenpool: mov al,17
|
|
call playchannel1
|
|
call showfirstuse
|
|
mov counttoopen,6
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Uselighter proc near
|
|
|
|
cmp withobject,255
|
|
jnz gotlighterwith
|
|
call withwhat
|
|
ret
|
|
gotlighterwith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"S"
|
|
mov ch,"M"
|
|
mov dl,"K"
|
|
mov dh,"E"
|
|
call compare
|
|
jz cigarette
|
|
call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
cigarette: mov cx,300
|
|
mov al,9
|
|
call showpuztext
|
|
mov al,withobject
|
|
call getexad
|
|
mov byte ptr [es:bx+2],255
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Showseconduse proc near
|
|
|
|
call getobtextstart
|
|
call nextcolon
|
|
call nextcolon
|
|
call nextcolon
|
|
call usetext
|
|
mov cx,400
|
|
call hangonp
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usecardreader1 proc near
|
|
|
|
cmp withobject,255
|
|
jnz gotreader1with
|
|
call withwhat
|
|
ret
|
|
gotreader1with: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"C"
|
|
mov ch,"S"
|
|
mov dl,"H"
|
|
mov dh,"R"
|
|
call compare
|
|
jz correctcard
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
correctcard: cmp talkedtosparky,0
|
|
jz notyet
|
|
cmp card1money,0
|
|
jz getscash
|
|
mov cx,300
|
|
mov al,17
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
getscash: mov al,16
|
|
call playchannel1
|
|
mov cx,300
|
|
mov al,18
|
|
call showpuztext
|
|
inc progresspoints
|
|
mov card1money,12432
|
|
mov getback,1
|
|
ret
|
|
notyet: call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Usecardreader2 proc near
|
|
|
|
cmp withobject,255
|
|
jnz gotreader2with
|
|
call withwhat
|
|
ret
|
|
gotreader2with: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"C"
|
|
mov ch,"S"
|
|
mov dl,"H"
|
|
mov dh,"R"
|
|
call compare
|
|
jz correctcard2
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
correctcard2: cmp talkedtoboss,0
|
|
jz notyetboss
|
|
cmp card1money,0
|
|
jz nocash
|
|
cmp gunpassflag,2
|
|
jz alreadygotnew
|
|
mov al,18
|
|
call playchannel1
|
|
mov cx,300
|
|
mov al,19
|
|
call showpuztext
|
|
mov al,94
|
|
call placesetobject
|
|
mov gunpassflag,1
|
|
sub card1money,2000
|
|
inc progresspoints
|
|
mov getback,1
|
|
ret
|
|
nocash: mov cx,300
|
|
mov al,20
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
alreadygotnew: mov cx,300
|
|
mov al,22
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
notyetboss: call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usecardreader3 proc near
|
|
|
|
cmp withobject,255
|
|
jnz gotreader3with
|
|
call withwhat
|
|
ret
|
|
gotreader3with: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"C"
|
|
mov ch,"S"
|
|
mov dl,"H"
|
|
mov dh,"R"
|
|
call compare
|
|
jz rightcard
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
rightcard: cmp talkedtorecep,0
|
|
jz notyetrecep
|
|
cmp cardpassflag,0
|
|
jnz alreadyusedit
|
|
if demo
|
|
mov al,27
|
|
else
|
|
mov al,16
|
|
endif
|
|
call playchannel1
|
|
mov cx,300
|
|
mov al,25
|
|
call showpuztext
|
|
inc progresspoints
|
|
sub card1money,8300
|
|
mov cardpassflag,1
|
|
mov getback,1
|
|
ret
|
|
alreadyusedit: mov cx,300
|
|
mov al,26
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
notyetrecep: call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usecashcard proc near
|
|
|
|
call getridofreels
|
|
call loadkeypad
|
|
call createpanel
|
|
call showpanel
|
|
call showexit
|
|
call showman
|
|
|
|
mov di,114
|
|
mov bx,120
|
|
cmp foreignrelease, 0
|
|
jz $1
|
|
mov bx,120-3
|
|
$1:
|
|
mov ds,tempgraphics
|
|
mov al,39
|
|
mov ah,0
|
|
call showframe
|
|
|
|
mov ax,card1money
|
|
call moneypoke
|
|
|
|
call getobtextstart
|
|
call nextcolon
|
|
call nextcolon
|
|
|
|
mov di,36
|
|
mov bx,98
|
|
mov dl,241
|
|
mov al,0
|
|
mov ah,0
|
|
call printdirect
|
|
|
|
mov di,160
|
|
mov bx,155
|
|
push cs
|
|
pop es
|
|
mov si,offset cs:money1poke
|
|
mov charshift,91*2+75
|
|
mov al,0
|
|
mov ah,0
|
|
mov dl,240
|
|
call printdirect
|
|
mov di,187
|
|
mov bx,155
|
|
push cs
|
|
pop es
|
|
mov si,offset cs:money2poke
|
|
mov charshift,91*2+85
|
|
mov al,0
|
|
mov ah,0
|
|
mov dl,240
|
|
call printdirect
|
|
mov charshift,0
|
|
call worktoscreenm
|
|
mov cx,400
|
|
call hangonp
|
|
call getridoftemp
|
|
call restorereels
|
|
call putbackobstuff
|
|
ret
|
|
|
|
money1poke: db "0000",0
|
|
money2poke: db "00",0
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Lookatcard proc near
|
|
|
|
mov manisoffscreen,1
|
|
call getridofreels
|
|
call loadkeypad
|
|
|
|
call createpanel2
|
|
mov di,160
|
|
mov bx,80
|
|
mov ds,tempgraphics
|
|
mov al,42
|
|
mov ah,128
|
|
call showframe
|
|
|
|
call getobtextstart
|
|
call findnextcolon
|
|
call findnextcolon
|
|
call findnextcolon
|
|
mov di,36
|
|
mov bx,124
|
|
mov dl,241
|
|
mov al,0
|
|
mov ah,0
|
|
call printdirect
|
|
|
|
push es si
|
|
call worktoscreenm
|
|
mov cx,280
|
|
call hangonw
|
|
call createpanel2
|
|
mov di,160
|
|
mov bx,80
|
|
mov ds,tempgraphics
|
|
mov al,42
|
|
mov ah,128
|
|
call showframe
|
|
pop si es
|
|
|
|
mov di,36
|
|
mov bx,130
|
|
mov dl,241
|
|
mov al,0
|
|
mov ah,0
|
|
call printdirect
|
|
call worktoscreenm
|
|
|
|
mov cx,200
|
|
call hangonw
|
|
mov manisoffscreen,0
|
|
call getridoftemp
|
|
call restorereels
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Moneypoke proc near
|
|
|
|
mov bx,offset cs:money1poke
|
|
mov cl,48-1
|
|
numberpoke0: inc cl
|
|
sub ax,10000
|
|
jnc numberpoke0
|
|
add ax,10000
|
|
mov [cs:bx],cl
|
|
inc bx
|
|
|
|
mov cl,48-1
|
|
numberpoke1: inc cl
|
|
sub ax,1000
|
|
jnc numberpoke1
|
|
add ax,1000
|
|
mov [cs:bx],cl
|
|
inc bx
|
|
|
|
mov cl,48-1
|
|
numberpoke2: inc cl
|
|
sub ax,100
|
|
jnc numberpoke2
|
|
add ax,100
|
|
mov [cs:bx],cl
|
|
inc bx
|
|
|
|
mov cl,48-1
|
|
numberpoke3: inc cl
|
|
sub ax,10
|
|
jnc numberpoke3
|
|
add ax,10
|
|
mov [cs:bx],cl
|
|
|
|
mov bx,offset cs:money2poke
|
|
add al,48
|
|
mov [cs:bx],al
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usecontrol proc near
|
|
|
|
cmp withobject,255
|
|
jnz gotcontrolwith
|
|
call withwhat
|
|
ret
|
|
gotcontrolwith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"K"
|
|
mov ch,"E"
|
|
mov dl,"Y"
|
|
mov dh,"A"
|
|
call compare
|
|
jz rightkey
|
|
cmp reallocation,21
|
|
jnz balls
|
|
mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"K"
|
|
mov ch,"N"
|
|
mov dl,"F"
|
|
mov dh,"E"
|
|
call compare
|
|
jz jimmycontrols
|
|
mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"A"
|
|
mov ch,"X"
|
|
mov dl,"E"
|
|
mov dh,"D"
|
|
call compare
|
|
jz axeoncontrols
|
|
|
|
balls: call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
rightkey: mov al,16
|
|
call playchannel1
|
|
cmp location,21
|
|
jz goingdown
|
|
mov cx,300
|
|
mov al,0
|
|
call showpuztext
|
|
mov newlocation,21
|
|
mov counttoclose,8
|
|
mov counttoopen,0
|
|
mov watchingtime,80
|
|
mov getback,1
|
|
ret
|
|
|
|
goingdown: mov cx,300
|
|
mov al,3
|
|
call showpuztext
|
|
mov newlocation,30
|
|
mov counttoclose,8
|
|
mov counttoopen,0
|
|
mov watchingtime,80
|
|
mov getback,1
|
|
ret
|
|
|
|
jimmycontrols: mov al,50
|
|
call placesetobject
|
|
mov al,51
|
|
call placesetobject
|
|
mov al,26
|
|
call placesetobject
|
|
mov al,30
|
|
call placesetobject
|
|
mov al,16
|
|
call removesetobject
|
|
mov al,17
|
|
call removesetobject
|
|
if demo
|
|
mov al,26
|
|
else
|
|
mov al,14
|
|
endif
|
|
call playchannel1
|
|
mov cx,300
|
|
mov al,10
|
|
call showpuztext
|
|
inc progresspoints
|
|
mov getback,1
|
|
ret
|
|
|
|
axeoncontrols: mov cx,300
|
|
mov al,16
|
|
call showpuztext
|
|
inc progresspoints
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usehatch proc near
|
|
|
|
call showfirstuse
|
|
mov newlocation,40
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Usewire proc near
|
|
|
|
cmp withobject,255
|
|
jnz gotwirewith
|
|
call withwhat
|
|
ret
|
|
gotwirewith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"K"
|
|
mov ch,"N"
|
|
mov dl,"F"
|
|
mov dh,"E"
|
|
call compare
|
|
jz wireknife
|
|
mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"A"
|
|
mov ch,"X"
|
|
mov dl,"E"
|
|
mov dh,"D"
|
|
call compare
|
|
jz wireaxe
|
|
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
wireaxe: mov cx,300
|
|
mov al,16
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
wireknife: mov al,51
|
|
call removesetobject
|
|
mov al,52
|
|
call placesetobject
|
|
mov cx,300
|
|
mov al,11
|
|
call showpuztext
|
|
inc progresspoints
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usehandle proc near
|
|
|
|
mov al,"C"
|
|
mov ah,"U"
|
|
mov cl,"T"
|
|
mov ch,"W"
|
|
call findsetobject
|
|
mov al,[es:bx+58]
|
|
cmp al,255
|
|
jnz havecutwire
|
|
mov cx,300
|
|
mov al,12
|
|
call showpuztext
|
|
mov getback,1
|
|
ret
|
|
|
|
havecutwire: mov cx,300
|
|
mov al,13
|
|
call showpuztext
|
|
mov newlocation,22
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Useelevator1 proc near
|
|
|
|
call showfirstuse
|
|
call selectlocation
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Showfirstuse proc near ;shows but does not delete the
|
|
;first bit of text after the
|
|
call getobtextstart ;description
|
|
call findnextcolon
|
|
call findnextcolon
|
|
call usetext
|
|
mov cx,400
|
|
call hangonp
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Useelevator3 proc near
|
|
|
|
call showfirstuse
|
|
mov counttoclose,20
|
|
mov newlocation,34
|
|
mov reeltowatch,46
|
|
mov endwatchreel,63
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov watchingtime,80 ;40
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Useelevator4 proc near
|
|
|
|
call showfirstuse
|
|
mov reeltowatch,0
|
|
mov endwatchreel,11
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov counttoclose,20
|
|
mov watchingtime,80 ;40
|
|
mov getback,1
|
|
mov newlocation,24
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Useelevator2 proc near
|
|
|
|
cmp location,23
|
|
jz inpoolhall
|
|
call showfirstuse
|
|
mov newlocation,23
|
|
mov counttoclose,20
|
|
mov counttoopen,0
|
|
mov watchingtime,80
|
|
mov getback,1
|
|
ret
|
|
inpoolhall: call showfirstuse
|
|
mov newlocation,31
|
|
mov counttoclose,20
|
|
mov counttoopen,0
|
|
mov watchingtime,80
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Useelevator5 proc near
|
|
|
|
mov al,4
|
|
call placesetobject
|
|
mov al,0
|
|
call removesetobject
|
|
mov newlocation,20
|
|
mov watchingtime,80
|
|
mov liftflag,1
|
|
mov counttoclose,8
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Usekey proc near
|
|
|
|
cmp location,5
|
|
jz usekey1
|
|
cmp location,30
|
|
jz usekey1
|
|
cmp location,21
|
|
jz usekey2
|
|
mov cx,200
|
|
mov al,1
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
usekey1: cmp mapx,22
|
|
jnz wrongroom1
|
|
cmp mapy,10
|
|
jnz wrongroom1
|
|
mov cx,300
|
|
mov al,0
|
|
call showpuztext
|
|
mov counttoclose,100
|
|
mov getback,1
|
|
ret
|
|
|
|
usekey2: cmp mapx,11
|
|
jnz wrongroom1
|
|
cmp mapy,10
|
|
jnz wrongroom1
|
|
mov cx,300
|
|
mov al,3
|
|
call showpuztext
|
|
mov newlocation,30
|
|
mov al,2
|
|
call fadescreendown
|
|
call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
wrongroom1: mov cx,200
|
|
mov al,2
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usestereo proc near
|
|
|
|
cmp location,0
|
|
jz stereook
|
|
mov cx,400 ;Ryan isn't in his flat.
|
|
mov al,4
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
stereook: cmp mapx,11
|
|
jnz stereonotok
|
|
cmp mapy,0
|
|
jz stereook2
|
|
stereonotok: mov cx,400 ;Ryan isn't in his bedroom.
|
|
mov al,5
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
stereook2: mov al,"C"
|
|
mov ah,"D"
|
|
mov cl,"P"
|
|
mov ch,"L"
|
|
call findsetobject ;find object number of CD player
|
|
mov ah,1 ;searching for inside a set ob
|
|
call checkinside ;see if there is anything inside
|
|
cmp cl,numexobjects
|
|
jnz cdinside
|
|
mov al,6 ;Need a CD inside
|
|
mov cx,400
|
|
call showpuztext
|
|
call putbackobstuff
|
|
call getanyad ;if the CD's been taken out,
|
|
mov al,255 ;make sure the player isn't still
|
|
mov [es:bx+10],al ;playing, ie:reset the puzzle
|
|
ret ;flag for the remote.
|
|
|
|
cdinside: call getanyad
|
|
mov al,[es:bx+10]
|
|
xor al,1
|
|
mov [es:bx+10],al
|
|
cmp al,255
|
|
jz stereoon
|
|
mov al,7 ;The stereo works
|
|
mov cx,400
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
stereoon: mov al,8 ;Stereo was already on,
|
|
mov cx,400 ;so switch it off
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usecooker proc near
|
|
|
|
mov al,command
|
|
mov ah,objecttype
|
|
call checkinside ;see if there is anything inside
|
|
cmp cl,numexobjects
|
|
jnz foodinside
|
|
call showfirstuse
|
|
call putbackobstuff
|
|
ret ;flag for the remote.
|
|
|
|
foodinside: call showseconduse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Useaxe proc near
|
|
|
|
cmp reallocation,22
|
|
jnz notinpool
|
|
cmp mapy,10
|
|
jz axeondoor
|
|
call showseconduse
|
|
inc progresspoints
|
|
mov lastweapon,2
|
|
mov getback,1
|
|
call removeobfrominv
|
|
ret
|
|
|
|
notinpool: call showfirstuse
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Useelvdoor proc near
|
|
|
|
cmp withobject,255
|
|
jnz gotdoorwith
|
|
call withwhat
|
|
ret
|
|
gotdoorwith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"A"
|
|
mov ch,"X"
|
|
mov dl,"E"
|
|
mov dh,"D"
|
|
call compare
|
|
jz axeondoor
|
|
mov al,14
|
|
mov cx,300
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
axeondoor: mov al,15
|
|
mov cx,300
|
|
call showpuztext
|
|
inc progresspoints
|
|
|
|
mov watchingtime,46*2
|
|
mov reeltowatch,31
|
|
mov endwatchreel,77
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
Withwhat proc near ;Gets player to identify object
|
|
;to use selected item with.
|
|
call createpanel
|
|
call showpanel
|
|
call showman
|
|
call showexit
|
|
mov al,command
|
|
mov ah,objecttype
|
|
push cs
|
|
pop es
|
|
mov di,offset cs:commandline
|
|
call copyname
|
|
|
|
mov di,100
|
|
mov bx,21
|
|
mov dl,200
|
|
mov al,63
|
|
mov ah,2
|
|
call printmessage2
|
|
|
|
mov di,lastxpos
|
|
add di,5
|
|
mov bx,21
|
|
push cs
|
|
pop es
|
|
mov si,offset cs:commandline
|
|
mov dl,220
|
|
mov al,0
|
|
mov ah,0
|
|
call printdirect
|
|
|
|
mov di,lastxpos
|
|
add di,5
|
|
mov bx,21
|
|
mov dl,200
|
|
mov al,63
|
|
mov ah,3
|
|
call printmessage2
|
|
|
|
call fillryan
|
|
mov commandtype,255
|
|
call readmouse
|
|
call showpointer
|
|
call worktoscreen
|
|
call delpointer
|
|
mov invopen,2
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Selectob proc near
|
|
|
|
call findinvpos
|
|
mov ax,[es:bx]
|
|
cmp al,255
|
|
jnz canselectob
|
|
call blank
|
|
ret
|
|
|
|
canselectob: mov withobject,al
|
|
mov withtype,ah
|
|
cmp ax,oldsubject
|
|
jnz diffsub3
|
|
cmp commandtype,221
|
|
jz alreadyselob
|
|
mov commandtype,221
|
|
|
|
diffsub3: mov oldsubject,ax
|
|
mov bx,ax
|
|
mov al,0
|
|
call commandwithob
|
|
alreadyselob: mov ax,mousebutton
|
|
cmp ax,oldbutton
|
|
jz notselob
|
|
and ax,1
|
|
jnz doselob
|
|
notselob: ret
|
|
|
|
doselob: call delpointer
|
|
mov invopen,0
|
|
call useroutine
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Compare proc near
|
|
|
|
sub dl,"A"
|
|
sub dh,"A"
|
|
sub cl,"A"
|
|
sub ch,"A"
|
|
push cx dx
|
|
call getanyaddir
|
|
pop dx cx
|
|
cmp [es:bx+12],cx
|
|
jnz comparefin
|
|
cmp [es:bx+14],dx
|
|
comparefin: ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Findsetobject proc near ;searches set object ID's
|
|
;for contents of ax,cx
|
|
sub al,"A" ;returns number in al and data
|
|
sub ah,"A" ;start point in es:bx
|
|
sub cl,"A"
|
|
sub ch,"A"
|
|
mov es,setdat
|
|
mov bx,0
|
|
mov dl,0 ;dl counts object number
|
|
findsetloop: cmp al,[es:bx+12]
|
|
jnz nofind
|
|
cmp ah,[es:bx+13]
|
|
jnz nofind
|
|
cmp cl,[es:bx+14]
|
|
jnz nofind
|
|
cmp ch,[es:bx+15]
|
|
jnz nofind
|
|
mov al,dl
|
|
ret
|
|
nofind: add bx,64
|
|
inc dl
|
|
cmp dl,128 ;number of objects to search
|
|
jnz findsetloop
|
|
mov al,dl
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Findexobject proc near ;searches ex object ID's
|
|
;for contents of ax,cx
|
|
sub al,"A" ;returns number in al and data
|
|
sub ah,"A" ;start point in es:bx
|
|
sub cl,"A"
|
|
sub ch,"A"
|
|
mov es,extras
|
|
mov bx,exdata
|
|
mov dl,0 ;dl counts object number
|
|
findexloop: cmp al,[es:bx+12]
|
|
jnz nofindex
|
|
cmp ah,[es:bx+13]
|
|
jnz nofindex
|
|
cmp cl,[es:bx+14]
|
|
jnz nofindex
|
|
cmp ch,[es:bx+15]
|
|
jnz nofindex
|
|
mov al,dl
|
|
ret
|
|
nofindex: add bx,16
|
|
inc dl
|
|
cmp dl,numexobjects ;number of objects to search
|
|
jnz findexloop
|
|
mov al,dl
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Isryanholding proc near
|
|
|
|
sub al,"A" ;returns number in al and data
|
|
sub ah,"A" ;start point in es:bx
|
|
sub cl,"A"
|
|
sub ch,"A"
|
|
mov es,extras
|
|
mov bx,exdata
|
|
mov dl,0 ;dl counts object number
|
|
searchinv: cmp byte ptr [es:bx+2],4
|
|
jnz nofindininv
|
|
cmp al,[es:bx+12]
|
|
jnz nofindininv
|
|
cmp ah,[es:bx+13]
|
|
jnz nofindininv
|
|
cmp cl,[es:bx+14]
|
|
jnz nofindininv
|
|
cmp ch,[es:bx+15]
|
|
jnz nofindininv
|
|
mov al,dl
|
|
cmp al,numexobjects
|
|
ret
|
|
nofindininv: add bx,16
|
|
inc dl
|
|
cmp dl,numexobjects ;number of objects to search
|
|
jnz searchinv
|
|
mov al,dl
|
|
cmp al,numexobjects ;if not zero he is holding
|
|
ret ;if zero, he is not holding
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Checkinside proc near ;finds an extra object inside
|
|
;object number al, type ah
|
|
|
|
mov es,extras
|
|
mov bx,exdata
|
|
mov cl,0
|
|
insideloop: cmp al,[es:bx+3] ;OI! might need to check room number!!!
|
|
jnz notfoundinside
|
|
cmp ah,[es:bx+2]
|
|
jnz notfoundinside
|
|
ret
|
|
notfoundinside: add bx,16
|
|
inc cl
|
|
cmp cl,numexobjects
|
|
jnz insideloop
|
|
ret ;ch returns the object number
|
|
;in the extras list
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usetext proc near
|
|
|
|
push es si
|
|
call createpanel
|
|
call showpanel
|
|
call showman
|
|
call showexit
|
|
call obicons
|
|
pop si es
|
|
|
|
mov di,36
|
|
mov bx,104
|
|
mov dl,241
|
|
mov al,0
|
|
mov ah,0
|
|
call printdirect
|
|
|
|
call worktoscreenm
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Putbackobstuff proc near
|
|
|
|
call createpanel
|
|
call showpanel
|
|
call showman
|
|
call obicons
|
|
call showexit
|
|
call obpicture
|
|
call describeob
|
|
call undertextline
|
|
mov commandtype,255
|
|
call readmouse
|
|
call showpointer
|
|
call worktoscreen
|
|
call delpointer
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Showpuztext proc near
|
|
|
|
push cx
|
|
call findpuztext
|
|
push es si
|
|
call createpanel
|
|
call showpanel
|
|
call showman
|
|
call showexit
|
|
call obicons
|
|
pop si es
|
|
mov di,36
|
|
mov bx,104
|
|
mov dl,241
|
|
mov ah,0
|
|
call printdirect
|
|
call worktoscreenm
|
|
pop cx
|
|
call hangonp
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Findpuztext proc near
|
|
|
|
mov ah,0
|
|
mov si,ax
|
|
add si,si
|
|
mov es,puzzletext
|
|
mov ax,[es:si]
|
|
add ax,textstart
|
|
mov si,ax
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
;-------------------------------------------------------------------------------
|
|
|
|
Placesetobject proc near
|
|
|
|
push es bx
|
|
mov cl,0
|
|
mov ch,0
|
|
call findormake
|
|
call getsetad
|
|
mov byte ptr [es:bx+58],0
|
|
pop bx es
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Removesetobject proc near
|
|
|
|
push es bx
|
|
mov cl,255
|
|
mov ch,0
|
|
call findormake
|
|
call getsetad
|
|
mov byte ptr [es:bx+58],255
|
|
pop bx es
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Issetobonmap proc near
|
|
|
|
push es bx
|
|
call getsetad
|
|
mov al,[es:bx+58]
|
|
pop bx es
|
|
cmp al,0
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Placefreeobject proc near
|
|
|
|
push es bx
|
|
mov cl,0
|
|
mov ch,1
|
|
call findormake
|
|
call getfreead
|
|
mov byte ptr [es:bx+2],0
|
|
pop bx es
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Removefreeobject proc near
|
|
|
|
push es bx
|
|
;mov cl,255
|
|
;mov ch,1
|
|
;call findormake
|
|
call getfreead
|
|
mov byte ptr [es:bx+2],255
|
|
pop bx es
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Findormake proc near
|
|
|
|
mov bx,listofchanges
|
|
push ax
|
|
mov es,buffers
|
|
mov ah,reallocation
|
|
changeloop: cmp byte ptr [es:bx],255
|
|
jz haventfound
|
|
cmp ax,[es:bx]
|
|
jnz nofoundchange
|
|
cmp ch,[es:bx+3]
|
|
jz foundchange
|
|
nofoundchange: add bx,4
|
|
jmp changeloop
|
|
foundchange: pop ax
|
|
mov [es:bx+2],cl
|
|
ret
|
|
haventfound: mov [es:bx],ax
|
|
mov [es:bx+2],cx
|
|
pop ax
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Switchryanon proc near
|
|
|
|
mov ryanon,255
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Switchryanoff proc near
|
|
|
|
mov ryanon,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Setallchanges proc near
|
|
|
|
mov es,buffers
|
|
mov bx,listofchanges
|
|
setallloop: mov ax,[es:bx]
|
|
cmp al,255
|
|
jz endsetloop
|
|
mov cx,[es:bx+2]
|
|
add bx,4
|
|
cmp ah,reallocation
|
|
jnz setallloop
|
|
push es bx
|
|
call dochange
|
|
pop bx es
|
|
jmp setallloop
|
|
endsetloop: ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dochange proc near
|
|
|
|
cmp ch,0
|
|
jz object
|
|
cmp ch,1
|
|
jz freeobject
|
|
|
|
path: push cx
|
|
mov ah,0
|
|
add ax,ax
|
|
add ax,ax
|
|
add ax,ax
|
|
push ax
|
|
mov al,ch
|
|
sub al,100
|
|
mov ah,0
|
|
mov cx,144
|
|
mul cx
|
|
pop bx
|
|
add bx,ax
|
|
add bx,pathdata
|
|
mov es,reels
|
|
pop cx
|
|
mov byte ptr [es:bx+6],cl
|
|
nopath: ret
|
|
|
|
object: push cx
|
|
call getsetad
|
|
pop cx
|
|
mov [es:bx+58],cl
|
|
ret
|
|
|
|
freeobject: push cx
|
|
call getfreead
|
|
pop cx
|
|
cmp byte ptr [es:bx+2],255
|
|
jnz beenpickedup
|
|
mov [es:bx+2],cl
|
|
beenpickedup: ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Autoappear proc near ;places objects that appear
|
|
;in rooms after certain
|
|
cmp location,32 ;conditions are met.
|
|
jnz notinalley
|
|
mov al,5 ;switch off travel to
|
|
call resetlocation ;hotel after kill
|
|
mov al,10
|
|
call setlocation
|
|
mov destpos,10
|
|
ret
|
|
notinalley: cmp reallocation,24
|
|
jnz notinedens
|
|
cmp generaldead,1
|
|
jnz edenspart2
|
|
inc generaldead
|
|
mov al,44
|
|
call placesetobject
|
|
mov al,18
|
|
call placesetobject
|
|
mov al,93
|
|
call placesetobject
|
|
mov al,92
|
|
call removesetobject
|
|
mov al,55
|
|
call removesetobject
|
|
mov al,75
|
|
call removesetobject
|
|
mov al,84
|
|
call removesetobject
|
|
mov al,85
|
|
call removesetobject
|
|
ret
|
|
edenspart2: cmp sartaindead,1
|
|
jnz notedens2
|
|
mov al,44
|
|
call removesetobject
|
|
mov al,93
|
|
call removesetobject
|
|
mov al,55
|
|
call placesetobject
|
|
inc sartaindead
|
|
notedens2: ret
|
|
notinedens: cmp reallocation,25
|
|
jnz notonsartroof
|
|
mov newsitem,3
|
|
mov al,6
|
|
call resetlocation ;turn off Sartain Industries
|
|
mov al,11
|
|
call setlocation ;turn on carpark for later
|
|
mov destpos,11
|
|
ret
|
|
notonsartroof: cmp reallocation,2
|
|
jnz notinlouiss
|
|
cmp rockstardead,0
|
|
jz notinlouiss
|
|
mov al,23
|
|
call placesetobject
|
|
notinlouiss: ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;--------------------------------------------------------- Timed text stuff ----
|
|
|
|
|
|
|
|
Getundertimed proc near
|
|
|
|
mov al,timedy
|
|
cmp foreignrelease, 0
|
|
jz $1
|
|
sub al,3
|
|
$1:
|
|
mov ah,0
|
|
mov bx,ax
|
|
mov al,timedx
|
|
mov ah,0
|
|
mov di,ax
|
|
mov ch,undertimedysize
|
|
mov cl,240
|
|
mov ds,buffers
|
|
mov si,undertimedtext
|
|
call multiget
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Putundertimed proc near
|
|
|
|
mov al,timedy
|
|
cmp foreignrelease, 0
|
|
jz $1
|
|
sub al,3
|
|
$1:
|
|
mov ah,0
|
|
mov bx,ax
|
|
mov al,timedx
|
|
mov ah,0
|
|
mov di,ax
|
|
mov ch,undertimedysize
|
|
mov cl,240
|
|
mov ds,buffers
|
|
mov si,undertimedtext
|
|
call multiput
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dumptimedtext proc near
|
|
|
|
cmp needtodumptimed,1
|
|
jnz nodumptimed
|
|
mov al,timedy
|
|
cmp foreignrelease, 0
|
|
jz $1
|
|
sub al,3
|
|
$1:
|
|
mov ah,0
|
|
mov bx,ax
|
|
mov al,timedx
|
|
mov ah,0
|
|
mov di,ax
|
|
mov cl,240
|
|
mov ch,undertimedysize
|
|
call multidump
|
|
mov needtodumptimed,0
|
|
nodumptimed: ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Setuptimeduse proc near
|
|
|
|
cmp timecount,0
|
|
jnz cantsetup
|
|
|
|
mov timedy,bh
|
|
mov timedx,bl
|
|
mov counttotimed,cx
|
|
add dx,cx
|
|
mov timecount,dx
|
|
mov bl,al
|
|
mov bh,0
|
|
add bx,bx
|
|
mov es,puzzletext
|
|
mov cx,textstart
|
|
mov ax,[es:bx]
|
|
add ax,cx
|
|
mov bx,ax
|
|
mov timedseg,es
|
|
mov timedoffset,bx
|
|
cantsetup: ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
Setuptimedtemp proc near
|
|
|
|
if cd
|
|
cmp ah,0
|
|
jz notloadspeech3
|
|
push ax
|
|
push bx
|
|
push cx
|
|
push dx
|
|
mov dl,"T"
|
|
mov dh,ah
|
|
mov cl,"T"
|
|
mov ah,0
|
|
call loadspeech
|
|
cmp speechloaded,1
|
|
jnz $1
|
|
mov al,50+12
|
|
call playchannel1
|
|
$1:
|
|
pop dx
|
|
pop cx
|
|
pop bx
|
|
pop ax
|
|
|
|
cmp speechloaded,1
|
|
jnz notloadspeech3 ; failed to load speech
|
|
cmp subtitles, 1
|
|
jz notloadspeech3
|
|
ret
|
|
|
|
notloadspeech3:
|
|
endif ;if cd
|
|
|
|
cmp timecount,0
|
|
jnz cantsetup2
|
|
mov timedy,bh
|
|
mov timedx,bl
|
|
mov counttotimed,cx
|
|
add dx,cx
|
|
mov timecount,dx
|
|
mov bl,al
|
|
mov bh,0
|
|
add bx,bx
|
|
mov es,textfile1
|
|
mov cx,textstart
|
|
mov ax,[es:bx]
|
|
add ax,cx
|
|
mov bx,ax
|
|
mov timedseg,es
|
|
mov timedoffset,bx
|
|
cantsetup2: ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usetimedtext proc near
|
|
|
|
cmp timecount,0
|
|
jz notext
|
|
dec timecount
|
|
cmp timecount,0
|
|
jz deltimedtext
|
|
mov ax,timecount
|
|
cmp ax,counttotimed
|
|
jz firsttimed
|
|
jnc notext
|
|
jmp notfirsttimed
|
|
firsttimed: call getundertimed
|
|
notfirsttimed: mov bl,timedy
|
|
mov bh,0
|
|
mov al,timedx
|
|
mov ah,0
|
|
mov di,ax
|
|
mov es,timedseg
|
|
mov si,timedoffset
|
|
mov dl,237
|
|
mov ah,0
|
|
call printdirect
|
|
mov needtodumptimed,1
|
|
notext: ret
|
|
|
|
deltimedtext: call putundertimed
|
|
mov needtodumptimed,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Edenscdplayer proc near
|
|
|
|
call showfirstuse
|
|
mov watchingtime,18*2
|
|
mov reeltowatch,25
|
|
mov endwatchreel,42
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Usewall proc near
|
|
|
|
call showfirstuse
|
|
cmp manspath,3
|
|
jz gobackover
|
|
mov watchingtime,30*2
|
|
mov reeltowatch,2
|
|
mov endwatchreel,31
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
mov al,3
|
|
call turnpathon
|
|
mov al,4
|
|
call turnpathon
|
|
mov al,0
|
|
call turnpathoff
|
|
mov al,1
|
|
call turnpathoff
|
|
mov al,2
|
|
call turnpathoff
|
|
mov al,5
|
|
call turnpathoff
|
|
mov manspath,3
|
|
mov finaldest,3
|
|
call findxyfrompath
|
|
mov resetmanxy,1
|
|
call switchryanoff
|
|
ret
|
|
gobackover: mov watchingtime,30*2
|
|
mov reeltowatch,34
|
|
mov endwatchreel,60
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
mov al,3
|
|
call turnpathoff
|
|
mov al,4
|
|
call turnpathoff
|
|
mov al,0
|
|
call turnpathon
|
|
mov al,1
|
|
call turnpathon
|
|
mov al,2
|
|
call turnpathon
|
|
mov al,5
|
|
call turnpathon
|
|
mov manspath,5
|
|
mov finaldest,5
|
|
call findxyfrompath
|
|
mov resetmanxy,1
|
|
call switchryanoff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usechurchgate proc near
|
|
|
|
cmp withobject,255
|
|
jnz gatewith
|
|
call withwhat
|
|
ret
|
|
gatewith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"C"
|
|
mov ch,"U"
|
|
mov dl,"T"
|
|
mov dh,"T"
|
|
call compare
|
|
jz cutgate
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
cutgate: call showfirstuse
|
|
mov watchingtime,64*2
|
|
mov reeltowatch,4
|
|
mov endwatchreel,70
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
inc progresspoints
|
|
mov al,3
|
|
call turnpathon
|
|
cmp aidedead,0
|
|
jz notopenchurch
|
|
mov al,2
|
|
call turnpathon
|
|
notopenchurch: ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Usegun proc near
|
|
|
|
cmp objecttype,4
|
|
jz istakengun
|
|
call showseconduse
|
|
call putbackobstuff
|
|
ret
|
|
istakengun: cmp reallocation,22
|
|
jnz notinpoolroom
|
|
mov cx,300
|
|
mov al,34
|
|
call showpuztext
|
|
mov lastweapon,1
|
|
mov combatcount,39
|
|
mov getback,1
|
|
inc progresspoints
|
|
ret
|
|
notinpoolroom: cmp reallocation,25
|
|
jnz nothelicopter
|
|
mov cx,300
|
|
mov al,34
|
|
call showpuztext
|
|
mov lastweapon,1
|
|
mov combatcount,19
|
|
mov getback,1
|
|
mov dreamnumber,2
|
|
mov roomafterdream,38
|
|
mov sartaindead,1
|
|
inc progresspoints
|
|
ret
|
|
nothelicopter: cmp reallocation,27
|
|
jnz notinrockroom
|
|
mov cx,300
|
|
mov al,46
|
|
call showpuztext
|
|
mov pointermode,2 ;0
|
|
mov rockstardead,1
|
|
mov lastweapon,1
|
|
mov newsitem,1
|
|
mov getback,1
|
|
mov roomafterdream,32 ; skip
|
|
mov dreamnumber,0
|
|
inc progresspoints
|
|
ret
|
|
notinrockroom: cmp reallocation,8
|
|
jnz notbystudio
|
|
cmp mapx,22
|
|
jnz notbystudio
|
|
cmp mapy,40
|
|
jnz notbystudio
|
|
mov al,92
|
|
call issetobonmap
|
|
jz notbystudio
|
|
cmp manspath,9
|
|
jz notbystudio
|
|
mov destination,9
|
|
mov finaldest,9
|
|
call autosetwalk
|
|
mov lastweapon,1
|
|
mov getback,1
|
|
inc progresspoints
|
|
ret
|
|
notbystudio: cmp reallocation,6
|
|
jnz notsarters
|
|
cmp mapx,11
|
|
jnz notsarters
|
|
cmp mapy,20
|
|
jnz notsarters
|
|
mov al,5
|
|
call issetobonmap
|
|
jnz notsarters
|
|
mov destination,1
|
|
mov finaldest,1
|
|
call autosetwalk
|
|
mov al,5
|
|
call removesetobject
|
|
mov al,6
|
|
call placesetobject
|
|
mov al,1
|
|
mov ah,roomnum
|
|
dec ah
|
|
call turnanypathon
|
|
mov liftflag,1
|
|
mov watchingtime,40*2
|
|
mov reeltowatch,4
|
|
mov endwatchreel,43
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov getback,1
|
|
inc progresspoints
|
|
ret
|
|
notsarters: cmp reallocation,29
|
|
jnz notaide
|
|
mov getback,1
|
|
mov al,13
|
|
call resetlocation
|
|
mov al,12
|
|
call setlocation
|
|
mov destpos,12
|
|
mov destination,2
|
|
mov finaldest,2
|
|
call autosetwalk
|
|
mov watchingtime,164*2
|
|
mov reeltowatch,3
|
|
mov endwatchreel,164
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov aidedead,1
|
|
mov dreamnumber,3
|
|
mov roomafterdream,33
|
|
inc progresspoints
|
|
ret
|
|
notaide: cmp reallocation,23
|
|
jnz notwithboss
|
|
cmp mapx,0
|
|
jnz notwithboss
|
|
cmp mapy,50
|
|
jnz notwithboss
|
|
cmp manspath,5
|
|
jz pathokboss
|
|
mov destination,5
|
|
mov finaldest,5
|
|
call autosetwalk
|
|
pathokboss: mov lastweapon,1
|
|
mov getback,1
|
|
ret
|
|
notwithboss: cmp reallocation,8
|
|
jnz nottvsoldier
|
|
cmp mapx,11
|
|
jnz nottvsoldier
|
|
cmp mapy,10
|
|
jnz nottvsoldier
|
|
cmp manspath,2
|
|
jz pathoktv
|
|
mov destination,2
|
|
mov finaldest,2
|
|
call autosetwalk
|
|
pathoktv: mov lastweapon,1
|
|
mov getback,1
|
|
ret
|
|
nottvsoldier: call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Useshield proc near
|
|
|
|
cmp reallocation,20
|
|
jnz notinsartroom
|
|
cmp combatcount,0
|
|
jz notinsartroom
|
|
mov lastweapon,3
|
|
call showseconduse
|
|
mov getback,1
|
|
inc progresspoints
|
|
call removeobfrominv
|
|
ret
|
|
notinsartroom: call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usebuttona proc near
|
|
|
|
mov al,95
|
|
call issetobonmap
|
|
jz donethisbit
|
|
|
|
call showfirstuse
|
|
mov al,0
|
|
mov ah,roomnum
|
|
dec ah
|
|
call turnanypathon
|
|
mov al,9
|
|
call removesetobject
|
|
mov al,95
|
|
call placesetobject
|
|
|
|
mov watchingtime,15*2
|
|
mov reeltowatch,71
|
|
mov endwatchreel,85
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
|
|
mov getback,1
|
|
inc progresspoints
|
|
ret
|
|
donethisbit: call showseconduse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
Useplate proc near
|
|
|
|
cmp withobject,255
|
|
jnz platewith
|
|
call withwhat
|
|
ret
|
|
platewith: mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"S"
|
|
mov ch,"C"
|
|
mov dl,"R"
|
|
mov dh,"W"
|
|
call compare
|
|
jz unscrewplate
|
|
mov al,withobject
|
|
mov ah,withtype
|
|
mov cl,"K"
|
|
mov ch,"N"
|
|
mov dl,"F"
|
|
mov dh,"E"
|
|
call compare
|
|
jz triedknife
|
|
mov cx,300
|
|
mov al,14
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
unscrewplate: mov al,20
|
|
call playchannel1
|
|
call showfirstuse
|
|
mov al,28
|
|
call placesetobject
|
|
mov al,24
|
|
call placesetobject
|
|
mov al,25
|
|
call removesetobject
|
|
mov al,0
|
|
call placefreeobject
|
|
inc progresspoints
|
|
mov getback,1
|
|
ret
|
|
|
|
triedknife: mov cx,300
|
|
mov al,54
|
|
call showpuztext
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
Usewinch proc near
|
|
|
|
mov al,40
|
|
mov ah,1
|
|
call checkinside
|
|
cmp cl,numexobjects
|
|
jz nowinch
|
|
mov al,cl
|
|
mov ah,4
|
|
mov cl,"F"
|
|
mov ch,"U"
|
|
mov dl,"S"
|
|
mov dh,"E"
|
|
call compare
|
|
jnz nowinch
|
|
|
|
mov watchingtime,217*2
|
|
mov reeltowatch,0
|
|
mov endwatchreel,217
|
|
mov watchspeed,1
|
|
mov speedcount,1
|
|
mov destpos,1
|
|
mov newlocation,45
|
|
mov dreamnumber,1
|
|
mov roomafterdream,44
|
|
mov generaldead,1
|
|
mov newsitem,2
|
|
mov getback,1
|
|
inc progresspoints
|
|
ret
|
|
|
|
nowinch: call showfirstuse
|
|
call putbackobstuff
|
|
ret
|
|
|
|
endp
|