diff options
Diffstat (limited to 'devtools/tasmrecover/dreamweb/use.asm')
-rw-r--r-- | devtools/tasmrecover/dreamweb/use.asm | 3828 |
1 files changed, 3828 insertions, 0 deletions
diff --git a/devtools/tasmrecover/dreamweb/use.asm b/devtools/tasmrecover/dreamweb/use.asm new file mode 100644 index 0000000000..fbbd9c99db --- /dev/null +++ b/devtools/tasmrecover/dreamweb/use.asm @@ -0,0 +1,3828 @@ +;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 + + + + + + + + + + + |