aboutsummaryrefslogtreecommitdiff
path: root/devtools/tasmrecover/dreamweb/dreamweb.asm
diff options
context:
space:
mode:
authorVladimir Menshakov2011-06-15 21:52:54 +0400
committerVladimir Menshakov2011-06-15 21:52:54 +0400
commitdfe83466b56a6bf382903c37aa520f282052b47f (patch)
tree79659068ca717c3080c551a1dc89af117dab6b83 /devtools/tasmrecover/dreamweb/dreamweb.asm
parentb97a5dcfb2e71d358274e017e4f1fdca02db4fa7 (diff)
downloadscummvm-rg350-dfe83466b56a6bf382903c37aa520f282052b47f.tar.gz
scummvm-rg350-dfe83466b56a6bf382903c37aa520f282052b47f.tar.bz2
scummvm-rg350-dfe83466b56a6bf382903c37aa520f282052b47f.zip
DREAMWEB: converted line endings to the unix format
Diffstat (limited to 'devtools/tasmrecover/dreamweb/dreamweb.asm')
-rw-r--r--devtools/tasmrecover/dreamweb/dreamweb.asm12506
1 files changed, 6253 insertions, 6253 deletions
diff --git a/devtools/tasmrecover/dreamweb/dreamweb.asm b/devtools/tasmrecover/dreamweb/dreamweb.asm
index 2b98b97b34..ea61338ae3 100644
--- a/devtools/tasmrecover/dreamweb/dreamweb.asm
+++ b/devtools/tasmrecover/dreamweb/dreamweb.asm
@@ -1,6262 +1,6262 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-
-
-
-
-
-
-
-
-
-;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
-;³ ³
-;³ DREAMWEB ³
-;³ ³
-;³ ³
-;³ ³
-;³ ³
-;³ Written by Neil Dodwell. Graphics by Dave Dew. ³
-;³ ³
-;³ Started on Friday 28 December 1990 at 1:20 pm ³
-;³ ³
-;³ Copyright 1990/1991 Creative Reality ³ ³
-;³ ³
-;³ ³
-;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;----------------------------------------------------------Assembly options----
-
-JUMPS
-
-playback equ 0
-recording equ 0
-debuglevel1 equ 0 ;memory debug on
-debuglevel2 equ 0 ;debug keys on+shouts
-demo equ 0
-CD equ 1
-Foreign equ 0
-Spanish equ 0
-German equ 0
-
-;----------------------------------------------------------------Code start----
-
-DREAMWEBPROG segment para public 'CODE'
-
- assume cs:DREAMWEBPROG,ss:STACKSPACE
-
-
-
-
-;------------------------------------------------------------------Includes----
-
-include \pc\dreamweb\vars.asm ;variables and equates
-include \pc\dreamweb\sprite.asm ;sprite routines
-include \pc\dreamweb\vgagrafx.asm ;screen routines for vga
-include \pc\dreamweb\vgafades.asm ;fade routines
-include \pc\dreamweb\titles.asm ;guess!
-include \pc\dreamweb\print.asm ;text printing routines
-include \pc\dreamweb\object.asm ;pickup
-include \pc\dreamweb\backdrop.asm ;draws floor etc.
-include \pc\dreamweb\look.asm ;look command
-include \pc\dreamweb\talk.asm ;conversations
-include \pc\dreamweb\newplace.asm ;travel
-include \pc\dreamweb\monitor.asm ;network machine
-include \pc\dreamweb\use.asm ;individual use routines
-include \pc\dreamweb\keypad.asm ;accept code with keypad
-include \pc\dreamweb\saveload.asm ;in game options
-include \pc\dreamweb\sblaster.asm
- if debuglevel1
-include \pc\dreamweb\debug.asm
- else
- if debuglevel2
-include \pc\dreamweb\debug.asm
- endif
- endif
-
-;-----------------------------------------------------------------Main loop----
-
-
-Dreamweb proc near
-
- call seecommandtail
-
- call checkbasemem
- call soundstartup
- call setkeyboardint
- call setupemm
- call allocatebuffers
- call setmouse
- call fadedos
- call gettime
-
- call clearbuffers
- call clearpalette
- call set16colpalette
- call readsetdata
- if demo
- call changeroomnums
- endif
- mov wongame,0
-
- mov dx,offset cs:basicsample
- call loadsample
- call setsoundoff
-
- if demo
- else
- call scanfornames
- cmp al,0
- jnz dodecisions
- endif
-
- call setmode
- call loadpalfromiff
-
- call titles
- call credits
- jmp playgame
-
-dodecisions: call cls
- call setmode
- call decide
- cmp getback,4
- jz mainloop
-
- call titles
- call credits
-
-playgame: call clearchanges
- call setmode
- call loadpalfromiff
- mov location,255
- mov roomafterdream,1
- if demo
- mov newlocation,5
- else
- mov newlocation,35
- endif
- mov volume,7
- call loadroom
- call clearsprites
- call initman
- call entrytexts
- call entryanims
- mov destpos,3
- call initialinv
- mov lastflag,32
- call startup1
- mov volumeto,0
- mov volumedirection,-1
- mov commandtype,255
- jmp mainloop
-
-loadnew: if demo
- cmp newlocation,27
- jnz not27
- call fadescreendowns
- mov cx,260
- call hangon
- call clearbeforeload
- jmp playgame
-not27:
- endif
- call clearbeforeload
- call loadroom
- call clearsprites
- call initman
- call entrytexts
- call entryanims
- mov newlocation,255
- call startup
- mov commandtype,255
- call worktoscreenm
- jmp mainloop
-
-alreadyloaded: mov newlocation,255
- call clearsprites
- call initman
- call startup
- mov commandtype,255
-
-mainloop: call screenupdate
- cmp wongame,0
- jnz endofgame
- cmp mandead,1
- jz gameover
- cmp mandead,2
- jz gameover
- cmp watchingtime,0
- jz notwatching
- mov al,finaldest
- cmp al,manspath
- jnz mainloop
- dec watchingtime
- jnz mainloop
-
-notwatching: cmp mandead,4
- jz gameover
- cmp newlocation,255
- jnz loadnew
- jmp mainloop
-
-gameover: if demo
- call fadescreendowns
- mov cx,260
- call hangon
- call clearbeforeload
- jmp playgame
- endif
- call clearbeforeload
- call showgun
- call fadescreendown
- mov cx,100
- call hangon
- jmp dodecisions
-
-endofgame: call clearbeforeload
- call fadescreendowns
- mov cx,200
- call hangon
- call endgame
- jmp quickquit2
-
- endp
-
-
-
-
- endp
-
-
-
- if demo
-
-Changeroomnums proc near
-
- mov di,offset cs:roomdata+10
- mov cx,50
-changenumloop: mov al,[cs:di]
- cmp al,"0"
- jnz nochange
- mov al,[cs:di+1]
- cmp al,"5"
- jnz nochange
- mov al,"6"
- mov ah,"0"
- mov [cs:di],ax
-nochange: add di,32
- loop changenumloop
- ret
-
- endp
-
- endif
-
-
-
-
-Entrytexts proc near
-
- cmp location,21
- jnz notloc15
- mov al,28
- mov cx,60
- mov dx,11
- mov bl,68
- mov bh,64
- call setuptimeduse
- ret
-notloc15: cmp location,30
- jnz notloc43
- mov al,27
- mov cx,60
- mov dx,11
- mov bl,68
- mov bh,64
- call setuptimeduse
- ret
-notloc43: cmp location,23
- jnz notloc23
- mov al,29
- mov cx,60
- mov dx,11
- mov bl,68
- mov bh,64
- call setuptimeduse
- ret
-notloc23: cmp location,31
- jnz notloc44
- mov al,30
- mov cx,60
- mov dx,11
- mov bl,68
- mov bh,64
- call setuptimeduse
- ret
-notloc44: cmp location,20
- jnz notsarters2
- mov al,31
- mov cx,60
- mov dx,11
- mov bl,68
- mov bh,64
- call setuptimeduse
- ret
-notsarters2: cmp location,24
- jnz notedenlob
- mov al,32
- mov cx,60
- mov dx,3
- mov bl,68
- mov bh,64
- call setuptimeduse
- ret
-notedenlob: cmp location,34
- jnz noteden2
- mov al,33
- mov cx,60
- mov dx,3
- mov bl,68
- mov bh,64
- call setuptimeduse
- ret
-noteden2: ret
-
- endp
-
-
-
-
-
-
-
-
-Entryanims proc near
-
- mov reeltowatch,-1
- mov watchmode,-1
- cmp location,33
- jnz notinthebeach
- call switchryanoff
- mov watchingtime,76*2
- mov reeltowatch,0
- mov endwatchreel,76
- mov watchspeed,1
- mov speedcount,1
- ret
-notinthebeach: cmp location,44
- jnz notsparkys
- mov al,8
- call resetlocation
- mov watchingtime,50*2
- mov reeltowatch,247
- mov endwatchreel,297
- mov watchspeed,1
- mov speedcount,1
- call switchryanoff
- ret
-notsparkys: cmp location,22
- jnz notinthelift
- mov watchingtime,31*2
- mov reeltowatch,0
- mov endwatchreel,30
- mov watchspeed,1
- mov speedcount,1
- call switchryanoff
- ret
-notinthelift: cmp location,26
- jnz notunderchurch
- mov symboltopnum,2
- mov symbolbotnum,1
- ret
-notunderchurch: cmp location,45
- jnz notenterdream
- mov keeperflag,0
- mov watchingtime,296
- mov reeltowatch,45
- mov endwatchreel,198
- mov watchspeed,1
- mov speedcount,1
- call switchryanoff
- ret
-notenterdream: cmp reallocation,46
- jnz notcrystal
- cmp sartaindead,1
- jnz notcrystal
- mov al,0
- call removefreeobject
- ret
-notcrystal: cmp location,9
- jnz nottopchurch
- mov al,2
- call checkifpathison
- jz nottopchurch
- cmp aidedead,0
- jz nottopchurch
- mov al,3
- call checkifpathison
- jnz makedoorsopen
- mov al,2
- call turnpathon
-makedoorsopen: mov al,4
- call removesetobject
- mov al,5
- call placesetobject
- ret
-nottopchurch: cmp location,47
- jnz notdreamcentre
- mov al,4
- call placesetobject
- mov al,5
- call placesetobject
- ret
-notdreamcentre: cmp location,38
- jnz notcarpark
- mov watchingtime,57*2
- mov reeltowatch,4
- mov endwatchreel,57
- mov watchspeed,1
- mov speedcount,1
- call switchryanoff
- ret
-notcarpark: cmp location,32
- jnz notalley
- mov watchingtime,66*2
- mov reeltowatch,0
- mov endwatchreel,66
- mov watchspeed,1
- mov speedcount,1
- call switchryanoff
- ret
-notalley: cmp location,24
- jnz notedensagain
- mov al,2
- mov ah,roomnum
- dec ah
- call turnanypathon
-notedensagain: ret
-
- endp
-
-
-
-
-
-
- if demo
-Initialinv proc near
-
- mov al,11
- mov ah,5
- call pickupob
- mov al,12
- mov ah,6
- call pickupob
- mov al,13
- mov ah,7
- call pickupob
- mov al,14
- mov ah,8
- call pickupob
- mov al,18
- mov ah,0
- call pickupob
- mov al,19
- mov ah,1
- call pickupob
- mov al,20
- mov ah,9
- call pickupob
- mov al,16
- mov ah,2
- call pickupob
-
- mov al,2
- mov ah,4
- call pickupob
-
- mov al,29
- mov ah,10
- call pickupob
- mov al,33
- mov ah,11
- call pickupob
- mov al,44
- mov ah,12
- call pickupob
- mov card1money,12342
- ret
-
- endp
- else
-Initialinv proc near
-
- cmp reallocation,24
- jz isedens
- ret
-
-isedens: mov al,11
- mov ah,5
- call pickupob
- mov al,12
- mov ah,6
- call pickupob
- mov al,13
- mov ah,7
- call pickupob
- mov al,14
- mov ah,8
- call pickupob
- mov al,18
- mov al,18
- mov ah,0
- call pickupob
- mov al,19
- mov ah,1
- call pickupob
- mov al,20
- mov ah,9
- call pickupob
- mov al,16
- mov ah,2
- call pickupob
-
- mov watchmode,1
- mov reeltohold,0
- mov endofholdreel,6
- mov watchspeed,1
- mov speedcount,1
- call switchryanoff
- ret
-
- endp
-
- endif
-
-
-
-
-
-
-
-
-
-
-
-Pickupob proc near
-
- mov lastinvpos,ah
- mov objecttype,2
- mov itemframe,al
- mov command,al
- call getanyad
- call transfertoex
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;---------------------------------------------------------Memory allocation----
-
-
-
-
-Setupemm proc near
-
- cmp soundint,255
- jz noneedforemm
- call checkforemm
-
- mov ah,43h ;allocate handle and 160 pages
- mov bx,176 ;was 176
- int 67h
- cmp ah,0
- jnz emmerror1 ;if there's an error drop to DOS
- mov emmhandle,dx
- mov ah,41h ;get the page frame base address
- int 67h
- cmp ah,0
- jnz emmerror1
- mov emmpageframe,bx
- mov ax,bx
- mov cl,12
- shr ax,cl
- mov emmhardwarepage,al
-noneedforemm: ret
-emmerror1: mov gameerror,1
- jmp quickquit2
-
- endp
-
-
-
-
-
-
-
-
-Removeemm proc near
-
- cmp soundint,255
- jz noneedtoremove
- mov ah,45h
- mov dx,emmhandle
- int 67h
-noneedtoremove: ret
-
- endp
-
-
-
-
-
-Checkforemm proc near
-
- ret
-
- endp
-
-
-
-
-Checkbasemem proc near
-
- mov bx,howmuchalloc
- cmp bx,9360h
- jnc enoughmem
- mov gameerror,5
- jmp quickquit
-enoughmem: ret
-
- endp
-
-
-
-Allocatebuffers proc near
-
- mov bx,lengthofextra/16
- call allocatemem
- mov extras,ax
-
- call trysoundalloc
- mov bx,lengthofmap/16
- call allocatemem
- mov mapdata,ax
-
- call trysoundalloc
- mov bx,lengthofbuffer/16
- call allocatemem
- mov buffers,ax
-
- call trysoundalloc
- mov bx,freedatlen/16
- call allocatemem
- mov freedat,ax
-
- call trysoundalloc
- mov bx,setdatlen/16
- call allocatemem
- mov setdat,ax
-
- call trysoundalloc
- mov bx,lenofmapstore/16
- call allocatemem
- mov mapstore,ax
-
- if recording
- mov bx,1028
- call allocatemem
- mov recordspace,ax
- endif
-
- if playback
- mov bx,1028
- call allocatemem
- mov recordspace,ax
- endif
-
- call allocatework
-
- mov bx,2048/16
- call allocatemem
- mov sounddata,ax
-
- mov bx,2048/16
- call allocatemem
- mov sounddata2,ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Clearbuffers proc near
-
- mov es,buffers
- mov cx,lengthofbuffer/2
- mov ax,0
- mov di,0
- rep stosw
-
- mov es,extras
- mov cx,lengthofextra/2
- mov ax,0ffffh
- mov di,0
- rep stosw
-
- mov es,buffers
- mov di,initialreelrouts
- push cs
- pop ds
- mov si,offset cs:reelroutines
- mov cx,lenofreelrouts
- rep movsb
-
- mov es,buffers
- mov di,initialvars
- push cs
- pop ds
- mov si,offset cs:startvars
- mov cx,lengthofvars
- rep movsb
- call clearchanges
- ret
-
- endp
-
-
-
-
-
-
-Clearchanges proc near
-
- mov es,buffers
- mov cx,numchanges*2
- mov ax,0ffffh
- mov di,listofchanges
- rep stosw
- mov ds,buffers
- mov si,initialreelrouts
- push cs
- pop es
- mov di,offset cs:reelroutines
- mov cx,lenofreelrouts
- rep movsb
-
- mov ds,buffers
- mov si,initialvars
- push cs
- pop es
- mov di,offset cs:startvars
- mov cx,lengthofvars
- rep movsb
-
- mov expos,0
- mov exframepos,0
- mov extextpos,0
- mov es,extras
- mov cx,lengthofextra/2
- mov ax,0ffffh
- mov di,0
- rep stosw
-
- push cs
- pop es
- mov di,offset cs:roomscango
- mov al,1
- stosb
- stosb
- mov al,0
- stosb
- mov al,1
- stosb
- mov ax,0
- mov cx,6
- rep stosw
- ret
-
- endp
-
-
-
-
-
-
-
-Clearbeforeload proc near ;deallocates variable buffers
- ;and clears out fixed ones
- cmp roomloaded,1
- jnz noclear
- call clearreels
- call clearrest
- mov roomloaded,0
-noclear: ret
-
- endp
-
-
-
-;Clearnoreels proc near
-;
-; cmp roomloaded,1
-; jnz noclear2
-; call clearrest
-; mov roomloaded,0
-;noclear2: ret
-;
-; endp
-
-
-
-
-
-
-Clearreels proc near
-
- mov es,reel1
- call deallocatemem
- mov es,reel2
- call deallocatemem
- mov es,reel3
- call deallocatemem
- ret
-
- endp
-
-
-
-Clearrest proc near
-
- mov es,mapdata
- mov cx,maplen/2
- mov ax,0
- mov di,map
- rep stosw
-
- mov es,backdrop
- call deallocatemem
- mov es,setframes
- call deallocatemem
- mov es,reels
- call deallocatemem
- mov es,people
- call deallocatemem
- mov es,setdesc
- call deallocatemem
- mov es,blockdesc
- call deallocatemem
- mov es,roomdesc
- call deallocatemem
- mov es,freeframes
- call deallocatemem
- mov es,freedesc
- call deallocatemem
- ret
-
- endp
-
-
-
-
-
-
-Deallocatemem proc near
-
- mov ah,49h
- int 21h
- jc deallerror
- ret
-deallerror: mov gameerror,4
- jmp quickquit2
- ret
-
- endp
-
-
-
-
-
-
-
-
-Allocatemem proc near
-
- add bx,2
- mov ah,48h
- int 21h
- jc memerror
- ret
-
-memerror: mov gameerror,3
- jmp quickquit2
-
- endp
-
-
-
-
-Seecommandtail proc near
-
- mov soundbaseadd,220h
- mov soundint,5
- mov sounddmachannel,1
- mov brightness,0
-
- mov bx,2
- mov ax,[es:bx]
- mov dx,es
- sub ax,dx
- mov howmuchalloc,ax
-
- mov bx,02ch
- mov ax,[es:bx]
- push es bx
-
- mov es,ax
- mov bx,0
-findblaster: mov ax,[es:bx]
- cmp ax,0
- jz endofenvironment
- cmp al,"B"
- jnz notblast
- cmp ah,"L"
- jnz notblast
- cmp byte ptr [es:bx+2],"A"
- jnz notblast
- cmp byte ptr [es:bx+3],"S"
- jnz notblast
- cmp byte ptr [es:bx+4],"T"
- jnz notblast
- cmp byte ptr [es:bx+5],"E"
- jnz notblast
- cmp byte ptr [es:bx+6],"R"
- jnz notblast
- add bx,7
- call parseblaster
- jmp endofenvironment
-notblast: inc bx
- jmp findblaster
-
-endofenvironment: pop bx es
- mov bx,81h
- call parseblaster
- ret
-
- endp
-
-
-
-Parseblaster proc near
-
-lookattail: mov al,[es:bx]
- cmp al,0
- jz endtail
- cmp al,13
- jz endtail
- cmp al,"i"
- jz issoundint
- cmp al,"I"
- jz issoundint
- cmp al,"b"
- jz isbright
- cmp al,"B"
- jz isbright
- cmp al,"a"
- jz isbaseadd
- cmp al,"A"
- jz isbaseadd
- cmp al,"n"
- jz isnosound
- cmp al,"N"
- jz isnosound
- cmp al,"d"
- jz isdma
- cmp al,"D"
- jz isdma
- inc bx
- loop lookattail
- ret
-
-issoundint: mov al,[es:bx+1]
- sub al,"0"
- mov soundint,al
- inc bx
- jmp lookattail
-isdma: mov al,[es:bx+1]
- sub al,"0"
- mov sounddmachannel,al
- inc bx
- jmp lookattail
-isbaseadd: push cx
- mov al,[es:bx+2]
- sub al,"0"
- mov ah,0
- mov cl,4
- shl ax,cl
- add ax,200h
- mov soundbaseadd,ax
- pop cx
- inc bx
- jmp lookattail
-isbright: mov brightness,1
- inc bx
- jmp lookattail
-isnosound: mov soundint,255
- inc bx
- jmp lookattail
-endtail: ret
-
- endp
-
-
-
-
-;-------------------------------------------------------High level routines----
-
-Startup proc near
-
- mov currentkey,0
- mov mainmode,0
- call createpanel
- mov newobs,1
- call drawfloor
- call showicon
- call getunderzoom
- call spriteupdate
- call printsprites
- call undertextline
- call reelsonscreen
- call atmospheres
- ret
-
- endp
-
-
-
-
-Startup1 proc near
-
-
- call clearpalette
- mov throughdoor,0
- mov currentkey,"0"
- mov mainmode,0
- call createpanel
- mov newobs,1
- call drawfloor
-
- call showicon
- call getunderzoom
- call spriteupdate
- call printsprites
- call undertextline
- call reelsonscreen
- call atmospheres
- call worktoscreen
- call fadescreenup
- ret
-
- endp
-
-
-
-
-
-
-
-
-;--------------------------------------------------Scroll location routines----
-
-
-
-
-
-Screenupdate proc near
-
- call newplace
- call mainscreen
- call animpointer
- call showpointer
- cmp watchingtime,0
- jnz iswatchingmode
- cmp newlocation,255
- jnz finishearly
-iswatchingmode: call vsync
- call readmouse1
- call dumppointer
- call dumptextline
- call delpointer
- call autolook
- call spriteupdate
- call watchcount
- call zoom
- call showpointer
- cmp wongame,0
- jnz finishearly
-
- call vsync
- call readmouse2
- call dumppointer
- call dumpzoom
- call delpointer
- call deleverything
- call printsprites
- call reelsonscreen
- call afternewroom
- call showpointer
-
- call vsync
- call readmouse3
- call dumppointer
- call dumpmap
- call dumptimedtext
- call delpointer
- call showpointer
-
- call vsync
- call readmouse4
- call dumppointer
- call dumpwatch
- call delpointer
-
-finishearly: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Watchreel proc near
-
- cmp reeltowatch,-1
- jz notplayingreel
- mov al,manspath
- cmp al,finaldest
- jnz waitstopwalk
- mov al,turntoface
- cmp al,facing
- jz notwatchpath
-waitstopwalk: ret
-
-notwatchpath: dec speedcount
- cmp speedcount,-1
- jnz showwatchreel
- mov al,watchspeed
- mov speedcount,al
- mov ax,reeltowatch
- cmp ax,endwatchreel
- jnz ismorereel
- cmp watchingtime,0
- jnz showwatchreel
- mov reeltowatch,-1
- mov watchmode,-1
- cmp reeltohold,-1
- jz nomorereel
- mov watchmode,1
- jmp notplayingreel
-ismorereel: inc reeltowatch
-showwatchreel: mov ax,reeltowatch
- mov reelpointer,ax
- call plotreel
- mov ax,reelpointer
- mov reeltowatch,ax
- call checkforshake
-nomorereel: ret
-
-
-notplayingreel: cmp watchmode,1
- jnz notholdingreel
- mov ax,reeltohold
- mov reelpointer,ax
- call plotreel
- ret
-
-notholdingreel: cmp watchmode,2
- jnz notreleasehold
- dec speedcount
- cmp speedcount,-1
- jnz notlastspeed2
- mov al,watchspeed
- mov speedcount,al
- inc reeltohold
-notlastspeed2: mov ax,reeltohold
- cmp ax,endofholdreel
- jnz ismorereel2
- mov reeltohold,-1
- mov watchmode,-1
- mov al,destafterhold
- mov destination,al
- mov finaldest,al
- call autosetwalk
- ret
-ismorereel2: mov ax,reeltohold
- mov reelpointer,ax
- call plotreel
- ret
-
-notreleasehold: ret
-
- endp
-
-
-
-
-
-Checkforshake proc near
-
- cmp reallocation,26
- jnz notstartshake
- cmp ax,104
- jnz notstartshake
- mov shakecounter,-1
-notstartshake: ret
-
- endp
-
-
-
-
-
-Watchcount proc near
-
- cmp watchon,0
- jz nowatchworn
- inc timercount
- cmp timercount,9
- jz flashdots
- cmp timercount,18
- jz uptime
-nowatchworn: ret
-
-flashdots: mov ax,91*3+21
- mov di,268+4
- mov bx,21
- mov ds,charset1
- call showframe
- jmp finishwatch
-
-uptime: mov timercount,0
- add secondcount,1
- cmp secondcount,60
- jnz finishtime
- mov secondcount,0
- inc minutecount
- cmp minutecount,60
- jnz finishtime
- mov minutecount,0
- inc hourcount
- cmp hourcount,24
- jnz finishtime
- mov hourcount,0
-
-finishtime: call showtime
-finishwatch: mov watchdump,1
- ret
-
- endp
-
-
-
-Showtime proc near
-
- cmp watchon,0
- jz nowatch
-
- mov al,secondcount
- mov cl,0
- call twodigitnum
- push ax
- mov al,ah
- mov ah,0
- add ax,91*3+10
- mov ds,charset1
- mov di,282+5
- mov bx,21
- call showframe
- pop ax
- mov ah,0
- add ax,91*3+10
- mov ds,charset1
- mov di,282+9
- mov bx,21
- call showframe
-
- mov al,minutecount
- mov cl,0
- call twodigitnum
- push ax
- mov al,ah
- mov ah,0
- add ax,91*3
- mov ds,charset1
- mov di,270+5
- mov bx,21
- call showframe
- pop ax
- mov ah,0
- add ax,91*3
- mov ds,charset1
- mov di,270+11
- mov bx,21
- call showframe
-
- mov al,hourcount
- mov cl,0
- call twodigitnum
- push ax
- mov al,ah
- mov ah,0
- add ax,91*3
- mov ds,charset1
- mov di,256+5
- mov bx,21
- call showframe
- pop ax
- mov ah,0
- add ax,91*3
- mov ds,charset1
- mov di,256+11
- mov bx,21
- call showframe
-
- mov ax,91*3+20
- mov ds,charset1
- mov di,267+5
- mov bx,21
- call showframe
-nowatch: ret
-
-
- endp
-
-
-
-
-Dumpwatch proc near
-
- cmp watchdump,1
- jnz nodumpwatch
- mov di,256
- mov bx,21
- mov cl,40
- mov ch,12
- call multidump
- mov watchdump,0
-nodumpwatch: ret
-
- endp
-
-
-
-
-Showbyte proc near
-
- mov dl,al
- shr dl,1
- shr dl,1
- shr dl,1
- shr dl,1
- call onedigit
- mov [es:di],dl
- mov dl,al
- and dl,15
- call onedigit
- mov [es:di+1],dl
- add di,3
- ret
-
- endp
-
-
-Onedigit proc near
-
- cmp dl,10
- jnc morethan10
- add dl,"0"
- ret
-morethan10: sub dl,10
- add dl,"A"
- ret
-
- endp
-
-
-
-
-
-Twodigitnum proc near
-
- mov ah,cl
- dec ah
-numloop1: inc ah
- sub al,10
- jnc numloop1
- add al,10
- add al,cl
- ret
-
- endp
-
-
-
-
-
-Showword proc near
-
- mov ch,0
- mov bx,10000
- mov cl,47
-word1: inc cl
- sub ax,bx
- jnc word1
- add ax,bx
- call convnum
- mov [cs:di],cl
- mov bx,1000
- mov cl,47
-word2: inc cl
- sub ax,bx
- jnc word2
- add ax,bx
- call convnum
- mov [cs:di+1],cl
- mov bx,100
- mov cl,47
-word3: inc cl
- sub ax,bx
- jnc word3
- add ax,bx
- call convnum
- mov [cs:di+2],cl
- mov bx,10
- mov cl,47
-word4: inc cl
- sub ax,bx
- jnc word4
- add ax,bx
- call convnum
- mov [cs:di+3],cl
- add al,48
- mov cl,al
- call convnum
- mov [cs:di+4],cl
- ret
-
- endp
-
-
-
-
-Convnum proc near
-
- cmp ch,0
- jnz noconvnum
- cmp cl,"0"
- jnz notzeronum
- mov cl,32
- jmp noconvnum
-notzeronum: mov ch,1
-noconvnum: ret
-
- endp
-
-
-
-
-
-
-
-
-;---------------------------------------------Handling of pointer on screen----
-
-Mainscreen proc near
-
- mov inmaparea,0
- mov bx,offset cs:mainlist
- cmp watchon,1
- jz checkmain
- mov bx,offset cs:mainlist2
-checkmain: call checkcoords
- cmp walkandexam,0
- jz finishmain
- call walkandexamine
-finishmain: ret
-
-mainlist: dw 44,70,32,46,look
- dw 0,50,0,180,inventory
- dw 226,244,10,26,zoomonoff
- dw 226,244,26,40,saveload
- dw 240,260,100,124,madmanrun
- dw 0,320,0,200,identifyob
- dw 0ffffh
-
-mainlist2: dw 44,70,32,46,look
- dw 0,50,0,180,inventory
- dw 226+48,244+48,10,26,zoomonoff
- dw 226+48,244+48,26,40,saveload
- dw 240,260,100,124,madmanrun
- dw 0,320,0,200,identifyob
- dw 0ffffh
-
- endp
-
-
-
-
-
-
-Madmanrun proc near
-
- cmp location,14
- jnz identifyob
- cmp mapx,22
- jnz identifyob
- cmp pointermode,2
- jnz identifyob
- cmp madmanflag,0
- jnz identifyob
-
- cmp commandtype,211
- jz alreadyrun
- mov commandtype,211
- mov al,52
- call commandonly
-alreadyrun: cmp mousebutton,1
- jnz norun
- mov ax,mousebutton
- cmp ax,oldbutton
- jz norun
- mov lastweapon,8
-norun: ret
-
- endp
-
-
-
-
-
-
-Checkcoords proc near
+
+
+
+
+
+
+
+
+
+;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
+;³ ³
+;³ DREAMWEB ³
+;³ ³
+;³ ³
+;³ ³
+;³ ³
+;³ Written by Neil Dodwell. Graphics by Dave Dew. ³
+;³ ³
+;³ Started on Friday 28 December 1990 at 1:20 pm ³
+;³ ³
+;³ Copyright 1990/1991 Creative Reality ³ ³
+;³ ³
+;³ ³
+;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+;----------------------------------------------------------Assembly options----
+
+JUMPS
+
+playback equ 0
+recording equ 0
+debuglevel1 equ 0 ;memory debug on
+debuglevel2 equ 0 ;debug keys on+shouts
+demo equ 0
+CD equ 1
+Foreign equ 0
+Spanish equ 0
+German equ 0
+
+;----------------------------------------------------------------Code start----
+
+DREAMWEBPROG segment para public 'CODE'
+
+ assume cs:DREAMWEBPROG,ss:STACKSPACE
+
+
+
+
+;------------------------------------------------------------------Includes----
+
+include \pc\dreamweb\vars.asm ;variables and equates
+include \pc\dreamweb\sprite.asm ;sprite routines
+include \pc\dreamweb\vgagrafx.asm ;screen routines for vga
+include \pc\dreamweb\vgafades.asm ;fade routines
+include \pc\dreamweb\titles.asm ;guess!
+include \pc\dreamweb\print.asm ;text printing routines
+include \pc\dreamweb\object.asm ;pickup
+include \pc\dreamweb\backdrop.asm ;draws floor etc.
+include \pc\dreamweb\look.asm ;look command
+include \pc\dreamweb\talk.asm ;conversations
+include \pc\dreamweb\newplace.asm ;travel
+include \pc\dreamweb\monitor.asm ;network machine
+include \pc\dreamweb\use.asm ;individual use routines
+include \pc\dreamweb\keypad.asm ;accept code with keypad
+include \pc\dreamweb\saveload.asm ;in game options
+include \pc\dreamweb\sblaster.asm
+ if debuglevel1
+include \pc\dreamweb\debug.asm
+ else
+ if debuglevel2
+include \pc\dreamweb\debug.asm
+ endif
+ endif
+
+;-----------------------------------------------------------------Main loop----
+
+
+Dreamweb proc near
+
+ call seecommandtail
+
+ call checkbasemem
+ call soundstartup
+ call setkeyboardint
+ call setupemm
+ call allocatebuffers
+ call setmouse
+ call fadedos
+ call gettime
+
+ call clearbuffers
+ call clearpalette
+ call set16colpalette
+ call readsetdata
+ if demo
+ call changeroomnums
+ endif
+ mov wongame,0
+
+ mov dx,offset cs:basicsample
+ call loadsample
+ call setsoundoff
+
+ if demo
+ else
+ call scanfornames
+ cmp al,0
+ jnz dodecisions
+ endif
+
+ call setmode
+ call loadpalfromiff
+
+ call titles
+ call credits
+ jmp playgame
+
+dodecisions: call cls
+ call setmode
+ call decide
+ cmp getback,4
+ jz mainloop
+
+ call titles
+ call credits
+
+playgame: call clearchanges
+ call setmode
+ call loadpalfromiff
+ mov location,255
+ mov roomafterdream,1
+ if demo
+ mov newlocation,5
+ else
+ mov newlocation,35
+ endif
+ mov volume,7
+ call loadroom
+ call clearsprites
+ call initman
+ call entrytexts
+ call entryanims
+ mov destpos,3
+ call initialinv
+ mov lastflag,32
+ call startup1
+ mov volumeto,0
+ mov volumedirection,-1
+ mov commandtype,255
+ jmp mainloop
+
+loadnew: if demo
+ cmp newlocation,27
+ jnz not27
+ call fadescreendowns
+ mov cx,260
+ call hangon
+ call clearbeforeload
+ jmp playgame
+not27:
+ endif
+ call clearbeforeload
+ call loadroom
+ call clearsprites
+ call initman
+ call entrytexts
+ call entryanims
+ mov newlocation,255
+ call startup
+ mov commandtype,255
+ call worktoscreenm
+ jmp mainloop
+
+alreadyloaded: mov newlocation,255
+ call clearsprites
+ call initman
+ call startup
+ mov commandtype,255
+
+mainloop: call screenupdate
+ cmp wongame,0
+ jnz endofgame
+ cmp mandead,1
+ jz gameover
+ cmp mandead,2
+ jz gameover
+ cmp watchingtime,0
+ jz notwatching
+ mov al,finaldest
+ cmp al,manspath
+ jnz mainloop
+ dec watchingtime
+ jnz mainloop
+
+notwatching: cmp mandead,4
+ jz gameover
+ cmp newlocation,255
+ jnz loadnew
+ jmp mainloop
+
+gameover: if demo
+ call fadescreendowns
+ mov cx,260
+ call hangon
+ call clearbeforeload
+ jmp playgame
+ endif
+ call clearbeforeload
+ call showgun
+ call fadescreendown
+ mov cx,100
+ call hangon
+ jmp dodecisions
+
+endofgame: call clearbeforeload
+ call fadescreendowns
+ mov cx,200
+ call hangon
+ call endgame
+ jmp quickquit2
+
+ endp
+
+
+
+
+ endp
+
+
+
+ if demo
+
+Changeroomnums proc near
+
+ mov di,offset cs:roomdata+10
+ mov cx,50
+changenumloop: mov al,[cs:di]
+ cmp al,"0"
+ jnz nochange
+ mov al,[cs:di+1]
+ cmp al,"5"
+ jnz nochange
+ mov al,"6"
+ mov ah,"0"
+ mov [cs:di],ax
+nochange: add di,32
+ loop changenumloop
+ ret
+
+ endp
+
+ endif
+
+
+
+
+Entrytexts proc near
+
+ cmp location,21
+ jnz notloc15
+ mov al,28
+ mov cx,60
+ mov dx,11
+ mov bl,68
+ mov bh,64
+ call setuptimeduse
+ ret
+notloc15: cmp location,30
+ jnz notloc43
+ mov al,27
+ mov cx,60
+ mov dx,11
+ mov bl,68
+ mov bh,64
+ call setuptimeduse
+ ret
+notloc43: cmp location,23
+ jnz notloc23
+ mov al,29
+ mov cx,60
+ mov dx,11
+ mov bl,68
+ mov bh,64
+ call setuptimeduse
+ ret
+notloc23: cmp location,31
+ jnz notloc44
+ mov al,30
+ mov cx,60
+ mov dx,11
+ mov bl,68
+ mov bh,64
+ call setuptimeduse
+ ret
+notloc44: cmp location,20
+ jnz notsarters2
+ mov al,31
+ mov cx,60
+ mov dx,11
+ mov bl,68
+ mov bh,64
+ call setuptimeduse
+ ret
+notsarters2: cmp location,24
+ jnz notedenlob
+ mov al,32
+ mov cx,60
+ mov dx,3
+ mov bl,68
+ mov bh,64
+ call setuptimeduse
+ ret
+notedenlob: cmp location,34
+ jnz noteden2
+ mov al,33
+ mov cx,60
+ mov dx,3
+ mov bl,68
+ mov bh,64
+ call setuptimeduse
+ ret
+noteden2: ret
+
+ endp
+
+
+
+
+
+
+
+
+Entryanims proc near
+
+ mov reeltowatch,-1
+ mov watchmode,-1
+ cmp location,33
+ jnz notinthebeach
+ call switchryanoff
+ mov watchingtime,76*2
+ mov reeltowatch,0
+ mov endwatchreel,76
+ mov watchspeed,1
+ mov speedcount,1
+ ret
+notinthebeach: cmp location,44
+ jnz notsparkys
+ mov al,8
+ call resetlocation
+ mov watchingtime,50*2
+ mov reeltowatch,247
+ mov endwatchreel,297
+ mov watchspeed,1
+ mov speedcount,1
+ call switchryanoff
+ ret
+notsparkys: cmp location,22
+ jnz notinthelift
+ mov watchingtime,31*2
+ mov reeltowatch,0
+ mov endwatchreel,30
+ mov watchspeed,1
+ mov speedcount,1
+ call switchryanoff
+ ret
+notinthelift: cmp location,26
+ jnz notunderchurch
+ mov symboltopnum,2
+ mov symbolbotnum,1
+ ret
+notunderchurch: cmp location,45
+ jnz notenterdream
+ mov keeperflag,0
+ mov watchingtime,296
+ mov reeltowatch,45
+ mov endwatchreel,198
+ mov watchspeed,1
+ mov speedcount,1
+ call switchryanoff
+ ret
+notenterdream: cmp reallocation,46
+ jnz notcrystal
+ cmp sartaindead,1
+ jnz notcrystal
+ mov al,0
+ call removefreeobject
+ ret
+notcrystal: cmp location,9
+ jnz nottopchurch
+ mov al,2
+ call checkifpathison
+ jz nottopchurch
+ cmp aidedead,0
+ jz nottopchurch
+ mov al,3
+ call checkifpathison
+ jnz makedoorsopen
+ mov al,2
+ call turnpathon
+makedoorsopen: mov al,4
+ call removesetobject
+ mov al,5
+ call placesetobject
+ ret
+nottopchurch: cmp location,47
+ jnz notdreamcentre
+ mov al,4
+ call placesetobject
+ mov al,5
+ call placesetobject
+ ret
+notdreamcentre: cmp location,38
+ jnz notcarpark
+ mov watchingtime,57*2
+ mov reeltowatch,4
+ mov endwatchreel,57
+ mov watchspeed,1
+ mov speedcount,1
+ call switchryanoff
+ ret
+notcarpark: cmp location,32
+ jnz notalley
+ mov watchingtime,66*2
+ mov reeltowatch,0
+ mov endwatchreel,66
+ mov watchspeed,1
+ mov speedcount,1
+ call switchryanoff
+ ret
+notalley: cmp location,24
+ jnz notedensagain
+ mov al,2
+ mov ah,roomnum
+ dec ah
+ call turnanypathon
+notedensagain: ret
+
+ endp
+
+
+
+
+
+
+ if demo
+Initialinv proc near
+
+ mov al,11
+ mov ah,5
+ call pickupob
+ mov al,12
+ mov ah,6
+ call pickupob
+ mov al,13
+ mov ah,7
+ call pickupob
+ mov al,14
+ mov ah,8
+ call pickupob
+ mov al,18
+ mov ah,0
+ call pickupob
+ mov al,19
+ mov ah,1
+ call pickupob
+ mov al,20
+ mov ah,9
+ call pickupob
+ mov al,16
+ mov ah,2
+ call pickupob
+
+ mov al,2
+ mov ah,4
+ call pickupob
+
+ mov al,29
+ mov ah,10
+ call pickupob
+ mov al,33
+ mov ah,11
+ call pickupob
+ mov al,44
+ mov ah,12
+ call pickupob
+ mov card1money,12342
+ ret
+
+ endp
+ else
+Initialinv proc near
+
+ cmp reallocation,24
+ jz isedens
+ ret
+
+isedens: mov al,11
+ mov ah,5
+ call pickupob
+ mov al,12
+ mov ah,6
+ call pickupob
+ mov al,13
+ mov ah,7
+ call pickupob
+ mov al,14
+ mov ah,8
+ call pickupob
+ mov al,18
+ mov al,18
+ mov ah,0
+ call pickupob
+ mov al,19
+ mov ah,1
+ call pickupob
+ mov al,20
+ mov ah,9
+ call pickupob
+ mov al,16
+ mov ah,2
+ call pickupob
+
+ mov watchmode,1
+ mov reeltohold,0
+ mov endofholdreel,6
+ mov watchspeed,1
+ mov speedcount,1
+ call switchryanoff
+ ret
+
+ endp
+
+ endif
+
+
+
+
+
+
+
+
+
+
+
+Pickupob proc near
+
+ mov lastinvpos,ah
+ mov objecttype,2
+ mov itemframe,al
+ mov command,al
+ call getanyad
+ call transfertoex
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+;---------------------------------------------------------Memory allocation----
+
+
+
+
+Setupemm proc near
+
+ cmp soundint,255
+ jz noneedforemm
+ call checkforemm
+
+ mov ah,43h ;allocate handle and 160 pages
+ mov bx,176 ;was 176
+ int 67h
+ cmp ah,0
+ jnz emmerror1 ;if there's an error drop to DOS
+ mov emmhandle,dx
+ mov ah,41h ;get the page frame base address
+ int 67h
+ cmp ah,0
+ jnz emmerror1
+ mov emmpageframe,bx
+ mov ax,bx
+ mov cl,12
+ shr ax,cl
+ mov emmhardwarepage,al
+noneedforemm: ret
+emmerror1: mov gameerror,1
+ jmp quickquit2
+
+ endp
+
+
+
+
+
+
+
+
+Removeemm proc near
+
+ cmp soundint,255
+ jz noneedtoremove
+ mov ah,45h
+ mov dx,emmhandle
+ int 67h
+noneedtoremove: ret
+
+ endp
+
+
+
+
+
+Checkforemm proc near
+
+ ret
+
+ endp
+
+
+
+
+Checkbasemem proc near
+
+ mov bx,howmuchalloc
+ cmp bx,9360h
+ jnc enoughmem
+ mov gameerror,5
+ jmp quickquit
+enoughmem: ret
+
+ endp
+
+
+
+Allocatebuffers proc near
+
+ mov bx,lengthofextra/16
+ call allocatemem
+ mov extras,ax
+
+ call trysoundalloc
+ mov bx,lengthofmap/16
+ call allocatemem
+ mov mapdata,ax
+
+ call trysoundalloc
+ mov bx,lengthofbuffer/16
+ call allocatemem
+ mov buffers,ax
+
+ call trysoundalloc
+ mov bx,freedatlen/16
+ call allocatemem
+ mov freedat,ax
+
+ call trysoundalloc
+ mov bx,setdatlen/16
+ call allocatemem
+ mov setdat,ax
+
+ call trysoundalloc
+ mov bx,lenofmapstore/16
+ call allocatemem
+ mov mapstore,ax
+
+ if recording
+ mov bx,1028
+ call allocatemem
+ mov recordspace,ax
+ endif
+
+ if playback
+ mov bx,1028
+ call allocatemem
+ mov recordspace,ax
+ endif
+
+ call allocatework
+
+ mov bx,2048/16
+ call allocatemem
+ mov sounddata,ax
+
+ mov bx,2048/16
+ call allocatemem
+ mov sounddata2,ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Clearbuffers proc near
+
+ mov es,buffers
+ mov cx,lengthofbuffer/2
+ mov ax,0
+ mov di,0
+ rep stosw
+
+ mov es,extras
+ mov cx,lengthofextra/2
+ mov ax,0ffffh
+ mov di,0
+ rep stosw
+
+ mov es,buffers
+ mov di,initialreelrouts
+ push cs
+ pop ds
+ mov si,offset cs:reelroutines
+ mov cx,lenofreelrouts
+ rep movsb
+
+ mov es,buffers
+ mov di,initialvars
+ push cs
+ pop ds
+ mov si,offset cs:startvars
+ mov cx,lengthofvars
+ rep movsb
+ call clearchanges
+ ret
+
+ endp
+
+
+
+
+
+
+Clearchanges proc near
+
+ mov es,buffers
+ mov cx,numchanges*2
+ mov ax,0ffffh
+ mov di,listofchanges
+ rep stosw
+ mov ds,buffers
+ mov si,initialreelrouts
+ push cs
+ pop es
+ mov di,offset cs:reelroutines
+ mov cx,lenofreelrouts
+ rep movsb
+
+ mov ds,buffers
+ mov si,initialvars
+ push cs
+ pop es
+ mov di,offset cs:startvars
+ mov cx,lengthofvars
+ rep movsb
+
+ mov expos,0
+ mov exframepos,0
+ mov extextpos,0
+ mov es,extras
+ mov cx,lengthofextra/2
+ mov ax,0ffffh
+ mov di,0
+ rep stosw
+
+ push cs
+ pop es
+ mov di,offset cs:roomscango
+ mov al,1
+ stosb
+ stosb
+ mov al,0
+ stosb
+ mov al,1
+ stosb
+ mov ax,0
+ mov cx,6
+ rep stosw
+ ret
+
+ endp
+
+
+
+
+
+
+
+Clearbeforeload proc near ;deallocates variable buffers
+ ;and clears out fixed ones
+ cmp roomloaded,1
+ jnz noclear
+ call clearreels
+ call clearrest
+ mov roomloaded,0
+noclear: ret
+
+ endp
+
+
+
+;Clearnoreels proc near
+;
+; cmp roomloaded,1
+; jnz noclear2
+; call clearrest
+; mov roomloaded,0
+;noclear2: ret
+;
+; endp
+
+
+
+
+
+
+Clearreels proc near
+
+ mov es,reel1
+ call deallocatemem
+ mov es,reel2
+ call deallocatemem
+ mov es,reel3
+ call deallocatemem
+ ret
+
+ endp
+
+
+
+Clearrest proc near
+
+ mov es,mapdata
+ mov cx,maplen/2
+ mov ax,0
+ mov di,map
+ rep stosw
+
+ mov es,backdrop
+ call deallocatemem
+ mov es,setframes
+ call deallocatemem
+ mov es,reels
+ call deallocatemem
+ mov es,people
+ call deallocatemem
+ mov es,setdesc
+ call deallocatemem
+ mov es,blockdesc
+ call deallocatemem
+ mov es,roomdesc
+ call deallocatemem
+ mov es,freeframes
+ call deallocatemem
+ mov es,freedesc
+ call deallocatemem
+ ret
+
+ endp
+
+
+
+
+
+
+Deallocatemem proc near
+
+ mov ah,49h
+ int 21h
+ jc deallerror
+ ret
+deallerror: mov gameerror,4
+ jmp quickquit2
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Allocatemem proc near
+
+ add bx,2
+ mov ah,48h
+ int 21h
+ jc memerror
+ ret
+
+memerror: mov gameerror,3
+ jmp quickquit2
+
+ endp
+
+
+
+
+Seecommandtail proc near
+
+ mov soundbaseadd,220h
+ mov soundint,5
+ mov sounddmachannel,1
+ mov brightness,0
+
+ mov bx,2
+ mov ax,[es:bx]
+ mov dx,es
+ sub ax,dx
+ mov howmuchalloc,ax
+
+ mov bx,02ch
+ mov ax,[es:bx]
+ push es bx
+
+ mov es,ax
+ mov bx,0
+findblaster: mov ax,[es:bx]
+ cmp ax,0
+ jz endofenvironment
+ cmp al,"B"
+ jnz notblast
+ cmp ah,"L"
+ jnz notblast
+ cmp byte ptr [es:bx+2],"A"
+ jnz notblast
+ cmp byte ptr [es:bx+3],"S"
+ jnz notblast
+ cmp byte ptr [es:bx+4],"T"
+ jnz notblast
+ cmp byte ptr [es:bx+5],"E"
+ jnz notblast
+ cmp byte ptr [es:bx+6],"R"
+ jnz notblast
+ add bx,7
+ call parseblaster
+ jmp endofenvironment
+notblast: inc bx
+ jmp findblaster
+
+endofenvironment: pop bx es
+ mov bx,81h
+ call parseblaster
+ ret
+
+ endp
+
+
+
+Parseblaster proc near
+
+lookattail: mov al,[es:bx]
+ cmp al,0
+ jz endtail
+ cmp al,13
+ jz endtail
+ cmp al,"i"
+ jz issoundint
+ cmp al,"I"
+ jz issoundint
+ cmp al,"b"
+ jz isbright
+ cmp al,"B"
+ jz isbright
+ cmp al,"a"
+ jz isbaseadd
+ cmp al,"A"
+ jz isbaseadd
+ cmp al,"n"
+ jz isnosound
+ cmp al,"N"
+ jz isnosound
+ cmp al,"d"
+ jz isdma
+ cmp al,"D"
+ jz isdma
+ inc bx
+ loop lookattail
+ ret
+
+issoundint: mov al,[es:bx+1]
+ sub al,"0"
+ mov soundint,al
+ inc bx
+ jmp lookattail
+isdma: mov al,[es:bx+1]
+ sub al,"0"
+ mov sounddmachannel,al
+ inc bx
+ jmp lookattail
+isbaseadd: push cx
+ mov al,[es:bx+2]
+ sub al,"0"
+ mov ah,0
+ mov cl,4
+ shl ax,cl
+ add ax,200h
+ mov soundbaseadd,ax
+ pop cx
+ inc bx
+ jmp lookattail
+isbright: mov brightness,1
+ inc bx
+ jmp lookattail
+isnosound: mov soundint,255
+ inc bx
+ jmp lookattail
+endtail: ret
+
+ endp
+
+
+
+
+;-------------------------------------------------------High level routines----
+
+Startup proc near
+
+ mov currentkey,0
+ mov mainmode,0
+ call createpanel
+ mov newobs,1
+ call drawfloor
+ call showicon
+ call getunderzoom
+ call spriteupdate
+ call printsprites
+ call undertextline
+ call reelsonscreen
+ call atmospheres
+ ret
+
+ endp
+
+
+
+
+Startup1 proc near
+
+
+ call clearpalette
+ mov throughdoor,0
+ mov currentkey,"0"
+ mov mainmode,0
+ call createpanel
+ mov newobs,1
+ call drawfloor
+
+ call showicon
+ call getunderzoom
+ call spriteupdate
+ call printsprites
+ call undertextline
+ call reelsonscreen
+ call atmospheres
+ call worktoscreen
+ call fadescreenup
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+;--------------------------------------------------Scroll location routines----
+
+
+
+
+
+Screenupdate proc near
+
+ call newplace
+ call mainscreen
+ call animpointer
+ call showpointer
+ cmp watchingtime,0
+ jnz iswatchingmode
+ cmp newlocation,255
+ jnz finishearly
+iswatchingmode: call vsync
+ call readmouse1
+ call dumppointer
+ call dumptextline
+ call delpointer
+ call autolook
+ call spriteupdate
+ call watchcount
+ call zoom
+ call showpointer
+ cmp wongame,0
+ jnz finishearly
+
+ call vsync
+ call readmouse2
+ call dumppointer
+ call dumpzoom
+ call delpointer
+ call deleverything
+ call printsprites
+ call reelsonscreen
+ call afternewroom
+ call showpointer
+
+ call vsync
+ call readmouse3
+ call dumppointer
+ call dumpmap
+ call dumptimedtext
+ call delpointer
+ call showpointer
+
+ call vsync
+ call readmouse4
+ call dumppointer
+ call dumpwatch
+ call delpointer
+
+finishearly: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Watchreel proc near
+
+ cmp reeltowatch,-1
+ jz notplayingreel
+ mov al,manspath
+ cmp al,finaldest
+ jnz waitstopwalk
+ mov al,turntoface
+ cmp al,facing
+ jz notwatchpath
+waitstopwalk: ret
+
+notwatchpath: dec speedcount
+ cmp speedcount,-1
+ jnz showwatchreel
+ mov al,watchspeed
+ mov speedcount,al
+ mov ax,reeltowatch
+ cmp ax,endwatchreel
+ jnz ismorereel
+ cmp watchingtime,0
+ jnz showwatchreel
+ mov reeltowatch,-1
+ mov watchmode,-1
+ cmp reeltohold,-1
+ jz nomorereel
+ mov watchmode,1
+ jmp notplayingreel
+ismorereel: inc reeltowatch
+showwatchreel: mov ax,reeltowatch
+ mov reelpointer,ax
+ call plotreel
+ mov ax,reelpointer
+ mov reeltowatch,ax
+ call checkforshake
+nomorereel: ret
+
+
+notplayingreel: cmp watchmode,1
+ jnz notholdingreel
+ mov ax,reeltohold
+ mov reelpointer,ax
+ call plotreel
+ ret
+
+notholdingreel: cmp watchmode,2
+ jnz notreleasehold
+ dec speedcount
+ cmp speedcount,-1
+ jnz notlastspeed2
+ mov al,watchspeed
+ mov speedcount,al
+ inc reeltohold
+notlastspeed2: mov ax,reeltohold
+ cmp ax,endofholdreel
+ jnz ismorereel2
+ mov reeltohold,-1
+ mov watchmode,-1
+ mov al,destafterhold
+ mov destination,al
+ mov finaldest,al
+ call autosetwalk
+ ret
+ismorereel2: mov ax,reeltohold
+ mov reelpointer,ax
+ call plotreel
+ ret
+
+notreleasehold: ret
+
+ endp
+
+
+
+
+
+Checkforshake proc near
+
+ cmp reallocation,26
+ jnz notstartshake
+ cmp ax,104
+ jnz notstartshake
+ mov shakecounter,-1
+notstartshake: ret
+
+ endp
+
+
+
+
+
+Watchcount proc near
+
+ cmp watchon,0
+ jz nowatchworn
+ inc timercount
+ cmp timercount,9
+ jz flashdots
+ cmp timercount,18
+ jz uptime
+nowatchworn: ret
+
+flashdots: mov ax,91*3+21
+ mov di,268+4
+ mov bx,21
+ mov ds,charset1
+ call showframe
+ jmp finishwatch
+
+uptime: mov timercount,0
+ add secondcount,1
+ cmp secondcount,60
+ jnz finishtime
+ mov secondcount,0
+ inc minutecount
+ cmp minutecount,60
+ jnz finishtime
+ mov minutecount,0
+ inc hourcount
+ cmp hourcount,24
+ jnz finishtime
+ mov hourcount,0
+
+finishtime: call showtime
+finishwatch: mov watchdump,1
+ ret
+
+ endp
+
+
+
+Showtime proc near
+
+ cmp watchon,0
+ jz nowatch
+
+ mov al,secondcount
+ mov cl,0
+ call twodigitnum
+ push ax
+ mov al,ah
+ mov ah,0
+ add ax,91*3+10
+ mov ds,charset1
+ mov di,282+5
+ mov bx,21
+ call showframe
+ pop ax
+ mov ah,0
+ add ax,91*3+10
+ mov ds,charset1
+ mov di,282+9
+ mov bx,21
+ call showframe
+
+ mov al,minutecount
+ mov cl,0
+ call twodigitnum
+ push ax
+ mov al,ah
+ mov ah,0
+ add ax,91*3
+ mov ds,charset1
+ mov di,270+5
+ mov bx,21
+ call showframe
+ pop ax
+ mov ah,0
+ add ax,91*3
+ mov ds,charset1
+ mov di,270+11
+ mov bx,21
+ call showframe
+
+ mov al,hourcount
+ mov cl,0
+ call twodigitnum
+ push ax
+ mov al,ah
+ mov ah,0
+ add ax,91*3
+ mov ds,charset1
+ mov di,256+5
+ mov bx,21
+ call showframe
+ pop ax
+ mov ah,0
+ add ax,91*3
+ mov ds,charset1
+ mov di,256+11
+ mov bx,21
+ call showframe
+
+ mov ax,91*3+20
+ mov ds,charset1
+ mov di,267+5
+ mov bx,21
+ call showframe
+nowatch: ret
+
+
+ endp
+
+
+
+
+Dumpwatch proc near
+
+ cmp watchdump,1
+ jnz nodumpwatch
+ mov di,256
+ mov bx,21
+ mov cl,40
+ mov ch,12
+ call multidump
+ mov watchdump,0
+nodumpwatch: ret
+
+ endp
+
+
+
+
+Showbyte proc near
+
+ mov dl,al
+ shr dl,1
+ shr dl,1
+ shr dl,1
+ shr dl,1
+ call onedigit
+ mov [es:di],dl
+ mov dl,al
+ and dl,15
+ call onedigit
+ mov [es:di+1],dl
+ add di,3
+ ret
+
+ endp
+
+
+Onedigit proc near
+
+ cmp dl,10
+ jnc morethan10
+ add dl,"0"
+ ret
+morethan10: sub dl,10
+ add dl,"A"
+ ret
+
+ endp
+
+
+
+
+
+Twodigitnum proc near
+
+ mov ah,cl
+ dec ah
+numloop1: inc ah
+ sub al,10
+ jnc numloop1
+ add al,10
+ add al,cl
+ ret
+
+ endp
+
+
+
+
+
+Showword proc near
+
+ mov ch,0
+ mov bx,10000
+ mov cl,47
+word1: inc cl
+ sub ax,bx
+ jnc word1
+ add ax,bx
+ call convnum
+ mov [cs:di],cl
+ mov bx,1000
+ mov cl,47
+word2: inc cl
+ sub ax,bx
+ jnc word2
+ add ax,bx
+ call convnum
+ mov [cs:di+1],cl
+ mov bx,100
+ mov cl,47
+word3: inc cl
+ sub ax,bx
+ jnc word3
+ add ax,bx
+ call convnum
+ mov [cs:di+2],cl
+ mov bx,10
+ mov cl,47
+word4: inc cl
+ sub ax,bx
+ jnc word4
+ add ax,bx
+ call convnum
+ mov [cs:di+3],cl
+ add al,48
+ mov cl,al
+ call convnum
+ mov [cs:di+4],cl
+ ret
+
+ endp
+
+
+
+
+Convnum proc near
+
+ cmp ch,0
+ jnz noconvnum
+ cmp cl,"0"
+ jnz notzeronum
+ mov cl,32
+ jmp noconvnum
+notzeronum: mov ch,1
+noconvnum: ret
+
+ endp
+
+
+
+
+
+
+
+
+;---------------------------------------------Handling of pointer on screen----
+
+Mainscreen proc near
+
+ mov inmaparea,0
+ mov bx,offset cs:mainlist
+ cmp watchon,1
+ jz checkmain
+ mov bx,offset cs:mainlist2
+checkmain: call checkcoords
+ cmp walkandexam,0
+ jz finishmain
+ call walkandexamine
+finishmain: ret
+
+mainlist: dw 44,70,32,46,look
+ dw 0,50,0,180,inventory
+ dw 226,244,10,26,zoomonoff
+ dw 226,244,26,40,saveload
+ dw 240,260,100,124,madmanrun
+ dw 0,320,0,200,identifyob
+ dw 0ffffh
+
+mainlist2: dw 44,70,32,46,look
+ dw 0,50,0,180,inventory
+ dw 226+48,244+48,10,26,zoomonoff
+ dw 226+48,244+48,26,40,saveload
+ dw 240,260,100,124,madmanrun
+ dw 0,320,0,200,identifyob
+ dw 0ffffh
+
+ endp
+
+
+
+
+
+
+Madmanrun proc near
+
+ cmp location,14
+ jnz identifyob
+ cmp mapx,22
+ jnz identifyob
+ cmp pointermode,2
+ jnz identifyob
+ cmp madmanflag,0
+ jnz identifyob
+
+ cmp commandtype,211
+ jz alreadyrun
+ mov commandtype,211
+ mov al,52
+ call commandonly
+alreadyrun: cmp mousebutton,1
+ jnz norun
+ mov ax,mousebutton
+ cmp ax,oldbutton
+ jz norun
+ mov lastweapon,8
+norun: ret
+
+ endp
+
+
+
+
+
+
+Checkcoords proc near
cmp newlocation,255 ;objects keep enumerated even in loading state, fixme
jz loop048
ret
-
-loop048: mov ax,[cs:bx]
- cmp ax,0ffffh
- jz nonefound
- push bx
- cmp mousex,ax
- jl over045
- mov ax,[cs:bx+2]
- cmp mousex,ax
- jge over045
- mov ax,[cs:bx+4]
- cmp mousey,ax
- jl over045
- mov ax,[cs:bx+6]
- cmp mousey,ax
- jge over045
- mov ax,[cs:bx+8]
- call ax
-finished: pop ax
- ret
-over045: pop bx
- add bx,10
- jmp loop048
-nonefound: ret
-
- endp
-
-
-
-
-
-;-------------------------------------------Printing of icons during scroll----
-
-
-
-
-
-Identifyob proc near
-
- cmp watchingtime,0
- jnz blank
-
- mov ax,mousex
- sub ax,mapadx
- cmp ax,22*8
- jc notover1
- call blank
- ret
-
-notover1: mov bx,mousey
- sub bx,mapady
- cmp bx,20*8
- jc notover2
- call blank
- ret
-
-notover2: mov inmaparea,1
- mov ah,bl
- push ax
- call findpathofpoint
- mov pointerspath,dl
- pop ax
- push ax
- call findfirstpath
- mov pointerfirstpath,al
- pop ax
-
- call checkifex
- jnz finishidentify
- call checkiffree
- jnz finishidentify
- call checkifperson
- jnz finishidentify
- call checkifset
- jnz finishidentify
-
- mov ax,mousex
- sub ax,mapadx
- mov cl,al
- mov ax,mousey
- sub ax,mapady
- mov ch,al
- call checkone
- cmp al,0
- jz nothingund
- ;cmp watchingtime,0
- ;jnz nothingund
- cmp mandead,1
- jz nothingund
- mov ah,3
- call obname
-finishidentify: ret
-
-nothingund: call blank
- ret
-
- endp
-
-
-
-
-
-
-
-
-Checkifperson proc near
-
- mov es,buffers
- mov bx,peoplelist
- mov cx,12
-identifyreel: push cx
-
- cmp byte ptr [es:bx+4],255
- jz notareelid
-
- push es bx ax
- mov ax,[es:bx+0]
- mov reelpointer,ax
- call getreelstart
- cmp [es:si+2],0ffffh
- jnz notblankpers
- add si,5
-notblankpers: mov cx,[es:si+2] ;x,y of reel slot
- mov ax,[es:si+0] ;frame number
- push cx
- call getreelframeax
- pop cx
- add cl,[es:bx+4]
- add ch,[es:bx+5]
- mov dx,cx
- add dl,[es:bx+0]
- add dh,[es:bx+1]
- pop ax bx es
-
- cmp al,cl
- jc notareelid
- cmp ah,ch
- jc notareelid
- cmp al,dl
- jnc notareelid
- cmp ah,dh
- jnc notareelid
-
- pop cx
- mov ax,[es:bx+2]
- mov persondata,ax
- mov al,[es:bx+4]
- mov ah,5
- call obname
- mov al,0
- cmp al,1
- ret
-
-notareelid: pop cx
- add bx,5
- dec cx
- jnz identifyreel
- ret
-
- endp
-
-
-
-
-
-
-
-
-Checkifset proc near
-
- mov es,buffers
- mov bx,setlist+(127*5)
- mov cx,127
-identifyset: cmp byte ptr [es:bx+4],255
- jz notasetid
- cmp al,[es:bx]
- jc notasetid
- cmp al,[es:bx+2]
- jnc notasetid
- cmp ah,[es:bx+1]
- jc notasetid
- cmp ah,[es:bx+3]
- jnc notasetid
- call pixelcheckset
- jz notasetid
- call isitdescribed
- jz notasetid
- mov al,[es:bx+4]
- mov ah,1
- call obname
- mov al,0
- cmp al,1
- ret
-notasetid: sub bx,5
- dec cx
- cmp cx,-1
- jnz identifyset
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Checkifex proc near
-
- mov es,buffers
- mov bx,exlist+(99*5)
- mov cx,99
-identifyex: cmp byte ptr [es:bx+4],255
- jz notanexid
- cmp al,[es:bx]
- jc notanexid
- cmp al,[es:bx+2]
- jnc notanexid
- cmp ah,[es:bx+1]
- jc notanexid
- cmp ah,[es:bx+3]
- jnc notanexid
- mov al,[es:bx+4]
- mov ah,4
- call obname
- mov al,1
- cmp al,0
- ret
-notanexid: sub bx,5
- dec cx
- cmp cx,-1
- jnz identifyex
- ret
-
- endp
-
-
-
-
-
-
-Checkiffree proc near
-
- mov es,buffers
- mov bx,freelist+(79*5)
- mov cx,79
-identifyfree: cmp byte ptr [es:bx+4],255
- jz notafreeid
- cmp al,[es:bx]
- jc notafreeid
- cmp al,[es:bx+2]
- jnc notafreeid
- cmp ah,[es:bx+1]
- jc notafreeid
- cmp ah,[es:bx+3]
- jnc notafreeid
- mov al,[es:bx+4]
- mov ah,2
- call obname
- mov al,0
- cmp al,1
- ret
-notafreeid: sub bx,5
- dec cx
- cmp cx,-1
- jnz identifyfree
- ret
-
- endp
-
-
-
-
-
-
-Isitdescribed proc near
-
- push ax cx es bx
- mov al,[es:bx+4] ;get object number
- mov ah,0
- add ax,ax
- mov bx,ax
- mov es,setdesc
- add bx,settextdat
- mov ax,[es:bx]
- add ax,settext
- mov bx,ax
- mov dl,[es:bx]
- pop bx es cx ax
- cmp dl,0
- ret
-
- endp
-
-
-
-
-
-
-
-
-;Getcurrentpath proc near ;routine finds out which path
-; ;block the pointer is in.
-; push ax ;used to see if an object is
-; call findpathofpoint ;close or not
-; pop ax
-; mov pointerspath,dl
-; ret
-;
-; endp
-
-
-
-
-
-Findpathofpoint proc near
-
- push ax
- mov bx,pathdata
- mov es,reels
- mov al,roomnum
- mov ah,0
- mov cx,144
- mul cx
- add bx,ax
- pop cx
-
- mov dl,0
-pathloop: mov al,[es:bx+6]
- cmp al,255
- jnz flunkedit
- mov ax,[es:bx+2]
- cmp ax,0ffffh
- jz flunkedit
- cmp cl,al
- jc flunkedit
- cmp ch,ah
- jc flunkedit
- mov ax,[es:bx+4]
- cmp cl,al
- jnc flunkedit
- cmp ch,ah
- jnc flunkedit
- jmp gotvalidpath
-flunkedit: add bx,8
- inc dl
- cmp dl,12
- jnz pathloop
- mov dl,255
-gotvalidpath: ret
-
- endp
-
-
-
-
-
-Findfirstpath proc near ;similar to last routine, but it
- ;searches each path to see if
- push ax ;pointer is within it, regardless
- mov bx,pathdata ;of whether the path is on or off
- mov es,reels ;it returns the on or off state in
- mov al,roomnum ;al (255=on 0=off) 0 if no path
- mov ah,0
- mov cx,144
- mul cx
- add bx,ax
- pop cx
-
- mov dl,0
-fpathloop: mov ax,[es:bx+2]
- cmp ax,0ffffh
- jz nofirst
- cmp cl,al
- jc nofirst
- cmp ch,ah
- jc nofirst
- mov ax,[es:bx+4]
- cmp cl,al
- jnc nofirst
- cmp ch,ah
- jnc nofirst
- jmp gotfirst
-nofirst: add bx,8
- inc dl
- cmp dl,12
- jnz fpathloop
- mov al,0
- ret
-gotfirst: mov al,[es:bx+6]
- ret
-
- endp
-
-
-
-
-
-
-
-
-Turnpathon proc near ;turns path on permanently
-
- push ax ax
- mov cl,255
- mov ch,roomnum
- add ch,100
- call findormake
- pop ax
- call getroomspaths
- pop ax
- cmp al,255
- jz nopathon
- mov ah,0
- add ax,ax
- add ax,ax
- add ax,ax
- add bx,ax
- mov al,255
- mov [es:bx+6],al
-nopathon: ret
-
- endp
-
-
-
-
-
-
-
-Turnpathoff proc near ;turns path on permanently
-
- push ax ax
- mov cl,0
- mov ch,roomnum
- add ch,100
- call findormake
- pop ax
- call getroomspaths
- pop ax
- cmp al,255
- jz nopathoff
- mov ah,0
- add ax,ax
- add ax,ax
- add ax,ax
- add bx,ax
- mov al,0
- mov [es:bx+6],al
-nopathoff: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Turnanypathon proc near
-
- push ax ax
- mov cl,255
- mov ch,ah
- add ch,100
- call findormake
- pop ax
- mov al,ah
- mov ah,0
- mov cx,144
- mul cx
- mov es,reels
- mov bx,pathdata
- add bx,ax
- pop ax
- mov ah,0
- add ax,ax
- add ax,ax
- add ax,ax
- add bx,ax
- mov al,255
- mov [es:bx+6],al
- ret
-
- endp
-
-
-
-
-
-
-Turnanypathoff proc near
-
- push ax ax
- mov cl,0
- mov ch,ah
- add ch,100
- call findormake
- pop ax
- mov al,ah
- mov ah,0
- mov cx,144
- mul cx
- mov es,reels
- mov bx,pathdata
- add bx,ax
- pop ax
- mov ah,0
- add ax,ax
- add ax,ax
- add ax,ax
- add bx,ax
- mov al,0
- mov [es:bx+6],al
- ret
-
- endp
-
-
-
-
-
-Checkifpathison proc near
-
- push ax
- call getroomspaths
- pop ax
- mov ah,0
- add ax,ax
- add ax,ax
- add ax,ax
- add bx,ax
- mov al,[es:bx+6]
- cmp al,255
- ret
-
- endp
-
-
-
-
-
-Afternewroom proc near
-
- cmp nowinnewroom,0
- jz notnew
- mov timecount,0
- call createpanel
- mov commandtype,0
- call findroominloc
-
- cmp ryanon,1
- jz ryansoff
-
- mov al,ryanx
- add al,12
- mov ah,ryany
- add ah,12
- call findpathofpoint
- mov manspath,dl
- call findxyfrompath
- mov resetmanxy,1
-
-ryansoff: mov newobs,1
- call drawfloor
- mov lookcounter,160
- mov nowinnewroom,0
-
- call showicon
- call spriteupdate
- call printsprites
- call undertextline
- call reelsonscreen
- call mainscreen
- call getunderzoom
- call zoom
- call worktoscreenm
- call walkintoroom
- call reminders
- call atmospheres
-notnew: ret
-
- endp
-
-
-
-
-
-
-Atmospheres proc near
-
- mov cl,mapx
- mov ch,mapy
- mov bx,offset cs:atmospherelist
-nextatmos: mov al,[cs:bx]
- cmp al,255
- jz nomoreatmos
- cmp al,reallocation
- jnz wrongatmos
- mov ax,[cs:bx+1]
- cmp ax,cx
- jnz wrongatmos
- mov ax,[cs:bx+3]
- cmp al,ch0playing
- jz playingalready
- cmp location,45
- jnz notweb
- cmp reeltowatch,45
- jz wrongatmos
-notweb: call playchannel0
- cmp reallocation,2
- cmp mapy,0
- jz fullvol
- jnz notlouisvol
- cmp mapy,10
- jnz notlouisvol
- cmp mapx,22
- jnz notlouisvol
- mov volume,5
-notlouisvol: if cd
- cmp reallocation,14
- jnz notmad1
- cmp mapx,33
- jz ismad2
- cmp mapx,22
- jnz notmad1
- mov volume,5
- ret
-ismad2: mov volume,0
- ret
-notmad1: endif
-playingalready: cmp reallocation,2
- jnz notlouisvol2
- cmp mapx,22
- jz louisvol
- cmp mapx,11
- jnz notlouisvol2
-fullvol: mov volume,0
-notlouisvol2: ret
-louisvol: mov volume,5
- ret
-wrongatmos: add bx,5
- jmp nextatmos
-nomoreatmos: call cancelch0
- ret
-
-atmospherelist: db 0,33,10,15,255
- db 0,22,10,15,255
- db 0,22,0,15,255
- db 0,11,0,15,255
- db 0,11,10,15,255
- db 0,0,10,15,255
-
- db 1,44,10,6,255 ;location,map x,y,sound,repeat
- db 1,44,0,13,255
-
- db 2,33,0,6,255
- db 2,22,0,5,255
- db 2,22,10,16,255
- db 2,11,10,16,255
-
- db 3,44,0,15,255
- db 3,33,10,6,255
- db 3,33,0,5,255
-
- db 4,11,30,6,255
- db 4,22,30,5,255
- db 4,22,20,13,255
-
- db 10,33,30,6,255
- db 10,22,30,6,255
-
- db 9,22,10,6,255
- db 9,22,20,16,255
- db 9,22,30,16,255
- db 9,22,40,16,255
- db 9,22,50,16,255
-
- db 6,11,30,6,255
- db 6,0,10,15,255
- db 6,0,20,15,255
- db 6,11,20,15,255
- db 6,22,20,15,255
-
- db 7,11,20,6,255
- db 7,0,20,6,255
- db 7,0,30,6,255
-
- db 55,44,0,5,255
- db 55,44,10,5,255
-
- db 5,22,30,6,255
- if demo
- db 5,22,20,16,255
- db 5,22,10,16,255
- else
- db 5,22,20,15,255
- db 5,22,10,15,255
- endif
-
- db 24,22,0,15,255
- db 24,33,0,15,255
- db 24,44,0,15,255
- db 24,33,10,15,255
-
- db 8,0,10,6,255
- db 8,11,10,6,255
- db 8,22,10,6,255
- db 8,33,10,6,255
- db 8,33,20,6,255
- db 8,33,30,6,255
- db 8,33,40,6,255
- db 8,22,40,6,255
- db 8,11,40,6,255
-
- db 11,11,20,12,255
- db 11,11,30,12,255
- db 11,22,20,12,255
- db 11,22,30,12,255
-
- db 12,22,20,12,255
- db 13,22,20,12,255
- db 13,33,20,12,255
-
- db 14,44,20,12,255
- db 14,33,0,12,255
- db 14,33,10,12,255
- db 14,33,20,12,255
- db 14,33,30,12,255
- db 14,33,40,12,255
- db 14,22,0,16,255
-
- db 19,0,0,12,255
-
- db 20,0,20,16,255
- db 20,0,30,16,255
- db 20,11,30,16,255
- db 20,0,40,16,255
- db 20,11,40,16,255
-
- if demo
- db 21,11,10,16,255
- db 21,11,20,16,255
- db 21,0,20,16,255
- db 21,22,20,16,255
- db 21,33,20,16,255
- db 21,44,20,16,255
- db 21,44,10,16,255
- else
- db 21,11,10,15,255
- db 21,11,20,15,255
- db 21,0,20,15,255
- db 21,22,20,15,255
- db 21,33,20,15,255
- db 21,44,20,15,255
- db 21,44,10,15,255
- endif
-
- db 22,22,10,16,255
- db 22,22,20,16,255
-
- db 23,22,30,13,255
- db 23,22,40,13,255
- db 23,33,40,13,255
- db 23,11,40,13,255
- db 23,0,40,13,255
- db 23,0,50,13,255
-
- db 25,11,40,16,255
- db 25,11,50,16,255
- db 25,0,50,16,255
-
- db 27,11,20,16,255
- db 27,11,30,16,255
-
- db 29,11,10,16,255
-
- db 45,22,30,12,255
- db 45,22,40,12,255
- db 45,22,50,12,255
-
- db 46,22,40,12,255
- db 46,11,50,12,255
- db 46,22,50,12,255
- db 46,33,50,12,255
-
- db 47,0,0,12,255
-
- db 26,22,20,16,255
- db 26,33,10,16,255
- db 26,33,20,16,255
- db 26,33,30,16,255
- db 26,44,30,16,255
- db 26,22,30,16,255
- db 26,11,30,16,255
- db 26,11,20,16,255
- db 26,0,20,16,255
- db 26,11,40,16,255
- db 26,0,40,16,255
- db 26,22,40,16,255
- db 26,11,50,16,255
-
- db 28,0,30,15,255
- db 28,0,20,15,255
- db 28,0,40,15,255
- db 28,11,30,15,255
- db 28,11,20,15,255
- db 28,22,30,15,255
- db 28,22,20,15,255
-
- db 255
-
- endp
-
-
-
-
-
-
-Walkintoroom proc near
-
- cmp location,14
- jnz notlair
- cmp mapx,22
- jnz notlair
- mov destination,1
- mov finaldest,1
- call autosetwalk
-notlair: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-Afterintroroom proc near
-
- cmp nowinnewroom,0
- jz notnewintro
- call clearwork
- call findroominloc
- mov newobs,1
- call drawfloor
- call reelsonscreen
- call spriteupdate
- call printsprites
- call worktoscreen
- mov nowinnewroom,0
-notnewintro: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Obname proc near
-
- cmp reasseschanges,0
- jz notnewpath
- mov reasseschanges,0
- jmp diff
-
-notnewpath: cmp ah,commandtype
- jz notdiffob
- jmp diff
-notdiffob: cmp al,command
- jnz diff
- cmp walkandexam,1
- jz walkandexamine
- cmp mousebutton,0
- jz noobselect
- cmp commandtype,3
- jnz isntblock
- cmp lastflag,2
- jc noobselect
-isntblock: mov bl,manspath
- cmp bl,pointerspath
- jnz wantstowalk
- cmp commandtype,3
- jz wantstowalk
- call finishedwalking
- jnz noobselect
- cmp commandtype,5
- jz wantstotalk
- cmp watchingtime,0
- jnz noobselect
- call examineob
- ret
-wantstotalk: cmp watchingtime,0
- jnz noobselect
- call talk
- ret
-walkandexamine: call finishedwalking
- jnz noobselect
- mov al,walkexamtype
- mov commandtype,al
- mov al,walkexamnum
- mov command,al
- mov walkandexam,0
- cmp commandtype,5
- jz noobselect
- call examineob
- ret
-wantstowalk: call setwalk
- mov reasseschanges,1
-noobselect: ret
-
-
-diff: mov command,al
- mov commandtype,ah
-diff2: cmp linepointer,254
- jnz middleofwalk
- cmp watchingtime,0
- jnz middleofwalk
- mov al,facing
- cmp al,turntoface
- jnz middleofwalk
- cmp commandtype,3
- jnz notblock
- mov bl,manspath
- cmp bl,pointerspath
- jnz dontcheck
- mov cl,ryanx ;look under feet to see if
- add cl,12 ;any flags are there
- mov ch,ryany
- add ch,12
- call checkone
- cmp cl,2
- jc isblock
-dontcheck: call getflagunderp
- cmp lastflag,2
- jc isblock
- cmp lastflag,128
- jnc isblock
- jmp toofaraway ; only here for turning on doorstep
-notblock: mov bl,manspath
- cmp bl,pointerspath
- jnz toofaraway
- cmp commandtype,3
- jz isblock
- cmp commandtype,5
- jz isaperson
- call examineobtext
- ret
-middleofwalk: call blocknametext
- ret
-isblock: call blocknametext
- ret
-isaperson: call personnametext
- ret
-toofaraway: call walktotext
- ret
-
- endp
-
-
-
-
-
-
-
-Finishedwalking proc near
-
- cmp linepointer,254
- jnz iswalking
- mov al,facing
- cmp al,turntoface
-iswalking: ret
-
- endp
-
-
-
-
-
-
-
-Examineobtext proc near
-
- mov bl,command
- mov bh,commandtype
- mov al,1
- call commandwithob
- ret
-
- endp
-
-
-
-
-
-Commandwithob proc near
-
- push ax
- push ax bx cx dx es ds si di
- call deltextline
- pop di si ds es dx cx bx ax
-
- push bx
- mov ah,0
- add ax,ax
- mov bx,ax
- mov es,commandtext
- mov ax,[es:bx]
- add ax,textstart
- mov si,ax
-
- mov di,textaddressx
- mov bx,textaddressy
- mov dl,textlen
- mov al,0
- mov ah,0
- call printdirect
-
- pop ax
- mov di,offset cs:commandline
- call copyname
- pop ax
-
- mov di,lastxpos
- cmp al,0
- jz noadd
- add di,5
-noadd: mov bx,textaddressy
- push cs
- pop es
- mov si,offset cs:commandline
- mov dl,textlen
- mov al,0
- mov ah,0
- call printdirect
- mov newtextline,1
- ret
-
-commandline: db "OBJECT NAME ONE ",0
-
- endp
-
-
-
-
-Commandonly proc near
-
- push ax bx cx dx es ds si di
- call deltextline
- pop di si ds es dx cx bx ax
-
- mov ah,0
- add ax,ax
- mov bx,ax
- mov es,commandtext
- mov ax,[es:bx]
- add ax,textstart
- mov si,ax
-
- mov di,textaddressx
- mov bx,textaddressy
- mov dl,textlen
- mov al,0
- mov ah,0
- call printdirect
- mov newtextline,1
- ret
-
- endp
-
-
-
-
-
-Printmessage proc near
-
- push dx bx di
- mov ah,0
- add ax,ax
- mov bx,ax
- mov es,commandtext
- mov ax,[es:bx]
- add ax,textstart
- mov si,ax
- pop di bx dx
- mov al,0
- mov ah,0
- call printdirect
- ret
-
- endp
-
-
-
-Printmessage2 proc near
-
- push dx bx di
- push ax
- mov ah,0
- add ax,ax
- mov bx,ax
- mov es,commandtext
- mov ax,[es:bx]
- add ax,textstart
- mov si,ax
- pop ax
-
-searchmess: push ax
- call findnextcolon
- pop ax
- dec ah
- jnz searchmess
-
- pop di bx dx
- mov al,0
- mov ah,0
- call printdirect
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Blocknametext proc near
-
- mov bl,command
- mov bh,commandtype
- mov al,0
- call commandwithob
- ret
-
- endp
-
-
-
-
-Personnametext proc near
-
- mov bl,command
- and bl,127
- mov bh,commandtype
- mov al,2
- call commandwithob
- ret
-
- endp
-
-
-
-
-
-
-
-Walktotext proc near
-
- mov bl,command
- mov bh,commandtype
- mov al,3
- call commandwithob
- ret
-
- endp
-
-
-
-
-
-Getflagunderp proc near
-
- mov cx,mousex
- sub cx,mapadx
- mov ax,mousey
- sub ax,mapady
- mov ch,al
- call checkone
- mov lastflag,cl
- mov lastflagex,ch
- ret
-
- endp
-
-
-
-
-
-Setwalk proc near
-
- cmp linepointer,254
- jnz alreadywalking
- mov al,pointerspath
- cmp al,manspath
- jz cantwalk2
- cmp watchmode,1
- jz holdingreel
- cmp watchmode,2
- jz cantwalk
- mov destination,al
- mov finaldest,al
- cmp mousebutton,2
- jnz notwalkandexam
- cmp commandtype,3
- jz notwalkandexam
- mov walkandexam,1
- mov al,commandtype
- mov walkexamtype,al
- mov al,command
- mov walkexamnum,al
-notwalkandexam: call autosetwalk
-cantwalk: ret
-cantwalk2: call facerightway
- ret
-alreadywalking: mov al,pointerspath
- mov finaldest,al
- ret
-
-holdingreel: mov destafterhold,al
- mov watchmode,2
- ret
-
- endp
-
-
-
-
-
-
-
-Autosetwalk proc near
-
- mov al,manspath
- cmp finaldest,al
- jnz notsamealready
- ret
-notsamealready: call getroomspaths
- call checkdest
- push bx
- mov al,manspath
- mov ah,0
- add ax,ax
- add ax,ax
- add ax,ax
- add bx,ax
- mov al,[es:bx]
- mov ah,0
- sub ax,12
- mov linestartx,ax
- mov al,[es:bx+1]
- mov ah,0
- sub ax,12
- mov linestarty,ax
- pop bx
-
- mov al,destination
- mov ah,0
- add ax,ax
- add ax,ax
- add ax,ax
- add bx,ax
- mov al,[es:bx]
- mov ah,0
- sub ax,12
- mov lineendx,ax
- mov al,[es:bx+1]
- mov ah,0
- sub ax,12
- mov lineendy,ax
- call bresenhams
-
- cmp linedirection,0
- jz normalline
- mov al,linelength
- dec al
- mov linepointer,al
- mov linedirection,1
- ret
-
-normalline: mov linepointer,0
- ret
-
- endp
-
-
-
-
-
-
-
-
-Checkdest proc near
-
- push bx
- add bx,12*8
- mov ah,manspath
- mov cl,4
- shl ah,cl
- mov al,destination
-
- mov cl,24
- mov ch,destination
-checkdestloop: mov dh,[es:bx]
- and dh,11110000b
- mov dl,[es:bx]
- and dl,00001111b
- cmp ax,dx
- jnz nextcheck
- mov al,[es:bx+1]
- and al,15
- mov destination,al
- pop bx
- ret
-nextcheck: mov dl,[es:bx]
- and dl,11110000b
- shr dl,1
- shr dl,1
- shr dl,1
- shr dl,1
- mov dh,[es:bx]
- and dh,00001111b
- shl dh,1
- shl dh,1
- shl dh,1
- shl dh,1
- cmp ax,dx
- jnz nextcheck2
- mov ch,[es:bx+1]
- and ch,15
-nextcheck2: add bx,2
- dec cl
- jnz checkdestloop
- mov destination,ch
- pop bx
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Bresenhams proc near
-
- call workoutframes
-
- mov dx,seg linedata
- mov es,dx
- mov di,offset es:linedata
- mov si,1
- mov linedirection,0
-
- mov cx,lineendx
- sub cx,linestartx
- jz vertline
- jns line1
-
- neg cx
- mov bx,lineendx
- xchg bx,linestartx
- mov lineendx,bx
-
- mov bx,lineendy
- xchg bx,linestarty
- mov lineendy,bx
- mov linedirection,1
-
-line1: mov bx,lineendy
- sub bx,linestarty
- jz horizline
- jns line3
-
- neg bx
- neg si
-
-line3: push si
- mov lineroutine,0 ; means lo slope
- cmp bx,cx
- jle line4
- mov lineroutine,1 ; means hi slope
- xchg bx,cx
-
-line4: shl bx,1
- mov increment1,bx
- sub bx,cx
- mov si,bx
- sub bx,cx
- mov increment2,bx
-
- mov ax,linestartx
- mov bx,linestarty
- mov ah,bl
- inc cx
- pop bx
- cmp lineroutine,1
- jz hislope
- jmp loslope
-
-vertline: mov ax,linestarty
- mov bx,lineendy
- mov cx,bx
- sub cx,ax
- jge line31
-
- neg cx
- mov ax,bx
- mov linedirection,1
-
-line31: inc cx
- mov bx,linestartx
- xchg ax,bx
- mov ah,bl
- mov bx,si
-line32: stosw
- add ah,bl
- loop line32
- jmp lineexit
-
-
-horizline: mov ax,linestartx
- mov bx,linestarty
- mov ah,bl
- inc cx
-horizloop: stosw
- inc al
- loop horizloop
- jmp lineexit
-
-
-loslope:
-loloop: stosw
- inc al
- or si,si
- jns line12
- add si,increment1
- loop loloop
- jmp lineexit
-
-line12: add si,increment2
- add ah,bl
- loop loloop
- jmp lineexit
-
-
-
-hislope:
-hiloop: stosw
- add ah,bl
- or si,si
- jns line23
- add si,increment1
- loop hiloop
- jmp lineexit
-
-line23: add si,increment2
- inc al
- loop hiloop
-
-lineexit: sub di,offset es:linedata
- mov ax,di
- shr ax,1
- mov linelength,al
- ret
-
- endp
-
-
-
-
-
-
-
-Workoutframes proc near
-
- mov bx,linestartx
- add bx,32
- mov ax,lineendx
- add ax,32
- sub bx,ax
- jnc notneg1
- neg bx
-notneg1: mov cx,linestarty
- add cx,32
- mov ax,lineendy
- add ax,32
- sub cx,ax
- jnc notneg2
- neg cx
-notneg2: cmp bx,cx
- jnc tendstohoriz
- mov dl,2
- mov ax,cx
- shr ax,1
- cmp bx,ax
- jc gotquad
- mov dl,1
- jmp gotquad
-tendstohoriz: mov dl,0
- mov ax,bx
- shr ax,1
- cmp cx,ax
- jc gotquad
- mov dl,1
- jmp gotquad
-
-gotquad: mov bx,linestartx
- add bx,32
- mov ax,lineendx
- add ax,32
- sub bx,ax
- jc isinright
-isinleft: mov cx,linestarty
- add cx,32
- mov ax,lineendy
- add ax,32
- sub cx,ax
- jnc topleft
- cmp dl,1
- jz noswap1
- xor dl,2
-noswap1: add dl,4
- jmp success
-topleft: add dl,6
- jmp success
-
-isinright: mov cx,linestarty
- add cx,32
- mov ax,lineendy
- add ax,32
- sub cx,ax
- jnc botright
- add dl,2
- jmp success
-botright: cmp dl,1
- jz noswap2
- xor dl,2
-noswap2:
-
-success: and dl,7
- mov turntoface,dl
- mov turndirection,0
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;Multiply8 proc near
-;
-; mov ah,0
-; mov cx,8
-; mul cx
-; ret
-;
-; endp
-
-
-
-
-
-
-Getroomspaths proc near
-
- mov al,roomnum
- mov ah,0
- mov cx,144
- mul cx
- mov es,reels
- mov bx,pathdata
- add bx,ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Copyname proc near
-
- push di
- call findobname
- pop di
- push cs
- pop es
-
-copytext: mov cx,28
-make: lodsb
- cmp al,":"
- jz finishmakename
- cmp al,0
- jz finishmakename
- stosb
- loop make
-
-finishmakename: inc cx
- mov al,0
- stosb
- ret
- mov al,255
- rep stosb
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Findobname proc near
-
- push ax
- mov ah,0
- add ax,ax
- mov bx,ax
- pop ax
-
- cmp ah,5
- jnz notpersonname
-
- push ax
- and al,127
- mov ah,0
- mov bx,64*2
- mul bx
- mov si,ax
- mov ds,people
- add si,persontxtdat
- mov cx,persontext
- mov ax,[si]
- add ax,cx
- mov si,ax
- pop ax
- ret
-
-notpersonname: cmp ah,4
- jnz notextraname
- mov ds,extras
- add bx,extextdat
- mov ax,[bx]
- add ax,extext
- mov si,ax
- ret
-
-notextraname: cmp ah,2
- jnz notfreename
- mov ds,freedesc
- add bx,freetextdat
- mov ax,[bx]
- add ax,freetext
- mov si,ax
- ret
-
-notfreename: cmp ah,1
- jnz notsetname
- mov ds,setdesc
- add bx,settextdat
- mov ax,[bx]
- add ax,settext
- mov si,ax
- ret
-
-notsetname: mov ds,blockdesc
- add bx,blocktextdat
- mov ax,[bx]
- add ax,blocktext
- mov si,ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-;-------------------------------------------Printing of non scrolling icons----
-
-Showicon proc near
-
- cmp reallocation,50
- jnc isdream1
- call showpanel
- call showman
- call roomname
- call panelicons1
- call zoomicon
- ret
-
-isdream1: mov ds,tempsprites
- mov di,72
- mov bx,2
- mov al,45
- mov ah,0
- call showframe
- mov ds,tempsprites
- mov di,72+47
- mov bx,2
- mov al,46
- mov ah,0
- call showframe
- mov ds,tempsprites
- mov di,69-10
- mov bx,21
- mov al,49
- mov ah,0
- call showframe
-
- mov ds,tempsprites
- mov di,160+88
- mov bx,2
- mov al,45
- mov ah,4
- call showframe
- mov ds,tempsprites
- mov di,160+43
- mov bx,2
- mov al,46
- mov ah,4
- call showframe
- mov ds,tempsprites
- mov di,160+101
- mov bx,21
- mov al,49
- mov ah,4
- call showframe
- call middlepanel
- ret
-
- endp
-
-
-
-
-
-Middlepanel proc near
-
- mov ds,tempsprites
- mov di,72+47+20
- mov bx,0
- mov al,48
- mov ah,0
- call showframe
- mov ds,tempsprites
- mov di,72+19
- mov bx,21
- mov al,47
- mov ah,0
- call showframe
- mov ds,tempsprites
- mov di,160+23
- mov bx,0
- mov al,48
- mov ah,4
- call showframe
- mov ds,tempsprites
- mov di,160+71
- mov bx,21
- mov al,47
- mov ah,4
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Showman proc near
-
- mov ds,icons1
- mov di,0
- mov bx,0
- mov al,0
- mov ah,0
- call showframe
- mov ds,icons1
- mov di,0
- mov bx,114
- mov al,1
- mov ah,0
- call showframe
-
- cmp shadeson,0
- jz notverycool
-
- mov ds,icons1
- mov di,28
- mov bx,25
- mov al,2
- mov ah,0
- call showframe
-notverycool: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Showpanel proc near
-
- mov ds,icons1
- mov di,72
- mov bx,0
- mov al,19
- mov ah,0
- call showframe
- mov ds,icons1
- mov di,192
- mov bx,0
- mov al,19
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Roomname proc near
-
- mov di,88
- mov bx,18
- mov al,53
- mov dl,240
- call printmessage
-
- mov bl,roomnum
- cmp bl,32
- jc notover32
- sub bl,32
-
-notover32: mov bh,0
- add bx,bx
- mov es,roomdesc
- add bx,intextdat
- mov ax,[es:bx]
- add ax,intext
- mov si,ax
-
- mov linespacing,7
- mov di,88
- mov bx,25
- mov dl,120
- cmp watchon,1
- jz gotpl
- mov dl,160
-gotpl: mov al,0
- mov ah,0
- call printdirect
- mov linespacing,10
-
- call usecharset1
- ret
-
- endp
-
-
-
-
-
-
-Usecharset1 proc near
-
- mov ax,charset1
- mov currentset,ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Usetempcharset proc near
-
- mov ax,tempcharset
- mov currentset,ax
- ret
-
- endp
-
-
-
-
-
-Showexit proc near
-
- mov ds,icons1
- mov di,274
- mov bx,154
- mov al,11
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-Panelicons1 proc near
-
- mov di,0
- cmp watchon,1
- jz watchison
- mov di,48
-watchison: push di
- mov ds,icons2
- add di,204
- mov bx,4
- mov al,2
- mov ah,0
- call showframe
- pop di
- push di
- cmp zoomon,1
- jz zoomisoff
- mov ds,icons1
- add di,228
- mov bx,8
- mov al,5
- mov ah,0
- call showframe
-zoomisoff: pop di
- call showwatch
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-Showwatch proc near
-
- cmp watchon,0
- jz nowristwatch
- mov ds,icons1
- mov di,250
- mov bx,1
- mov al,6
- mov ah,0
- call showframe
- call showtime
-nowristwatch: ret
-
- endp
-
-
-Gettime proc near
-
- mov ah,2ch
- int 21h
- mov secondcount,dh
- mov minutecount,cl
- mov hourcount,ch
- ret
-
- endp
-
-
-
-
-
-Zoomicon proc near
-
- cmp zoomon,0
- jz nozoom1
- mov ds,icons1
- mov di,zoomx
- mov bx,zoomy-1
- mov al,8
- mov ah,0
- call showframe
-nozoom1: ret
-
- endp
-
-
-
-
-
-
-Showblink proc near
-
- cmp manisoffscreen,1
- jz finblink1
- inc blinkcount
- cmp shadeson,0
- jnz finblink1
- cmp reallocation,50
- jnc eyesshut
- mov al,blinkcount
- cmp al,3
- jnz finblink1
- mov blinkcount,0
- mov al,blinkframe
- inc al
- mov blinkframe,al
- cmp al,6
- jc nomorethan6
- mov al,6
-nomorethan6: mov ah,0
- mov bx,offset cs:blinktab
- add bx,ax
-
- mov al,[cs:bx]
- mov ds,icons1
- mov di,44
- mov bx,32
- mov ah,0
- call showframe
-finblink1: ret
-
-eyesshut: ;mov al,32
- ;mov ds,icons1
- ;mov di,44
- ;mov bx,32
- ;mov ah,0
- ;call showframe
- ret
-
-blinktab: db 16,18,18,17,16,16,16
-
- endp
-
-
-
-
-
-
-Dumpblink proc near
-
- cmp shadeson,0
- jnz nodumpeye
- cmp blinkcount,0
- jnz nodumpeye
- mov al,blinkframe
- cmp al,6
- jnc nodumpeye
- push ds
- mov di,44
- mov bx,32
- mov cl,16
- mov ch,12
- call multidump
- pop ds
-nodumpeye: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Worktoscreenm proc near
-
- call animpointer
- call readmouse
- call showpointer
- call vsync
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-;-------------------------------------------------------------Blank routine----
-
-
-
-
-Blank proc near
-
- cmp commandtype,199
- jz alreadyblnk
- mov commandtype,199
- mov al,0
- call commandonly
-alreadyblnk: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;---------------------------------------------------------Standard routines----
-
-
-
-
-
-
-
-
-
-
-
-
-
-Allpointer proc near
-
- call readmouse
- call showpointer
- call dumppointer
- ret
-
- endp
-
-
-
-
-
-
-
-Hangonp proc near
-
- push cx
- add cx,cx
- pop ax
- add cx,ax
- mov maintimer,0
- mov al,pointerframe
- mov ah,pickup
- push ax
- mov pointermode,3
- mov pickup,0
- push cx
- mov commandtype,255
- call readmouse
- call animpointer
- call showpointer
- call vsync
- call dumppointer
- pop cx
-
-hangloop: push cx
- call delpointer
- call readmouse
- call animpointer
- call showpointer
- call vsync
- call dumppointer
- pop cx
- mov ax,mousebutton
- cmp ax,0
- jz notpressed
- cmp ax,oldbutton
- jnz getoutofit
-notpressed: loop hangloop
-
-getoutofit: call delpointer
- pop ax
- mov pointerframe,al
- mov pickup,ah
- mov pointermode,0
- ret
-
- endp
-
-
-
-
-
-Hangonw proc near
-
-hangloopw: push cx
- call delpointer
- call readmouse
- call animpointer
- call showpointer
- call vsync
- call dumppointer
- pop cx
- loop hangloopw
- ret
-
- endp
-
-
-
-
-Hangoncurs proc near
-
-monloop1: push cx
- call printcurs
- call vsync
- call delcurs
- pop cx
- loop monloop1
- ret
-
- endp
-
-
-
-
-
-
-
-
-Getunderzoom proc near
-
- mov di,zoomx+5
- mov bx,zoomy+4
- mov ds,buffers
- mov si,zoomspace
- mov cl,46
- mov ch,40
- call multiget
- ret
-
- endp
-
-
-
-
-
-Dumpzoom proc near
-
- cmp zoomon,1
- jnz notzoomon
- mov di,zoomx+5
- mov bx,zoomy+4
- mov cl,46
- mov ch,40
- call multidump
-notzoomon: ret
-
- endp
-
-
-
-
-
-
-
-Putunderzoom proc near
-
- mov di,zoomx+5
- mov bx,zoomy+4
- mov ds,buffers
- mov si,zoomspace
- mov cl,46
- mov ch,40
- call multiput
- ret
-
- endp
-
-
-
-
-
-Crosshair proc near
-
- cmp commandtype,3
- jz nocross
- cmp commandtype,10
- jnc nocross
-
- mov es,workspace
- mov ds,icons1
- mov di,zoomx+24
- mov bx,zoomy+19
- mov al,9
- mov ah,0
- call showframe
- ret
-
-nocross: mov es,workspace
- mov ds,icons1
- mov di,zoomx+24
- mov bx,zoomy+19
- mov al,29
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-Showpointer proc near
-
- call showblink
- mov di,mousex
- mov oldpointerx,di
- mov bx,mousey
- mov oldpointery,bx
- cmp pickup,1
- jz itsanobject
-
- push bx di
- mov ds,icons1
- mov al,pointerframe
- add al,20
- mov ah,0
- add ax,ax
- mov si,ax
- add ax,ax
- add si,ax
- mov cx,[si]
- cmp cl,12
- jnc notsmallx
- mov cl,12
-notsmallx: cmp ch,12
- jnc notsmally
- mov ch,12
-notsmally: mov pointerxs,cl
- mov pointerys,ch
- push ds
- mov ds,buffers
- mov si,pointerback
- call multiget
- pop ds di bx
- push di bx
- mov al,pointerframe
- add al,20
- mov ah,0
- call showframe
- pop bx di
- ret
-
-itsanobject: mov al,itemframe
- mov ds,extras
- cmp objecttype,4
- jz itsfrominv
- mov ds,freeframes
-itsfrominv: mov cl,al
- add al,al
- add al,cl
- inc al
- mov ah,0
-
- push ax
- add ax,ax
- mov si,ax
- add ax,ax
- add si,ax
- mov ax,2080
- mov cx,[si]
- cmp cl,12
- jnc notsmallx2
- mov cl,12
-notsmallx2: cmp ch,12
- jnc notsmally2
- mov ch,12
-notsmally2: mov pointerxs,cl
- mov pointerys,ch
- pop ax
-
- push di bx
- push ax bx di ds
- mov al,cl
- mov ah,0
- shr ax,1
- sub oldpointerx,ax
- sub di,ax
- mov al,ch
- shr ax,1
- sub oldpointery,ax
- sub bx,ax
- mov ds,buffers
- mov si,pointerback
- call multiget
- pop ds di bx ax
- mov ah,128
- call showframe
- pop bx di
- mov ds,icons1
- mov al,3
- mov ah,128
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-Delpointer proc near
-
- mov ax,oldpointerx
- cmp ax,0ffffh
- jz nevershown
- mov delherex,ax
- mov ax,oldpointery
- mov delherey,ax
- mov cl,pointerxs
- mov delxs,cl
- mov ch,pointerys
- mov delys,ch
- mov ds,buffers
- mov si,pointerback
- mov di,delherex
- mov bx,delherey
- call multiput
-nevershown: ret
-
- endp
-
-
-
-
-
-
-
-
-
-Dumppointer proc near
-
- call dumpblink
- mov cl,delxs
- mov ch,delys
- mov di,delherex
- mov bx,delherey
- call multidump
-
- mov bx,oldpointery
- mov di,oldpointerx
- cmp di,delherex
- jnz difffound
- cmp bx,delherey
- jz notboth
-difffound: mov cl,pointerxs
- mov ch,pointerys
- call multidump
-notboth: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Undertextline proc near
-
- mov di,textaddressx
- mov bx,textaddressy
- if foreign
- sub bx,3
- endif
- mov ds,buffers
- mov si,textunder
- mov cl,undertextsizex
- mov ch,undertextsizey
- call multiget
- ret
-
- endp
-
-
-
-
-
-
-
-
-Deltextline proc near
-
- mov di,textaddressx
- mov bx,textaddressy
- if foreign
- sub bx,3
- endif
- mov ds,buffers
- mov si,textunder
- mov cl,undertextsizex
- mov ch,undertextsizey
- call multiput
- ret
-
- endp
-
-
-
-
-
-Dumptextline proc near
-
- cmp newtextline,1
- jnz nodumptextline
- mov newtextline,0
- mov di,textaddressx
- mov bx,textaddressy
- if foreign
- sub bx,3
- endif
- mov cl,undertextsizex
- mov ch,undertextsizey
- call multidump
-nodumptextline: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Animpointer proc near
-
- cmp pointermode,2
- jz combathand
- cmp pointermode,3
- jz mousehand
-
- cmp watchingtime,0
- jz notwatchpoint
- mov pointerframe,11
- ret
-notwatchpoint: mov pointerframe,0
- cmp inmaparea,0
- jz gothand
- cmp pointerfirstpath,0
- jz gothand
-arrow: call getflagunderp
- cmp cl,2
- jc gothand
- cmp cl,128
- jnc gothand
- mov pointerframe,3
- test cl,4
- jnz gothand
- mov pointerframe,4
- test cl,16
- jnz gothand
- mov pointerframe,5
- test cl,2
- jnz gothand
- mov pointerframe,6
- test cl,8
- jnz gothand
- mov pointerframe,8
-gothand: ret
-
-mousehand: cmp pointerspeed,0
- jz rightspeed3
- dec pointerspeed
- jmp finflashmouse
-rightspeed3: mov pointerspeed,5
- inc pointercount
- cmp pointercount,16
- jnz finflashmouse
- mov pointercount,0
-finflashmouse: mov al,pointercount
- mov ah,0
- mov bx,offset cs:flashmousetab
- add bx,ax
- mov al,[cs:bx]
- mov pointerframe,al
- ret
-
-combathand: mov pointerframe,0
- cmp reallocation,14
- jnz notarrow
- cmp commandtype,211
- jnz notarrow
- mov pointerframe,5
-notarrow: ret
-
-flashmousetab: db 1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2
-
- endp
-
-
-
-
-;------------------------------------------------Mouse and keyboard-readers----
-
-Setmouse proc near
-
- if recording
- mov recordpos,-8
- mov dx,seg recname
- mov ds,dx
- mov dx,offset recname
- mov cx,0
- mov ah,3ch
- mov al,2
- int 21h
- mov rechandle,ax
- endif
-
- if playback
- mov dx,seg recname
- mov ds,dx
- mov dx,offset recname
- mov ah,3dh
- mov al,2
- int 21h
- mov rechandle,ax
- call loadrec
- endif
-
- mov oldpointerx,0ffffh
-
- mov ax,0
- int 33h
- mov ax,8
- mov cx,15
- mov dx,184
- int 33h
- mov ax,7
- mov cx,15
- mov dx,298*2
- int 33h
- ret
-
- endp
-
-
-
-
-
-Readmouse proc near
-
- mov ax,mousebutton
- mov oldbutton,ax
- mov ax,mousex
- mov oldx,ax
- mov ax,mousey
- mov oldy,ax
- call mousecall
- mov mousex,cx
- mov mousey,dx
- mov mousebutton,bx
- ret
-
- endp
-
-
-
-
-
-
-
-Mousecall proc near
-
- if playback
- call playmouse
- ret
- endif
-
- mov ax,3
- int 33h
- shr cx,1
- cmp cx,298
- jc notxover
- mov cx,298
-notxover: cmp cx,15
- jnc notxover2
- mov cx,15
-notxover2: cmp dx,184
- jc notyover
- mov dx,184
-notyover: cmp dx,15
- jnc notyover2
- mov dx,15
-notyover2:
- if recording
- call recmouse
- endif
- ret
-
- endp
-
-
-
-
-
-
- if playback
-
-Playmouse proc near
-
- mov es,recordspace
- mov di,recordpos
- cmp word ptr [es:di+6],0
- jnz isthisplay
- add di,8
- add recordpos,8
- cmp di,16384
- jnz isthisplay
- call loadrec
-isthisplay: mov cx,[es:di]
- mov dx,[es:di+2]
- mov bx,[es:di+4]
- dec word ptr [es:di+6]
- ret
-
- endp
-
- endif
-
- if recording
-
-Recmouse proc near
-
- mov es,recordspace
- mov di,recordpos
- cmp di,-8
- jz diffrec
- cmp [es:di],cx
- jnz diffrec
- cmp [es:di+2],dx
- jnz diffrec
- cmp [es:di+4],bx
- jnz diffrec
- inc word ptr [es:di+6]
- cmp word ptr [es:di+5],0ffffh
- jz diffrec
- ret
-diffrec: add recordpos,8
- add di,8
- cmp di,16384
- jnz notsaverec
- push cx dx bx
- call saverec
- pop bx dx cx
-notsaverec: mov [es:di],cx
- mov [es:di+2],dx
- mov [es:di+4],bx
- mov word ptr [es:di+6],1
- ret
-
- endp
-
-
-
-
-
-Saverec proc near
-
- mov bx,rechandle
- mov ds,recordspace
- mov dx,0
- mov cx,recordpos
- add cx,8
- mov ah,40h
- int 21h
- mov di,0
- mov recordpos,0
- ret
-
- endp
-
-
-
-
-
-
-Loadrec proc near
-
- mov bx,rechandle
- mov ds,recordspace
- mov dx,0
- mov cx,16384+8
- mov ah,3fh
- int 21h
- mov di,0
- mov recordpos,0
- ret
-
- endp
-
-
- endif
-
-
-
-
-
-
-
-Readmouse1 proc near
-
- mov ax,mousex
- mov oldx,ax
- mov ax,mousey
- mov oldy,ax
- call mousecall
- mov mousex,cx
- mov mousey,dx
- mov mousebutton1,bx
- ret
-
- endp
-
-
-
-Readmouse2 proc near
-
- mov ax,mousex
- mov oldx,ax
- mov ax,mousey
- mov oldy,ax
- call mousecall
- mov mousex,cx
- mov mousey,dx
- mov mousebutton2,bx
- ret
-
- endp
-
-
-Readmouse3 proc near
-
- mov ax,mousex
- mov oldx,ax
- mov ax,mousey
- mov oldy,ax
- call mousecall
- mov mousex,cx
- mov mousey,dx
- mov mousebutton3,bx
- ret
-
- endp
-
-
-
-
-
-
-Readmouse4 proc near
-
- mov ax,mousebutton
- mov oldbutton,ax
- mov ax,mousex
- mov oldx,ax
- mov ax,mousey
- mov oldy,ax
- call mousecall
- mov mousex,cx
- mov mousey,dx
- mov ax,mousebutton1
- or ax,mousebutton2
- or ax,mousebutton3
- or bx,ax
- mov mousebutton,bx
- ret
-
- endp
-
-
-
-
-
-Readkey proc near
-
- mov bx,bufferout
- cmp bx,bufferin
- jz nokey
- inc bx
- and bx,15
- mov bufferout,bx
- mov di,offset cs:keybuffer
- add di,bx
- mov al,[cs:di]
- mov currentkey,al
- ret
-nokey: mov currentkey,0
- ret
-
-
- endp
-
-keybuffer: db 16 dup (0)
-
-
-
-Convertkey proc near
-
- and al,127
- mov ah,0
- mov di,offset cs:keyconverttab
- add di,ax
- mov al,[cs:di]
- ret
-
-keyconverttab: db 0,0,"1","2","3","4","5","6","7","8","9","0","-",0,8,0
- db "Q","W","E","R","T","Y","U","I","O","P",0,0,13,0,"A","S"
- db "D","F","G","H","J","K","L",0,0,0,0,0,"Z","X","C","V","B","N","M"
- db 0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-
- endp
-
-
-
-
-;-------------------------------------------------------------Miscellaneous----
-
-Randomnum1 proc near
-
- push ds es di bx cx
- call randomnumber
- pop cx bx di es ds
- ret
-
- endp
-
-
-
-
-
-Randomnum2 proc near
-
- push ds es di bx ax
- call randomnumber
- mov cl,al
- pop ax bx di es ds
- ret
-
- endp
-
-
-
-
-
-Randomnumber proc near
-
- mov al,seed
- and al,48h
- add al,38h
- sal al,1
- sal al,1
- rcl seed+2,1
- rcl seed+1,1
- rcl seed+0,1
- mov al,seed
- and al,48h
- add al,38h
- sal al,1
- sal al,1
- rcl seed+2,1
- rcl seed+1,1
- rcl seed+0,1
- mov al,seed
- and al,48h
- add al,38h
- sal al,1
- sal al,1
- rcl seed+2,1
- rcl seed+1,1
- rcl seed+0,1
- mov al,seed
- and al,48h
- add al,38h
- sal al,1
- sal al,1
- rcl seed+2,1
- rcl seed+1,1
- rcl seed+0,1
- mov al,seed
- and al,48h
- add al,38h
- sal al,1
- sal al,1
- rcl seed+2,1
- rcl seed+1,1
- rcl seed+0,1
- mov al,seed
- and al,48h
- add al,38h
- sal al,1
- sal al,1
- rcl seed+2,1
- rcl seed+1,1
- rcl seed+0,1
- mov al,seed
- and al,48h
- add al,38h
- sal al,1
- sal al,1
- rcl seed+2,1
- rcl seed+1,1
- rcl seed+0,1
- mov al,seed
- and al,48h
- add al,38h
- sal al,1
- sal al,1
- rcl seed+2,1
- rcl seed+1,1
- rcl seed+0,1
-
- mov al,seed
- ret
-
- endp
-
-
-
-
-
-
-Hangon proc near
-
-hangonloop: push cx
- call vsync
- pop cx
- loop hangonloop
- ret
-
- endp
-
-
-
-
-
-;-------------------------------------------------------------Disc handling----
-
-
-Loadtraveltext proc near
-
- mov dx,offset cs:traveltextname
- call standardload
- mov traveltext,ax
- ret
-
- endp
-
-
-
-
-
-
-Loadintotemp proc near
-
- push cs
- pop ds
- call standardload
- mov tempgraphics,ax
- ret
-
- endp
-
-
-
-
-
-
-Loadintotemp2 proc near
-
- push cs
- pop ds
- call standardload
- mov tempgraphics2,ax
- ret
-
- endp
-
-
-
-
-Loadintotemp3 proc near
-
- push cs
- pop ds
- call standardload
- mov tempgraphics3,ax
- ret
-
- endp
-
-
-
-Loadtempcharset proc near
-
- call standardload
- mov tempcharset,ax
- ret
-
- endp
-
-
-
-
-
-
-Standardload proc near
-
- call openfile
- call readheader
- mov bx,[es:di]
- push bx
- mov cl,4
- shr bx,cl
- call allocatemem
- mov ds,ax
- pop cx
- push ax
- mov dx,0
- call readfromfile
- call closefile
- pop ax
- ret
-
- endp
-
-
-
-
-
-
-Loadtemptext proc near
-
- call standardload
- mov textfile1,ax
- ret
-
- endp
-
-
-
-
-
-
-
-Loadroom proc near
-
- mov roomloaded,1
- mov timecount,0
- mov maintimer,0
- mov mapoffsetx,104
- mov mapoffsety,38
- mov textaddressx,13
- mov textaddressy,182
- mov textlen,240
- mov al,newlocation
- mov location,al
- call getroomdata
- call startloading
- call loadroomssample
- call switchryanon
- call drawflags
- call getdimension
- ret
-
- endp
-
-
-
-
-Loadroomssample proc near
-
- mov al,roomssample
- cmp al,255
- jz loadedalready
- cmp al,currentsample
- jz loadedalready
- mov currentsample,al
- mov al,currentsample
- mov cl,"0"
- call twodigitnum
- mov di,offset cs:samplename
- xchg al,ah
- mov [cs:di+10],ax
- mov dx,di
- call loadsecondsample
-loadedalready: ret
-
- endp
-
-
-
-
-
-Getridofreels proc near
-
- cmp roomloaded,0
- jz dontgetrid
- mov es,reel1
- call deallocatemem
- mov es,reel2
- call deallocatemem
- mov es,reel3
- call deallocatemem
-dontgetrid: ret
-
- endp
-
-
-
-
-
-Getridofall proc near
-
- mov es,backdrop
- call deallocatemem
- mov es,setframes
- call deallocatemem
- mov es,reel1
- call deallocatemem
- mov es,reel2
- call deallocatemem
- mov es,reel3
- call deallocatemem
- mov es,reels
- call deallocatemem
- mov es,people
- call deallocatemem
- mov es,setdesc
- call deallocatemem
- mov es,blockdesc
- call deallocatemem
- mov es,roomdesc
- call deallocatemem
- mov es,freeframes
- call deallocatemem
- mov es,freedesc
- call deallocatemem
- ret
-
- endp
-
-
-
-
-
-Restorereels proc near
-
- cmp roomloaded,0
- jz dontrestore
- mov al,reallocation
- call getroomdata
- mov dx,bx
- call openfile
- call readheader
-
- call dontloadseg
- call dontloadseg
- call dontloadseg
- call dontloadseg
-
- call allocateload
- mov reel1,ax
- mov ds,ax
- mov dx,0
- call loadseg
- call allocateload
- mov reel2,ax
- mov ds,ax
- mov dx,0
- call loadseg
- call allocateload
- mov reel3,ax
- mov ds,ax
- mov dx,0
- call loadseg
- call closefile
-dontrestore: ret
-
- endp
-
-
-
-
-
-
-
-Restoreall proc near
-
- mov al,location
- call getroomdata
- mov dx,bx
- call openfile
- call readheader
-
- call allocateload
- mov ds,ax
- mov backdrop,ax
- mov dx,flags
- call loadseg
-
- mov ds,workspace ;mapdata
- mov dx,map
- mov cx,132*66 ;maplen
- mov al,0
- call fillspace
- call loadseg
- call sortoutmap
-
- call allocateload
- mov setframes,ax
- mov ds,ax
- mov dx,framedata
- call loadseg
-
- ;mov ds,setdat
- ;mov dx,0
- ;mov cx,setdatlen
- ;mov al,255
- ;call fillspace
- call dontloadseg
-
- call allocateload
- mov reel1,ax
- mov ds,ax
- mov dx,0
- ;call bloc
+
+loop048: mov ax,[cs:bx]
+ cmp ax,0ffffh
+ jz nonefound
+ push bx
+ cmp mousex,ax
+ jl over045
+ mov ax,[cs:bx+2]
+ cmp mousex,ax
+ jge over045
+ mov ax,[cs:bx+4]
+ cmp mousey,ax
+ jl over045
+ mov ax,[cs:bx+6]
+ cmp mousey,ax
+ jge over045
+ mov ax,[cs:bx+8]
+ call ax
+finished: pop ax
+ ret
+over045: pop bx
+ add bx,10
+ jmp loop048
+nonefound: ret
+
+ endp
+
+
+
+
+
+;-------------------------------------------Printing of icons during scroll----
+
+
+
+
+
+Identifyob proc near
+
+ cmp watchingtime,0
+ jnz blank
+
+ mov ax,mousex
+ sub ax,mapadx
+ cmp ax,22*8
+ jc notover1
+ call blank
+ ret
+
+notover1: mov bx,mousey
+ sub bx,mapady
+ cmp bx,20*8
+ jc notover2
+ call blank
+ ret
+
+notover2: mov inmaparea,1
+ mov ah,bl
+ push ax
+ call findpathofpoint
+ mov pointerspath,dl
+ pop ax
+ push ax
+ call findfirstpath
+ mov pointerfirstpath,al
+ pop ax
+
+ call checkifex
+ jnz finishidentify
+ call checkiffree
+ jnz finishidentify
+ call checkifperson
+ jnz finishidentify
+ call checkifset
+ jnz finishidentify
+
+ mov ax,mousex
+ sub ax,mapadx
+ mov cl,al
+ mov ax,mousey
+ sub ax,mapady
+ mov ch,al
+ call checkone
+ cmp al,0
+ jz nothingund
+ ;cmp watchingtime,0
+ ;jnz nothingund
+ cmp mandead,1
+ jz nothingund
+ mov ah,3
+ call obname
+finishidentify: ret
+
+nothingund: call blank
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Checkifperson proc near
+
+ mov es,buffers
+ mov bx,peoplelist
+ mov cx,12
+identifyreel: push cx
+
+ cmp byte ptr [es:bx+4],255
+ jz notareelid
+
+ push es bx ax
+ mov ax,[es:bx+0]
+ mov reelpointer,ax
+ call getreelstart
+ cmp [es:si+2],0ffffh
+ jnz notblankpers
+ add si,5
+notblankpers: mov cx,[es:si+2] ;x,y of reel slot
+ mov ax,[es:si+0] ;frame number
+ push cx
+ call getreelframeax
+ pop cx
+ add cl,[es:bx+4]
+ add ch,[es:bx+5]
+ mov dx,cx
+ add dl,[es:bx+0]
+ add dh,[es:bx+1]
+ pop ax bx es
+
+ cmp al,cl
+ jc notareelid
+ cmp ah,ch
+ jc notareelid
+ cmp al,dl
+ jnc notareelid
+ cmp ah,dh
+ jnc notareelid
+
+ pop cx
+ mov ax,[es:bx+2]
+ mov persondata,ax
+ mov al,[es:bx+4]
+ mov ah,5
+ call obname
+ mov al,0
+ cmp al,1
+ ret
+
+notareelid: pop cx
+ add bx,5
+ dec cx
+ jnz identifyreel
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Checkifset proc near
+
+ mov es,buffers
+ mov bx,setlist+(127*5)
+ mov cx,127
+identifyset: cmp byte ptr [es:bx+4],255
+ jz notasetid
+ cmp al,[es:bx]
+ jc notasetid
+ cmp al,[es:bx+2]
+ jnc notasetid
+ cmp ah,[es:bx+1]
+ jc notasetid
+ cmp ah,[es:bx+3]
+ jnc notasetid
+ call pixelcheckset
+ jz notasetid
+ call isitdescribed
+ jz notasetid
+ mov al,[es:bx+4]
+ mov ah,1
+ call obname
+ mov al,0
+ cmp al,1
+ ret
+notasetid: sub bx,5
+ dec cx
+ cmp cx,-1
+ jnz identifyset
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Checkifex proc near
+
+ mov es,buffers
+ mov bx,exlist+(99*5)
+ mov cx,99
+identifyex: cmp byte ptr [es:bx+4],255
+ jz notanexid
+ cmp al,[es:bx]
+ jc notanexid
+ cmp al,[es:bx+2]
+ jnc notanexid
+ cmp ah,[es:bx+1]
+ jc notanexid
+ cmp ah,[es:bx+3]
+ jnc notanexid
+ mov al,[es:bx+4]
+ mov ah,4
+ call obname
+ mov al,1
+ cmp al,0
+ ret
+notanexid: sub bx,5
+ dec cx
+ cmp cx,-1
+ jnz identifyex
+ ret
+
+ endp
+
+
+
+
+
+
+Checkiffree proc near
+
+ mov es,buffers
+ mov bx,freelist+(79*5)
+ mov cx,79
+identifyfree: cmp byte ptr [es:bx+4],255
+ jz notafreeid
+ cmp al,[es:bx]
+ jc notafreeid
+ cmp al,[es:bx+2]
+ jnc notafreeid
+ cmp ah,[es:bx+1]
+ jc notafreeid
+ cmp ah,[es:bx+3]
+ jnc notafreeid
+ mov al,[es:bx+4]
+ mov ah,2
+ call obname
+ mov al,0
+ cmp al,1
+ ret
+notafreeid: sub bx,5
+ dec cx
+ cmp cx,-1
+ jnz identifyfree
+ ret
+
+ endp
+
+
+
+
+
+
+Isitdescribed proc near
+
+ push ax cx es bx
+ mov al,[es:bx+4] ;get object number
+ mov ah,0
+ add ax,ax
+ mov bx,ax
+ mov es,setdesc
+ add bx,settextdat
+ mov ax,[es:bx]
+ add ax,settext
+ mov bx,ax
+ mov dl,[es:bx]
+ pop bx es cx ax
+ cmp dl,0
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+;Getcurrentpath proc near ;routine finds out which path
+; ;block the pointer is in.
+; push ax ;used to see if an object is
+; call findpathofpoint ;close or not
+; pop ax
+; mov pointerspath,dl
+; ret
+;
+; endp
+
+
+
+
+
+Findpathofpoint proc near
+
+ push ax
+ mov bx,pathdata
+ mov es,reels
+ mov al,roomnum
+ mov ah,0
+ mov cx,144
+ mul cx
+ add bx,ax
+ pop cx
+
+ mov dl,0
+pathloop: mov al,[es:bx+6]
+ cmp al,255
+ jnz flunkedit
+ mov ax,[es:bx+2]
+ cmp ax,0ffffh
+ jz flunkedit
+ cmp cl,al
+ jc flunkedit
+ cmp ch,ah
+ jc flunkedit
+ mov ax,[es:bx+4]
+ cmp cl,al
+ jnc flunkedit
+ cmp ch,ah
+ jnc flunkedit
+ jmp gotvalidpath
+flunkedit: add bx,8
+ inc dl
+ cmp dl,12
+ jnz pathloop
+ mov dl,255
+gotvalidpath: ret
+
+ endp
+
+
+
+
+
+Findfirstpath proc near ;similar to last routine, but it
+ ;searches each path to see if
+ push ax ;pointer is within it, regardless
+ mov bx,pathdata ;of whether the path is on or off
+ mov es,reels ;it returns the on or off state in
+ mov al,roomnum ;al (255=on 0=off) 0 if no path
+ mov ah,0
+ mov cx,144
+ mul cx
+ add bx,ax
+ pop cx
+
+ mov dl,0
+fpathloop: mov ax,[es:bx+2]
+ cmp ax,0ffffh
+ jz nofirst
+ cmp cl,al
+ jc nofirst
+ cmp ch,ah
+ jc nofirst
+ mov ax,[es:bx+4]
+ cmp cl,al
+ jnc nofirst
+ cmp ch,ah
+ jnc nofirst
+ jmp gotfirst
+nofirst: add bx,8
+ inc dl
+ cmp dl,12
+ jnz fpathloop
+ mov al,0
+ ret
+gotfirst: mov al,[es:bx+6]
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Turnpathon proc near ;turns path on permanently
+
+ push ax ax
+ mov cl,255
+ mov ch,roomnum
+ add ch,100
+ call findormake
+ pop ax
+ call getroomspaths
+ pop ax
+ cmp al,255
+ jz nopathon
+ mov ah,0
+ add ax,ax
+ add ax,ax
+ add ax,ax
+ add bx,ax
+ mov al,255
+ mov [es:bx+6],al
+nopathon: ret
+
+ endp
+
+
+
+
+
+
+
+Turnpathoff proc near ;turns path on permanently
+
+ push ax ax
+ mov cl,0
+ mov ch,roomnum
+ add ch,100
+ call findormake
+ pop ax
+ call getroomspaths
+ pop ax
+ cmp al,255
+ jz nopathoff
+ mov ah,0
+ add ax,ax
+ add ax,ax
+ add ax,ax
+ add bx,ax
+ mov al,0
+ mov [es:bx+6],al
+nopathoff: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Turnanypathon proc near
+
+ push ax ax
+ mov cl,255
+ mov ch,ah
+ add ch,100
+ call findormake
+ pop ax
+ mov al,ah
+ mov ah,0
+ mov cx,144
+ mul cx
+ mov es,reels
+ mov bx,pathdata
+ add bx,ax
+ pop ax
+ mov ah,0
+ add ax,ax
+ add ax,ax
+ add ax,ax
+ add bx,ax
+ mov al,255
+ mov [es:bx+6],al
+ ret
+
+ endp
+
+
+
+
+
+
+Turnanypathoff proc near
+
+ push ax ax
+ mov cl,0
+ mov ch,ah
+ add ch,100
+ call findormake
+ pop ax
+ mov al,ah
+ mov ah,0
+ mov cx,144
+ mul cx
+ mov es,reels
+ mov bx,pathdata
+ add bx,ax
+ pop ax
+ mov ah,0
+ add ax,ax
+ add ax,ax
+ add ax,ax
+ add bx,ax
+ mov al,0
+ mov [es:bx+6],al
+ ret
+
+ endp
+
+
+
+
+
+Checkifpathison proc near
+
+ push ax
+ call getroomspaths
+ pop ax
+ mov ah,0
+ add ax,ax
+ add ax,ax
+ add ax,ax
+ add bx,ax
+ mov al,[es:bx+6]
+ cmp al,255
+ ret
+
+ endp
+
+
+
+
+
+Afternewroom proc near
+
+ cmp nowinnewroom,0
+ jz notnew
+ mov timecount,0
+ call createpanel
+ mov commandtype,0
+ call findroominloc
+
+ cmp ryanon,1
+ jz ryansoff
+
+ mov al,ryanx
+ add al,12
+ mov ah,ryany
+ add ah,12
+ call findpathofpoint
+ mov manspath,dl
+ call findxyfrompath
+ mov resetmanxy,1
+
+ryansoff: mov newobs,1
+ call drawfloor
+ mov lookcounter,160
+ mov nowinnewroom,0
+
+ call showicon
+ call spriteupdate
+ call printsprites
+ call undertextline
+ call reelsonscreen
+ call mainscreen
+ call getunderzoom
+ call zoom
+ call worktoscreenm
+ call walkintoroom
+ call reminders
+ call atmospheres
+notnew: ret
+
+ endp
+
+
+
+
+
+
+Atmospheres proc near
+
+ mov cl,mapx
+ mov ch,mapy
+ mov bx,offset cs:atmospherelist
+nextatmos: mov al,[cs:bx]
+ cmp al,255
+ jz nomoreatmos
+ cmp al,reallocation
+ jnz wrongatmos
+ mov ax,[cs:bx+1]
+ cmp ax,cx
+ jnz wrongatmos
+ mov ax,[cs:bx+3]
+ cmp al,ch0playing
+ jz playingalready
+ cmp location,45
+ jnz notweb
+ cmp reeltowatch,45
+ jz wrongatmos
+notweb: call playchannel0
+ cmp reallocation,2
+ cmp mapy,0
+ jz fullvol
+ jnz notlouisvol
+ cmp mapy,10
+ jnz notlouisvol
+ cmp mapx,22
+ jnz notlouisvol
+ mov volume,5
+notlouisvol: if cd
+ cmp reallocation,14
+ jnz notmad1
+ cmp mapx,33
+ jz ismad2
+ cmp mapx,22
+ jnz notmad1
+ mov volume,5
+ ret
+ismad2: mov volume,0
+ ret
+notmad1: endif
+playingalready: cmp reallocation,2
+ jnz notlouisvol2
+ cmp mapx,22
+ jz louisvol
+ cmp mapx,11
+ jnz notlouisvol2
+fullvol: mov volume,0
+notlouisvol2: ret
+louisvol: mov volume,5
+ ret
+wrongatmos: add bx,5
+ jmp nextatmos
+nomoreatmos: call cancelch0
+ ret
+
+atmospherelist: db 0,33,10,15,255
+ db 0,22,10,15,255
+ db 0,22,0,15,255
+ db 0,11,0,15,255
+ db 0,11,10,15,255
+ db 0,0,10,15,255
+
+ db 1,44,10,6,255 ;location,map x,y,sound,repeat
+ db 1,44,0,13,255
+
+ db 2,33,0,6,255
+ db 2,22,0,5,255
+ db 2,22,10,16,255
+ db 2,11,10,16,255
+
+ db 3,44,0,15,255
+ db 3,33,10,6,255
+ db 3,33,0,5,255
+
+ db 4,11,30,6,255
+ db 4,22,30,5,255
+ db 4,22,20,13,255
+
+ db 10,33,30,6,255
+ db 10,22,30,6,255
+
+ db 9,22,10,6,255
+ db 9,22,20,16,255
+ db 9,22,30,16,255
+ db 9,22,40,16,255
+ db 9,22,50,16,255
+
+ db 6,11,30,6,255
+ db 6,0,10,15,255
+ db 6,0,20,15,255
+ db 6,11,20,15,255
+ db 6,22,20,15,255
+
+ db 7,11,20,6,255
+ db 7,0,20,6,255
+ db 7,0,30,6,255
+
+ db 55,44,0,5,255
+ db 55,44,10,5,255
+
+ db 5,22,30,6,255
+ if demo
+ db 5,22,20,16,255
+ db 5,22,10,16,255
+ else
+ db 5,22,20,15,255
+ db 5,22,10,15,255
+ endif
+
+ db 24,22,0,15,255
+ db 24,33,0,15,255
+ db 24,44,0,15,255
+ db 24,33,10,15,255
+
+ db 8,0,10,6,255
+ db 8,11,10,6,255
+ db 8,22,10,6,255
+ db 8,33,10,6,255
+ db 8,33,20,6,255
+ db 8,33,30,6,255
+ db 8,33,40,6,255
+ db 8,22,40,6,255
+ db 8,11,40,6,255
+
+ db 11,11,20,12,255
+ db 11,11,30,12,255
+ db 11,22,20,12,255
+ db 11,22,30,12,255
+
+ db 12,22,20,12,255
+ db 13,22,20,12,255
+ db 13,33,20,12,255
+
+ db 14,44,20,12,255
+ db 14,33,0,12,255
+ db 14,33,10,12,255
+ db 14,33,20,12,255
+ db 14,33,30,12,255
+ db 14,33,40,12,255
+ db 14,22,0,16,255
+
+ db 19,0,0,12,255
+
+ db 20,0,20,16,255
+ db 20,0,30,16,255
+ db 20,11,30,16,255
+ db 20,0,40,16,255
+ db 20,11,40,16,255
+
+ if demo
+ db 21,11,10,16,255
+ db 21,11,20,16,255
+ db 21,0,20,16,255
+ db 21,22,20,16,255
+ db 21,33,20,16,255
+ db 21,44,20,16,255
+ db 21,44,10,16,255
+ else
+ db 21,11,10,15,255
+ db 21,11,20,15,255
+ db 21,0,20,15,255
+ db 21,22,20,15,255
+ db 21,33,20,15,255
+ db 21,44,20,15,255
+ db 21,44,10,15,255
+ endif
+
+ db 22,22,10,16,255
+ db 22,22,20,16,255
+
+ db 23,22,30,13,255
+ db 23,22,40,13,255
+ db 23,33,40,13,255
+ db 23,11,40,13,255
+ db 23,0,40,13,255
+ db 23,0,50,13,255
+
+ db 25,11,40,16,255
+ db 25,11,50,16,255
+ db 25,0,50,16,255
+
+ db 27,11,20,16,255
+ db 27,11,30,16,255
+
+ db 29,11,10,16,255
+
+ db 45,22,30,12,255
+ db 45,22,40,12,255
+ db 45,22,50,12,255
+
+ db 46,22,40,12,255
+ db 46,11,50,12,255
+ db 46,22,50,12,255
+ db 46,33,50,12,255
+
+ db 47,0,0,12,255
+
+ db 26,22,20,16,255
+ db 26,33,10,16,255
+ db 26,33,20,16,255
+ db 26,33,30,16,255
+ db 26,44,30,16,255
+ db 26,22,30,16,255
+ db 26,11,30,16,255
+ db 26,11,20,16,255
+ db 26,0,20,16,255
+ db 26,11,40,16,255
+ db 26,0,40,16,255
+ db 26,22,40,16,255
+ db 26,11,50,16,255
+
+ db 28,0,30,15,255
+ db 28,0,20,15,255
+ db 28,0,40,15,255
+ db 28,11,30,15,255
+ db 28,11,20,15,255
+ db 28,22,30,15,255
+ db 28,22,20,15,255
+
+ db 255
+
+ endp
+
+
+
+
+
+
+Walkintoroom proc near
+
+ cmp location,14
+ jnz notlair
+ cmp mapx,22
+ jnz notlair
+ mov destination,1
+ mov finaldest,1
+ call autosetwalk
+notlair: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+Afterintroroom proc near
+
+ cmp nowinnewroom,0
+ jz notnewintro
+ call clearwork
+ call findroominloc
+ mov newobs,1
+ call drawfloor
+ call reelsonscreen
+ call spriteupdate
+ call printsprites
+ call worktoscreen
+ mov nowinnewroom,0
+notnewintro: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Obname proc near
+
+ cmp reasseschanges,0
+ jz notnewpath
+ mov reasseschanges,0
+ jmp diff
+
+notnewpath: cmp ah,commandtype
+ jz notdiffob
+ jmp diff
+notdiffob: cmp al,command
+ jnz diff
+ cmp walkandexam,1
+ jz walkandexamine
+ cmp mousebutton,0
+ jz noobselect
+ cmp commandtype,3
+ jnz isntblock
+ cmp lastflag,2
+ jc noobselect
+isntblock: mov bl,manspath
+ cmp bl,pointerspath
+ jnz wantstowalk
+ cmp commandtype,3
+ jz wantstowalk
+ call finishedwalking
+ jnz noobselect
+ cmp commandtype,5
+ jz wantstotalk
+ cmp watchingtime,0
+ jnz noobselect
+ call examineob
+ ret
+wantstotalk: cmp watchingtime,0
+ jnz noobselect
+ call talk
+ ret
+walkandexamine: call finishedwalking
+ jnz noobselect
+ mov al,walkexamtype
+ mov commandtype,al
+ mov al,walkexamnum
+ mov command,al
+ mov walkandexam,0
+ cmp commandtype,5
+ jz noobselect
+ call examineob
+ ret
+wantstowalk: call setwalk
+ mov reasseschanges,1
+noobselect: ret
+
+
+diff: mov command,al
+ mov commandtype,ah
+diff2: cmp linepointer,254
+ jnz middleofwalk
+ cmp watchingtime,0
+ jnz middleofwalk
+ mov al,facing
+ cmp al,turntoface
+ jnz middleofwalk
+ cmp commandtype,3
+ jnz notblock
+ mov bl,manspath
+ cmp bl,pointerspath
+ jnz dontcheck
+ mov cl,ryanx ;look under feet to see if
+ add cl,12 ;any flags are there
+ mov ch,ryany
+ add ch,12
+ call checkone
+ cmp cl,2
+ jc isblock
+dontcheck: call getflagunderp
+ cmp lastflag,2
+ jc isblock
+ cmp lastflag,128
+ jnc isblock
+ jmp toofaraway ; only here for turning on doorstep
+notblock: mov bl,manspath
+ cmp bl,pointerspath
+ jnz toofaraway
+ cmp commandtype,3
+ jz isblock
+ cmp commandtype,5
+ jz isaperson
+ call examineobtext
+ ret
+middleofwalk: call blocknametext
+ ret
+isblock: call blocknametext
+ ret
+isaperson: call personnametext
+ ret
+toofaraway: call walktotext
+ ret
+
+ endp
+
+
+
+
+
+
+
+Finishedwalking proc near
+
+ cmp linepointer,254
+ jnz iswalking
+ mov al,facing
+ cmp al,turntoface
+iswalking: ret
+
+ endp
+
+
+
+
+
+
+
+Examineobtext proc near
+
+ mov bl,command
+ mov bh,commandtype
+ mov al,1
+ call commandwithob
+ ret
+
+ endp
+
+
+
+
+
+Commandwithob proc near
+
+ push ax
+ push ax bx cx dx es ds si di
+ call deltextline
+ pop di si ds es dx cx bx ax
+
+ push bx
+ mov ah,0
+ add ax,ax
+ mov bx,ax
+ mov es,commandtext
+ mov ax,[es:bx]
+ add ax,textstart
+ mov si,ax
+
+ mov di,textaddressx
+ mov bx,textaddressy
+ mov dl,textlen
+ mov al,0
+ mov ah,0
+ call printdirect
+
+ pop ax
+ mov di,offset cs:commandline
+ call copyname
+ pop ax
+
+ mov di,lastxpos
+ cmp al,0
+ jz noadd
+ add di,5
+noadd: mov bx,textaddressy
+ push cs
+ pop es
+ mov si,offset cs:commandline
+ mov dl,textlen
+ mov al,0
+ mov ah,0
+ call printdirect
+ mov newtextline,1
+ ret
+
+commandline: db "OBJECT NAME ONE ",0
+
+ endp
+
+
+
+
+Commandonly proc near
+
+ push ax bx cx dx es ds si di
+ call deltextline
+ pop di si ds es dx cx bx ax
+
+ mov ah,0
+ add ax,ax
+ mov bx,ax
+ mov es,commandtext
+ mov ax,[es:bx]
+ add ax,textstart
+ mov si,ax
+
+ mov di,textaddressx
+ mov bx,textaddressy
+ mov dl,textlen
+ mov al,0
+ mov ah,0
+ call printdirect
+ mov newtextline,1
+ ret
+
+ endp
+
+
+
+
+
+Printmessage proc near
+
+ push dx bx di
+ mov ah,0
+ add ax,ax
+ mov bx,ax
+ mov es,commandtext
+ mov ax,[es:bx]
+ add ax,textstart
+ mov si,ax
+ pop di bx dx
+ mov al,0
+ mov ah,0
+ call printdirect
+ ret
+
+ endp
+
+
+
+Printmessage2 proc near
+
+ push dx bx di
+ push ax
+ mov ah,0
+ add ax,ax
+ mov bx,ax
+ mov es,commandtext
+ mov ax,[es:bx]
+ add ax,textstart
+ mov si,ax
+ pop ax
+
+searchmess: push ax
+ call findnextcolon
+ pop ax
+ dec ah
+ jnz searchmess
+
+ pop di bx dx
+ mov al,0
+ mov ah,0
+ call printdirect
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Blocknametext proc near
+
+ mov bl,command
+ mov bh,commandtype
+ mov al,0
+ call commandwithob
+ ret
+
+ endp
+
+
+
+
+Personnametext proc near
+
+ mov bl,command
+ and bl,127
+ mov bh,commandtype
+ mov al,2
+ call commandwithob
+ ret
+
+ endp
+
+
+
+
+
+
+
+Walktotext proc near
+
+ mov bl,command
+ mov bh,commandtype
+ mov al,3
+ call commandwithob
+ ret
+
+ endp
+
+
+
+
+
+Getflagunderp proc near
+
+ mov cx,mousex
+ sub cx,mapadx
+ mov ax,mousey
+ sub ax,mapady
+ mov ch,al
+ call checkone
+ mov lastflag,cl
+ mov lastflagex,ch
+ ret
+
+ endp
+
+
+
+
+
+Setwalk proc near
+
+ cmp linepointer,254
+ jnz alreadywalking
+ mov al,pointerspath
+ cmp al,manspath
+ jz cantwalk2
+ cmp watchmode,1
+ jz holdingreel
+ cmp watchmode,2
+ jz cantwalk
+ mov destination,al
+ mov finaldest,al
+ cmp mousebutton,2
+ jnz notwalkandexam
+ cmp commandtype,3
+ jz notwalkandexam
+ mov walkandexam,1
+ mov al,commandtype
+ mov walkexamtype,al
+ mov al,command
+ mov walkexamnum,al
+notwalkandexam: call autosetwalk
+cantwalk: ret
+cantwalk2: call facerightway
+ ret
+alreadywalking: mov al,pointerspath
+ mov finaldest,al
+ ret
+
+holdingreel: mov destafterhold,al
+ mov watchmode,2
+ ret
+
+ endp
+
+
+
+
+
+
+
+Autosetwalk proc near
+
+ mov al,manspath
+ cmp finaldest,al
+ jnz notsamealready
+ ret
+notsamealready: call getroomspaths
+ call checkdest
+ push bx
+ mov al,manspath
+ mov ah,0
+ add ax,ax
+ add ax,ax
+ add ax,ax
+ add bx,ax
+ mov al,[es:bx]
+ mov ah,0
+ sub ax,12
+ mov linestartx,ax
+ mov al,[es:bx+1]
+ mov ah,0
+ sub ax,12
+ mov linestarty,ax
+ pop bx
+
+ mov al,destination
+ mov ah,0
+ add ax,ax
+ add ax,ax
+ add ax,ax
+ add bx,ax
+ mov al,[es:bx]
+ mov ah,0
+ sub ax,12
+ mov lineendx,ax
+ mov al,[es:bx+1]
+ mov ah,0
+ sub ax,12
+ mov lineendy,ax
+ call bresenhams
+
+ cmp linedirection,0
+ jz normalline
+ mov al,linelength
+ dec al
+ mov linepointer,al
+ mov linedirection,1
+ ret
+
+normalline: mov linepointer,0
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Checkdest proc near
+
+ push bx
+ add bx,12*8
+ mov ah,manspath
+ mov cl,4
+ shl ah,cl
+ mov al,destination
+
+ mov cl,24
+ mov ch,destination
+checkdestloop: mov dh,[es:bx]
+ and dh,11110000b
+ mov dl,[es:bx]
+ and dl,00001111b
+ cmp ax,dx
+ jnz nextcheck
+ mov al,[es:bx+1]
+ and al,15
+ mov destination,al
+ pop bx
+ ret
+nextcheck: mov dl,[es:bx]
+ and dl,11110000b
+ shr dl,1
+ shr dl,1
+ shr dl,1
+ shr dl,1
+ mov dh,[es:bx]
+ and dh,00001111b
+ shl dh,1
+ shl dh,1
+ shl dh,1
+ shl dh,1
+ cmp ax,dx
+ jnz nextcheck2
+ mov ch,[es:bx+1]
+ and ch,15
+nextcheck2: add bx,2
+ dec cl
+ jnz checkdestloop
+ mov destination,ch
+ pop bx
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bresenhams proc near
+
+ call workoutframes
+
+ mov dx,seg linedata
+ mov es,dx
+ mov di,offset es:linedata
+ mov si,1
+ mov linedirection,0
+
+ mov cx,lineendx
+ sub cx,linestartx
+ jz vertline
+ jns line1
+
+ neg cx
+ mov bx,lineendx
+ xchg bx,linestartx
+ mov lineendx,bx
+
+ mov bx,lineendy
+ xchg bx,linestarty
+ mov lineendy,bx
+ mov linedirection,1
+
+line1: mov bx,lineendy
+ sub bx,linestarty
+ jz horizline
+ jns line3
+
+ neg bx
+ neg si
+
+line3: push si
+ mov lineroutine,0 ; means lo slope
+ cmp bx,cx
+ jle line4
+ mov lineroutine,1 ; means hi slope
+ xchg bx,cx
+
+line4: shl bx,1
+ mov increment1,bx
+ sub bx,cx
+ mov si,bx
+ sub bx,cx
+ mov increment2,bx
+
+ mov ax,linestartx
+ mov bx,linestarty
+ mov ah,bl
+ inc cx
+ pop bx
+ cmp lineroutine,1
+ jz hislope
+ jmp loslope
+
+vertline: mov ax,linestarty
+ mov bx,lineendy
+ mov cx,bx
+ sub cx,ax
+ jge line31
+
+ neg cx
+ mov ax,bx
+ mov linedirection,1
+
+line31: inc cx
+ mov bx,linestartx
+ xchg ax,bx
+ mov ah,bl
+ mov bx,si
+line32: stosw
+ add ah,bl
+ loop line32
+ jmp lineexit
+
+
+horizline: mov ax,linestartx
+ mov bx,linestarty
+ mov ah,bl
+ inc cx
+horizloop: stosw
+ inc al
+ loop horizloop
+ jmp lineexit
+
+
+loslope:
+loloop: stosw
+ inc al
+ or si,si
+ jns line12
+ add si,increment1
+ loop loloop
+ jmp lineexit
+
+line12: add si,increment2
+ add ah,bl
+ loop loloop
+ jmp lineexit
+
+
+
+hislope:
+hiloop: stosw
+ add ah,bl
+ or si,si
+ jns line23
+ add si,increment1
+ loop hiloop
+ jmp lineexit
+
+line23: add si,increment2
+ inc al
+ loop hiloop
+
+lineexit: sub di,offset es:linedata
+ mov ax,di
+ shr ax,1
+ mov linelength,al
+ ret
+
+ endp
+
+
+
+
+
+
+
+Workoutframes proc near
+
+ mov bx,linestartx
+ add bx,32
+ mov ax,lineendx
+ add ax,32
+ sub bx,ax
+ jnc notneg1
+ neg bx
+notneg1: mov cx,linestarty
+ add cx,32
+ mov ax,lineendy
+ add ax,32
+ sub cx,ax
+ jnc notneg2
+ neg cx
+notneg2: cmp bx,cx
+ jnc tendstohoriz
+ mov dl,2
+ mov ax,cx
+ shr ax,1
+ cmp bx,ax
+ jc gotquad
+ mov dl,1
+ jmp gotquad
+tendstohoriz: mov dl,0
+ mov ax,bx
+ shr ax,1
+ cmp cx,ax
+ jc gotquad
+ mov dl,1
+ jmp gotquad
+
+gotquad: mov bx,linestartx
+ add bx,32
+ mov ax,lineendx
+ add ax,32
+ sub bx,ax
+ jc isinright
+isinleft: mov cx,linestarty
+ add cx,32
+ mov ax,lineendy
+ add ax,32
+ sub cx,ax
+ jnc topleft
+ cmp dl,1
+ jz noswap1
+ xor dl,2
+noswap1: add dl,4
+ jmp success
+topleft: add dl,6
+ jmp success
+
+isinright: mov cx,linestarty
+ add cx,32
+ mov ax,lineendy
+ add ax,32
+ sub cx,ax
+ jnc botright
+ add dl,2
+ jmp success
+botright: cmp dl,1
+ jz noswap2
+ xor dl,2
+noswap2:
+
+success: and dl,7
+ mov turntoface,dl
+ mov turndirection,0
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+;Multiply8 proc near
+;
+; mov ah,0
+; mov cx,8
+; mul cx
+; ret
+;
+; endp
+
+
+
+
+
+
+Getroomspaths proc near
+
+ mov al,roomnum
+ mov ah,0
+ mov cx,144
+ mul cx
+ mov es,reels
+ mov bx,pathdata
+ add bx,ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Copyname proc near
+
+ push di
+ call findobname
+ pop di
+ push cs
+ pop es
+
+copytext: mov cx,28
+make: lodsb
+ cmp al,":"
+ jz finishmakename
+ cmp al,0
+ jz finishmakename
+ stosb
+ loop make
+
+finishmakename: inc cx
+ mov al,0
+ stosb
+ ret
+ mov al,255
+ rep stosb
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Findobname proc near
+
+ push ax
+ mov ah,0
+ add ax,ax
+ mov bx,ax
+ pop ax
+
+ cmp ah,5
+ jnz notpersonname
+
+ push ax
+ and al,127
+ mov ah,0
+ mov bx,64*2
+ mul bx
+ mov si,ax
+ mov ds,people
+ add si,persontxtdat
+ mov cx,persontext
+ mov ax,[si]
+ add ax,cx
+ mov si,ax
+ pop ax
+ ret
+
+notpersonname: cmp ah,4
+ jnz notextraname
+ mov ds,extras
+ add bx,extextdat
+ mov ax,[bx]
+ add ax,extext
+ mov si,ax
+ ret
+
+notextraname: cmp ah,2
+ jnz notfreename
+ mov ds,freedesc
+ add bx,freetextdat
+ mov ax,[bx]
+ add ax,freetext
+ mov si,ax
+ ret
+
+notfreename: cmp ah,1
+ jnz notsetname
+ mov ds,setdesc
+ add bx,settextdat
+ mov ax,[bx]
+ add ax,settext
+ mov si,ax
+ ret
+
+notsetname: mov ds,blockdesc
+ add bx,blocktextdat
+ mov ax,[bx]
+ add ax,blocktext
+ mov si,ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+;-------------------------------------------Printing of non scrolling icons----
+
+Showicon proc near
+
+ cmp reallocation,50
+ jnc isdream1
+ call showpanel
+ call showman
+ call roomname
+ call panelicons1
+ call zoomicon
+ ret
+
+isdream1: mov ds,tempsprites
+ mov di,72
+ mov bx,2
+ mov al,45
+ mov ah,0
+ call showframe
+ mov ds,tempsprites
+ mov di,72+47
+ mov bx,2
+ mov al,46
+ mov ah,0
+ call showframe
+ mov ds,tempsprites
+ mov di,69-10
+ mov bx,21
+ mov al,49
+ mov ah,0
+ call showframe
+
+ mov ds,tempsprites
+ mov di,160+88
+ mov bx,2
+ mov al,45
+ mov ah,4
+ call showframe
+ mov ds,tempsprites
+ mov di,160+43
+ mov bx,2
+ mov al,46
+ mov ah,4
+ call showframe
+ mov ds,tempsprites
+ mov di,160+101
+ mov bx,21
+ mov al,49
+ mov ah,4
+ call showframe
+ call middlepanel
+ ret
+
+ endp
+
+
+
+
+
+Middlepanel proc near
+
+ mov ds,tempsprites
+ mov di,72+47+20
+ mov bx,0
+ mov al,48
+ mov ah,0
+ call showframe
+ mov ds,tempsprites
+ mov di,72+19
+ mov bx,21
+ mov al,47
+ mov ah,0
+ call showframe
+ mov ds,tempsprites
+ mov di,160+23
+ mov bx,0
+ mov al,48
+ mov ah,4
+ call showframe
+ mov ds,tempsprites
+ mov di,160+71
+ mov bx,21
+ mov al,47
+ mov ah,4
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Showman proc near
+
+ mov ds,icons1
+ mov di,0
+ mov bx,0
+ mov al,0
+ mov ah,0
+ call showframe
+ mov ds,icons1
+ mov di,0
+ mov bx,114
+ mov al,1
+ mov ah,0
+ call showframe
+
+ cmp shadeson,0
+ jz notverycool
+
+ mov ds,icons1
+ mov di,28
+ mov bx,25
+ mov al,2
+ mov ah,0
+ call showframe
+notverycool: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Showpanel proc near
+
+ mov ds,icons1
+ mov di,72
+ mov bx,0
+ mov al,19
+ mov ah,0
+ call showframe
+ mov ds,icons1
+ mov di,192
+ mov bx,0
+ mov al,19
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Roomname proc near
+
+ mov di,88
+ mov bx,18
+ mov al,53
+ mov dl,240
+ call printmessage
+
+ mov bl,roomnum
+ cmp bl,32
+ jc notover32
+ sub bl,32
+
+notover32: mov bh,0
+ add bx,bx
+ mov es,roomdesc
+ add bx,intextdat
+ mov ax,[es:bx]
+ add ax,intext
+ mov si,ax
+
+ mov linespacing,7
+ mov di,88
+ mov bx,25
+ mov dl,120
+ cmp watchon,1
+ jz gotpl
+ mov dl,160
+gotpl: mov al,0
+ mov ah,0
+ call printdirect
+ mov linespacing,10
+
+ call usecharset1
+ ret
+
+ endp
+
+
+
+
+
+
+Usecharset1 proc near
+
+ mov ax,charset1
+ mov currentset,ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Usetempcharset proc near
+
+ mov ax,tempcharset
+ mov currentset,ax
+ ret
+
+ endp
+
+
+
+
+
+Showexit proc near
+
+ mov ds,icons1
+ mov di,274
+ mov bx,154
+ mov al,11
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+Panelicons1 proc near
+
+ mov di,0
+ cmp watchon,1
+ jz watchison
+ mov di,48
+watchison: push di
+ mov ds,icons2
+ add di,204
+ mov bx,4
+ mov al,2
+ mov ah,0
+ call showframe
+ pop di
+ push di
+ cmp zoomon,1
+ jz zoomisoff
+ mov ds,icons1
+ add di,228
+ mov bx,8
+ mov al,5
+ mov ah,0
+ call showframe
+zoomisoff: pop di
+ call showwatch
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+Showwatch proc near
+
+ cmp watchon,0
+ jz nowristwatch
+ mov ds,icons1
+ mov di,250
+ mov bx,1
+ mov al,6
+ mov ah,0
+ call showframe
+ call showtime
+nowristwatch: ret
+
+ endp
+
+
+Gettime proc near
+
+ mov ah,2ch
+ int 21h
+ mov secondcount,dh
+ mov minutecount,cl
+ mov hourcount,ch
+ ret
+
+ endp
+
+
+
+
+
+Zoomicon proc near
+
+ cmp zoomon,0
+ jz nozoom1
+ mov ds,icons1
+ mov di,zoomx
+ mov bx,zoomy-1
+ mov al,8
+ mov ah,0
+ call showframe
+nozoom1: ret
+
+ endp
+
+
+
+
+
+
+Showblink proc near
+
+ cmp manisoffscreen,1
+ jz finblink1
+ inc blinkcount
+ cmp shadeson,0
+ jnz finblink1
+ cmp reallocation,50
+ jnc eyesshut
+ mov al,blinkcount
+ cmp al,3
+ jnz finblink1
+ mov blinkcount,0
+ mov al,blinkframe
+ inc al
+ mov blinkframe,al
+ cmp al,6
+ jc nomorethan6
+ mov al,6
+nomorethan6: mov ah,0
+ mov bx,offset cs:blinktab
+ add bx,ax
+
+ mov al,[cs:bx]
+ mov ds,icons1
+ mov di,44
+ mov bx,32
+ mov ah,0
+ call showframe
+finblink1: ret
+
+eyesshut: ;mov al,32
+ ;mov ds,icons1
+ ;mov di,44
+ ;mov bx,32
+ ;mov ah,0
+ ;call showframe
+ ret
+
+blinktab: db 16,18,18,17,16,16,16
+
+ endp
+
+
+
+
+
+
+Dumpblink proc near
+
+ cmp shadeson,0
+ jnz nodumpeye
+ cmp blinkcount,0
+ jnz nodumpeye
+ mov al,blinkframe
+ cmp al,6
+ jnc nodumpeye
+ push ds
+ mov di,44
+ mov bx,32
+ mov cl,16
+ mov ch,12
+ call multidump
+ pop ds
+nodumpeye: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Worktoscreenm proc near
+
+ call animpointer
+ call readmouse
+ call showpointer
+ call vsync
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+;-------------------------------------------------------------Blank routine----
+
+
+
+
+Blank proc near
+
+ cmp commandtype,199
+ jz alreadyblnk
+ mov commandtype,199
+ mov al,0
+ call commandonly
+alreadyblnk: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+;---------------------------------------------------------Standard routines----
+
+
+
+
+
+
+
+
+
+
+
+
+
+Allpointer proc near
+
+ call readmouse
+ call showpointer
+ call dumppointer
+ ret
+
+ endp
+
+
+
+
+
+
+
+Hangonp proc near
+
+ push cx
+ add cx,cx
+ pop ax
+ add cx,ax
+ mov maintimer,0
+ mov al,pointerframe
+ mov ah,pickup
+ push ax
+ mov pointermode,3
+ mov pickup,0
+ push cx
+ mov commandtype,255
+ call readmouse
+ call animpointer
+ call showpointer
+ call vsync
+ call dumppointer
+ pop cx
+
+hangloop: push cx
+ call delpointer
+ call readmouse
+ call animpointer
+ call showpointer
+ call vsync
+ call dumppointer
+ pop cx
+ mov ax,mousebutton
+ cmp ax,0
+ jz notpressed
+ cmp ax,oldbutton
+ jnz getoutofit
+notpressed: loop hangloop
+
+getoutofit: call delpointer
+ pop ax
+ mov pointerframe,al
+ mov pickup,ah
+ mov pointermode,0
+ ret
+
+ endp
+
+
+
+
+
+Hangonw proc near
+
+hangloopw: push cx
+ call delpointer
+ call readmouse
+ call animpointer
+ call showpointer
+ call vsync
+ call dumppointer
+ pop cx
+ loop hangloopw
+ ret
+
+ endp
+
+
+
+
+Hangoncurs proc near
+
+monloop1: push cx
+ call printcurs
+ call vsync
+ call delcurs
+ pop cx
+ loop monloop1
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Getunderzoom proc near
+
+ mov di,zoomx+5
+ mov bx,zoomy+4
+ mov ds,buffers
+ mov si,zoomspace
+ mov cl,46
+ mov ch,40
+ call multiget
+ ret
+
+ endp
+
+
+
+
+
+Dumpzoom proc near
+
+ cmp zoomon,1
+ jnz notzoomon
+ mov di,zoomx+5
+ mov bx,zoomy+4
+ mov cl,46
+ mov ch,40
+ call multidump
+notzoomon: ret
+
+ endp
+
+
+
+
+
+
+
+Putunderzoom proc near
+
+ mov di,zoomx+5
+ mov bx,zoomy+4
+ mov ds,buffers
+ mov si,zoomspace
+ mov cl,46
+ mov ch,40
+ call multiput
+ ret
+
+ endp
+
+
+
+
+
+Crosshair proc near
+
+ cmp commandtype,3
+ jz nocross
+ cmp commandtype,10
+ jnc nocross
+
+ mov es,workspace
+ mov ds,icons1
+ mov di,zoomx+24
+ mov bx,zoomy+19
+ mov al,9
+ mov ah,0
+ call showframe
+ ret
+
+nocross: mov es,workspace
+ mov ds,icons1
+ mov di,zoomx+24
+ mov bx,zoomy+19
+ mov al,29
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+Showpointer proc near
+
+ call showblink
+ mov di,mousex
+ mov oldpointerx,di
+ mov bx,mousey
+ mov oldpointery,bx
+ cmp pickup,1
+ jz itsanobject
+
+ push bx di
+ mov ds,icons1
+ mov al,pointerframe
+ add al,20
+ mov ah,0
+ add ax,ax
+ mov si,ax
+ add ax,ax
+ add si,ax
+ mov cx,[si]
+ cmp cl,12
+ jnc notsmallx
+ mov cl,12
+notsmallx: cmp ch,12
+ jnc notsmally
+ mov ch,12
+notsmally: mov pointerxs,cl
+ mov pointerys,ch
+ push ds
+ mov ds,buffers
+ mov si,pointerback
+ call multiget
+ pop ds di bx
+ push di bx
+ mov al,pointerframe
+ add al,20
+ mov ah,0
+ call showframe
+ pop bx di
+ ret
+
+itsanobject: mov al,itemframe
+ mov ds,extras
+ cmp objecttype,4
+ jz itsfrominv
+ mov ds,freeframes
+itsfrominv: mov cl,al
+ add al,al
+ add al,cl
+ inc al
+ mov ah,0
+
+ push ax
+ add ax,ax
+ mov si,ax
+ add ax,ax
+ add si,ax
+ mov ax,2080
+ mov cx,[si]
+ cmp cl,12
+ jnc notsmallx2
+ mov cl,12
+notsmallx2: cmp ch,12
+ jnc notsmally2
+ mov ch,12
+notsmally2: mov pointerxs,cl
+ mov pointerys,ch
+ pop ax
+
+ push di bx
+ push ax bx di ds
+ mov al,cl
+ mov ah,0
+ shr ax,1
+ sub oldpointerx,ax
+ sub di,ax
+ mov al,ch
+ shr ax,1
+ sub oldpointery,ax
+ sub bx,ax
+ mov ds,buffers
+ mov si,pointerback
+ call multiget
+ pop ds di bx ax
+ mov ah,128
+ call showframe
+ pop bx di
+ mov ds,icons1
+ mov al,3
+ mov ah,128
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+Delpointer proc near
+
+ mov ax,oldpointerx
+ cmp ax,0ffffh
+ jz nevershown
+ mov delherex,ax
+ mov ax,oldpointery
+ mov delherey,ax
+ mov cl,pointerxs
+ mov delxs,cl
+ mov ch,pointerys
+ mov delys,ch
+ mov ds,buffers
+ mov si,pointerback
+ mov di,delherex
+ mov bx,delherey
+ call multiput
+nevershown: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Dumppointer proc near
+
+ call dumpblink
+ mov cl,delxs
+ mov ch,delys
+ mov di,delherex
+ mov bx,delherey
+ call multidump
+
+ mov bx,oldpointery
+ mov di,oldpointerx
+ cmp di,delherex
+ jnz difffound
+ cmp bx,delherey
+ jz notboth
+difffound: mov cl,pointerxs
+ mov ch,pointerys
+ call multidump
+notboth: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Undertextline proc near
+
+ mov di,textaddressx
+ mov bx,textaddressy
+ if foreign
+ sub bx,3
+ endif
+ mov ds,buffers
+ mov si,textunder
+ mov cl,undertextsizex
+ mov ch,undertextsizey
+ call multiget
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Deltextline proc near
+
+ mov di,textaddressx
+ mov bx,textaddressy
+ if foreign
+ sub bx,3
+ endif
+ mov ds,buffers
+ mov si,textunder
+ mov cl,undertextsizex
+ mov ch,undertextsizey
+ call multiput
+ ret
+
+ endp
+
+
+
+
+
+Dumptextline proc near
+
+ cmp newtextline,1
+ jnz nodumptextline
+ mov newtextline,0
+ mov di,textaddressx
+ mov bx,textaddressy
+ if foreign
+ sub bx,3
+ endif
+ mov cl,undertextsizex
+ mov ch,undertextsizey
+ call multidump
+nodumptextline: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Animpointer proc near
+
+ cmp pointermode,2
+ jz combathand
+ cmp pointermode,3
+ jz mousehand
+
+ cmp watchingtime,0
+ jz notwatchpoint
+ mov pointerframe,11
+ ret
+notwatchpoint: mov pointerframe,0
+ cmp inmaparea,0
+ jz gothand
+ cmp pointerfirstpath,0
+ jz gothand
+arrow: call getflagunderp
+ cmp cl,2
+ jc gothand
+ cmp cl,128
+ jnc gothand
+ mov pointerframe,3
+ test cl,4
+ jnz gothand
+ mov pointerframe,4
+ test cl,16
+ jnz gothand
+ mov pointerframe,5
+ test cl,2
+ jnz gothand
+ mov pointerframe,6
+ test cl,8
+ jnz gothand
+ mov pointerframe,8
+gothand: ret
+
+mousehand: cmp pointerspeed,0
+ jz rightspeed3
+ dec pointerspeed
+ jmp finflashmouse
+rightspeed3: mov pointerspeed,5
+ inc pointercount
+ cmp pointercount,16
+ jnz finflashmouse
+ mov pointercount,0
+finflashmouse: mov al,pointercount
+ mov ah,0
+ mov bx,offset cs:flashmousetab
+ add bx,ax
+ mov al,[cs:bx]
+ mov pointerframe,al
+ ret
+
+combathand: mov pointerframe,0
+ cmp reallocation,14
+ jnz notarrow
+ cmp commandtype,211
+ jnz notarrow
+ mov pointerframe,5
+notarrow: ret
+
+flashmousetab: db 1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2
+
+ endp
+
+
+
+
+;------------------------------------------------Mouse and keyboard-readers----
+
+Setmouse proc near
+
+ if recording
+ mov recordpos,-8
+ mov dx,seg recname
+ mov ds,dx
+ mov dx,offset recname
+ mov cx,0
+ mov ah,3ch
+ mov al,2
+ int 21h
+ mov rechandle,ax
+ endif
+
+ if playback
+ mov dx,seg recname
+ mov ds,dx
+ mov dx,offset recname
+ mov ah,3dh
+ mov al,2
+ int 21h
+ mov rechandle,ax
+ call loadrec
+ endif
+
+ mov oldpointerx,0ffffh
+
+ mov ax,0
+ int 33h
+ mov ax,8
+ mov cx,15
+ mov dx,184
+ int 33h
+ mov ax,7
+ mov cx,15
+ mov dx,298*2
+ int 33h
+ ret
+
+ endp
+
+
+
+
+
+Readmouse proc near
+
+ mov ax,mousebutton
+ mov oldbutton,ax
+ mov ax,mousex
+ mov oldx,ax
+ mov ax,mousey
+ mov oldy,ax
+ call mousecall
+ mov mousex,cx
+ mov mousey,dx
+ mov mousebutton,bx
+ ret
+
+ endp
+
+
+
+
+
+
+
+Mousecall proc near
+
+ if playback
+ call playmouse
+ ret
+ endif
+
+ mov ax,3
+ int 33h
+ shr cx,1
+ cmp cx,298
+ jc notxover
+ mov cx,298
+notxover: cmp cx,15
+ jnc notxover2
+ mov cx,15
+notxover2: cmp dx,184
+ jc notyover
+ mov dx,184
+notyover: cmp dx,15
+ jnc notyover2
+ mov dx,15
+notyover2:
+ if recording
+ call recmouse
+ endif
+ ret
+
+ endp
+
+
+
+
+
+
+ if playback
+
+Playmouse proc near
+
+ mov es,recordspace
+ mov di,recordpos
+ cmp word ptr [es:di+6],0
+ jnz isthisplay
+ add di,8
+ add recordpos,8
+ cmp di,16384
+ jnz isthisplay
+ call loadrec
+isthisplay: mov cx,[es:di]
+ mov dx,[es:di+2]
+ mov bx,[es:di+4]
+ dec word ptr [es:di+6]
+ ret
+
+ endp
+
+ endif
+
+ if recording
+
+Recmouse proc near
+
+ mov es,recordspace
+ mov di,recordpos
+ cmp di,-8
+ jz diffrec
+ cmp [es:di],cx
+ jnz diffrec
+ cmp [es:di+2],dx
+ jnz diffrec
+ cmp [es:di+4],bx
+ jnz diffrec
+ inc word ptr [es:di+6]
+ cmp word ptr [es:di+5],0ffffh
+ jz diffrec
+ ret
+diffrec: add recordpos,8
+ add di,8
+ cmp di,16384
+ jnz notsaverec
+ push cx dx bx
+ call saverec
+ pop bx dx cx
+notsaverec: mov [es:di],cx
+ mov [es:di+2],dx
+ mov [es:di+4],bx
+ mov word ptr [es:di+6],1
+ ret
+
+ endp
+
+
+
+
+
+Saverec proc near
+
+ mov bx,rechandle
+ mov ds,recordspace
+ mov dx,0
+ mov cx,recordpos
+ add cx,8
+ mov ah,40h
+ int 21h
+ mov di,0
+ mov recordpos,0
+ ret
+
+ endp
+
+
+
+
+
+
+Loadrec proc near
+
+ mov bx,rechandle
+ mov ds,recordspace
+ mov dx,0
+ mov cx,16384+8
+ mov ah,3fh
+ int 21h
+ mov di,0
+ mov recordpos,0
+ ret
+
+ endp
+
+
+ endif
+
+
+
+
+
+
+
+Readmouse1 proc near
+
+ mov ax,mousex
+ mov oldx,ax
+ mov ax,mousey
+ mov oldy,ax
+ call mousecall
+ mov mousex,cx
+ mov mousey,dx
+ mov mousebutton1,bx
+ ret
+
+ endp
+
+
+
+Readmouse2 proc near
+
+ mov ax,mousex
+ mov oldx,ax
+ mov ax,mousey
+ mov oldy,ax
+ call mousecall
+ mov mousex,cx
+ mov mousey,dx
+ mov mousebutton2,bx
+ ret
+
+ endp
+
+
+Readmouse3 proc near
+
+ mov ax,mousex
+ mov oldx,ax
+ mov ax,mousey
+ mov oldy,ax
+ call mousecall
+ mov mousex,cx
+ mov mousey,dx
+ mov mousebutton3,bx
+ ret
+
+ endp
+
+
+
+
+
+
+Readmouse4 proc near
+
+ mov ax,mousebutton
+ mov oldbutton,ax
+ mov ax,mousex
+ mov oldx,ax
+ mov ax,mousey
+ mov oldy,ax
+ call mousecall
+ mov mousex,cx
+ mov mousey,dx
+ mov ax,mousebutton1
+ or ax,mousebutton2
+ or ax,mousebutton3
+ or bx,ax
+ mov mousebutton,bx
+ ret
+
+ endp
+
+
+
+
+
+Readkey proc near
+
+ mov bx,bufferout
+ cmp bx,bufferin
+ jz nokey
+ inc bx
+ and bx,15
+ mov bufferout,bx
+ mov di,offset cs:keybuffer
+ add di,bx
+ mov al,[cs:di]
+ mov currentkey,al
+ ret
+nokey: mov currentkey,0
+ ret
+
+
+ endp
+
+keybuffer: db 16 dup (0)
+
+
+
+Convertkey proc near
+
+ and al,127
+ mov ah,0
+ mov di,offset cs:keyconverttab
+ add di,ax
+ mov al,[cs:di]
+ ret
+
+keyconverttab: db 0,0,"1","2","3","4","5","6","7","8","9","0","-",0,8,0
+ db "Q","W","E","R","T","Y","U","I","O","P",0,0,13,0,"A","S"
+ db "D","F","G","H","J","K","L",0,0,0,0,0,"Z","X","C","V","B","N","M"
+ db 0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+
+ endp
+
+
+
+
+;-------------------------------------------------------------Miscellaneous----
+
+Randomnum1 proc near
+
+ push ds es di bx cx
+ call randomnumber
+ pop cx bx di es ds
+ ret
+
+ endp
+
+
+
+
+
+Randomnum2 proc near
+
+ push ds es di bx ax
+ call randomnumber
+ mov cl,al
+ pop ax bx di es ds
+ ret
+
+ endp
+
+
+
+
+
+Randomnumber proc near
+
+ mov al,seed
+ and al,48h
+ add al,38h
+ sal al,1
+ sal al,1
+ rcl seed+2,1
+ rcl seed+1,1
+ rcl seed+0,1
+ mov al,seed
+ and al,48h
+ add al,38h
+ sal al,1
+ sal al,1
+ rcl seed+2,1
+ rcl seed+1,1
+ rcl seed+0,1
+ mov al,seed
+ and al,48h
+ add al,38h
+ sal al,1
+ sal al,1
+ rcl seed+2,1
+ rcl seed+1,1
+ rcl seed+0,1
+ mov al,seed
+ and al,48h
+ add al,38h
+ sal al,1
+ sal al,1
+ rcl seed+2,1
+ rcl seed+1,1
+ rcl seed+0,1
+ mov al,seed
+ and al,48h
+ add al,38h
+ sal al,1
+ sal al,1
+ rcl seed+2,1
+ rcl seed+1,1
+ rcl seed+0,1
+ mov al,seed
+ and al,48h
+ add al,38h
+ sal al,1
+ sal al,1
+ rcl seed+2,1
+ rcl seed+1,1
+ rcl seed+0,1
+ mov al,seed
+ and al,48h
+ add al,38h
+ sal al,1
+ sal al,1
+ rcl seed+2,1
+ rcl seed+1,1
+ rcl seed+0,1
+ mov al,seed
+ and al,48h
+ add al,38h
+ sal al,1
+ sal al,1
+ rcl seed+2,1
+ rcl seed+1,1
+ rcl seed+0,1
+
+ mov al,seed
+ ret
+
+ endp
+
+
+
+
+
+
+Hangon proc near
+
+hangonloop: push cx
+ call vsync
+ pop cx
+ loop hangonloop
+ ret
+
+ endp
+
+
+
+
+
+;-------------------------------------------------------------Disc handling----
+
+
+Loadtraveltext proc near
+
+ mov dx,offset cs:traveltextname
+ call standardload
+ mov traveltext,ax
+ ret
+
+ endp
+
+
+
+
+
+
+Loadintotemp proc near
+
+ push cs
+ pop ds
+ call standardload
+ mov tempgraphics,ax
+ ret
+
+ endp
+
+
+
+
+
+
+Loadintotemp2 proc near
+
+ push cs
+ pop ds
+ call standardload
+ mov tempgraphics2,ax
+ ret
+
+ endp
+
+
+
+
+Loadintotemp3 proc near
+
+ push cs
+ pop ds
+ call standardload
+ mov tempgraphics3,ax
+ ret
+
+ endp
+
+
+
+Loadtempcharset proc near
+
+ call standardload
+ mov tempcharset,ax
+ ret
+
+ endp
+
+
+
+
+
+
+Standardload proc near
+
+ call openfile
+ call readheader
+ mov bx,[es:di]
+ push bx
+ mov cl,4
+ shr bx,cl
+ call allocatemem
+ mov ds,ax
+ pop cx
+ push ax
+ mov dx,0
+ call readfromfile
+ call closefile
+ pop ax
+ ret
+
+ endp
+
+
+
+
+
+
+Loadtemptext proc near
+
+ call standardload
+ mov textfile1,ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+Loadroom proc near
+
+ mov roomloaded,1
+ mov timecount,0
+ mov maintimer,0
+ mov mapoffsetx,104
+ mov mapoffsety,38
+ mov textaddressx,13
+ mov textaddressy,182
+ mov textlen,240
+ mov al,newlocation
+ mov location,al
+ call getroomdata
+ call startloading
+ call loadroomssample
+ call switchryanon
+ call drawflags
+ call getdimension
+ ret
+
+ endp
+
+
+
+
+Loadroomssample proc near
+
+ mov al,roomssample
+ cmp al,255
+ jz loadedalready
+ cmp al,currentsample
+ jz loadedalready
+ mov currentsample,al
+ mov al,currentsample
+ mov cl,"0"
+ call twodigitnum
+ mov di,offset cs:samplename
+ xchg al,ah
+ mov [cs:di+10],ax
+ mov dx,di
+ call loadsecondsample
+loadedalready: ret
+
+ endp
+
+
+
+
+
+Getridofreels proc near
+
+ cmp roomloaded,0
+ jz dontgetrid
+ mov es,reel1
+ call deallocatemem
+ mov es,reel2
+ call deallocatemem
+ mov es,reel3
+ call deallocatemem
+dontgetrid: ret
+
+ endp
+
+
+
+
+
+Getridofall proc near
+
+ mov es,backdrop
+ call deallocatemem
+ mov es,setframes
+ call deallocatemem
+ mov es,reel1
+ call deallocatemem
+ mov es,reel2
+ call deallocatemem
+ mov es,reel3
+ call deallocatemem
+ mov es,reels
+ call deallocatemem
+ mov es,people
+ call deallocatemem
+ mov es,setdesc
+ call deallocatemem
+ mov es,blockdesc
+ call deallocatemem
+ mov es,roomdesc
+ call deallocatemem
+ mov es,freeframes
+ call deallocatemem
+ mov es,freedesc
+ call deallocatemem
+ ret
+
+ endp
+
+
+
+
+
+Restorereels proc near
+
+ cmp roomloaded,0
+ jz dontrestore
+ mov al,reallocation
+ call getroomdata
+ mov dx,bx
+ call openfile
+ call readheader
+
+ call dontloadseg
+ call dontloadseg
+ call dontloadseg
+ call dontloadseg
+
+ call allocateload
+ mov reel1,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+ call allocateload
+ mov reel2,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+ call allocateload
+ mov reel3,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+ call closefile
+dontrestore: ret
+
+ endp
+
+
+
+
+
+
+
+Restoreall proc near
+
+ mov al,location
+ call getroomdata
+ mov dx,bx
+ call openfile
+ call readheader
+
+ call allocateload
+ mov ds,ax
+ mov backdrop,ax
+ mov dx,flags
+ call loadseg
+
+ mov ds,workspace ;mapdata
+ mov dx,map
+ mov cx,132*66 ;maplen
+ mov al,0
+ call fillspace
+ call loadseg
+ call sortoutmap
+
+ call allocateload
+ mov setframes,ax
+ mov ds,ax
+ mov dx,framedata
+ call loadseg
+
+ ;mov ds,setdat
+ ;mov dx,0
+ ;mov cx,setdatlen
+ ;mov al,255
+ ;call fillspace
+ call dontloadseg
+
+ call allocateload
+ mov reel1,ax
+ mov ds,ax
+ mov dx,0
+ ;call bloc
;BIG FIXME: undefined bloc, replaced with loadseg. dunno!
call loadseg
- call allocateload
- mov reel2,ax
- mov ds,ax
- mov dx,0
- call loadseg
- call allocateload
- mov reel3,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- call allocateload
- mov reels,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- call allocateload
- mov people,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- call allocateload
- mov setdesc,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- call allocateload
- mov blockdesc,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- call allocateload
- mov roomdesc,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- call allocateload
- mov freeframes,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- ;mov ds,freedat
- ;mov dx,0
- ;mov cx,freedatlen
- ;mov al,255
- ;call fillspace
- call dontloadseg
-
- call allocateload
- mov freedesc,ax
- mov ds,ax
- mov dx,freetextdat
- call loadseg
-
- call closefile
-
- call setallchanges
- ret
-
- endp
-
-
-
-Sortoutmap proc near
-
- push es di
- mov ds,workspace
- mov si,0
- mov es,mapdata
- mov di,0
-
- mov cx,maplength
-blimey: push cx si
- mov cx,mapwidth
- rep movsb
- pop si cx
- add si,132
- loop blimey
- pop di es
- ret
-
- endp
-
-
-
-
-Startloading proc near
-
- mov combatcount,0
- mov al,[cs:bx+13]
- mov roomssample,al
- mov al,[cs:bx+15]
- mov mapx,al
- mov al,[cs:bx+16]
- mov mapy,al
-
- mov al,[cs:bx+20] ; start path pos
- mov liftflag,al
- mov al,[cs:bx+21] ; start path pos
- mov manspath,al
- mov destination,al
- mov finaldest,al
- mov al,[cs:bx+22]
- mov facing,al
- mov turntoface,al
- mov al,[cs:bx+23]
- mov counttoopen,al
- mov al,[cs:bx+24]
- mov liftpath,al
- mov al,[cs:bx+25]
- mov doorpath,al
- mov lastweapon,-1
- mov al,[cs:bx+27]
- push ax
-
- mov al,[cs:bx+31]
- mov ah,reallocation
- mov reallocation,al
-
- mov dx,bx
- call openfile
- call readheader
-
- call allocateload
- mov ds,ax
- mov backdrop,ax
- mov dx,flags
- call loadseg
-
- mov ds,workspace ;mapdata
- mov dx,map
- mov cx,132*66 ;maplen
- mov al,0
- call fillspace
- call loadseg
- call sortoutmap
-
- call allocateload
- mov setframes,ax
- mov ds,ax
- mov dx,framedata
- call loadseg
-
- mov ds,setdat
- mov dx,0
- mov cx,setdatlen
- mov al,255
- call fillspace
- call loadseg
-
- call allocateload
- mov reel1,ax
- mov ds,ax
- mov dx,0
- call loadseg
- call allocateload
- mov reel2,ax
- mov ds,ax
- mov dx,0
- call loadseg
- call allocateload
- mov reel3,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- call allocateload
- mov reels,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- call allocateload
- mov people,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- call allocateload
- mov setdesc,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- call allocateload
- mov blockdesc,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- call allocateload
- mov roomdesc,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- call allocateload
- mov freeframes,ax
- mov ds,ax
- mov dx,0
- call loadseg
-
- mov ds,freedat
- mov dx,0
- mov cx,freedatlen
- mov al,255
- call fillspace
- call loadseg
-
- call allocateload
- mov freedesc,ax
- mov ds,ax
- mov dx,freetextdat
- call loadseg
-
- call closefile
-
-
- call findroominloc
- call deletetaken
- call setallchanges
- call autoappear
- mov al,newlocation
- call getroomdata
- mov lastweapon,-1
- mov mandead,0
- mov lookcounter,160
- mov newlocation,255
- mov linepointer,254
- pop ax
- cmp al,255
- jz dontwalkin
- mov manspath,al
- push bx
- call autosetwalk
- pop bx
-dontwalkin: call findxyfrompath
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Disablepath proc near ;needs al,ah map x,y cl=path
-
- push cx
- xchg al,ah
- mov cx,-6
-looky2: add cx,6
- sub al,10
- jnc looky2
- mov al,ah
- dec cx
-lookx2: inc cx
- sub al,11
- jnc lookx2
- mov al,cl
- mov ah,0
- mov cx,144
- mul cx
- mov es,reels
- mov bx,pathdata
- add bx,ax
- pop ax
- mov ah,0
- add ax,ax
- add ax,ax
- add ax,ax
- add bx,ax
- mov al,0
- mov [es:bx+6],al
- ret
-
- endp
-
-
-
-
-
-
-
-
-Findxyfrompath proc near ;path number was found from
- ;room data. Fill ryanxy from
- call getroomspaths ;the pathdata.
- mov al,manspath
- mov ah,0
- add ax,ax
- add ax,ax
- add ax,ax
- add bx,ax
- mov ax,[es:bx]
- sub al,12
- sub ah,12
- mov ryanx,al
- mov ryany,ah
- ret
-
- endp
-
-
-
-
-
-Findroominloc proc near
-
- mov al,mapy
- mov cx,-6
-looky: add cx,6
- sub al,10
- jnc looky
- mov al,mapx
- dec cx
-lookx: inc cx
- sub al,11
- jnc lookx
- mov roomnum,cl
- ret
-
- endp
-
-
-
-
-
-
-Getroomdata proc near
-
- mov ah,0
- mov cx,32
- mul cx
- mov bx,offset cs:roomdata
- add bx,ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-Readheader proc near
-
- push cs
- pop ds
- mov dx,offset cs:fileheader
- mov cx,headerlen
- call readfromfile
- push cs
- pop es
- mov di,offset cs:filedata
- ret
-
- endp
-
-
-
-
-
-
-
-
-Dontloadseg proc neqr
-
- mov ax,[es:di]
- add di,2
- push bx di es
- mov cx,0
- mov dx,ax
- mov al,1
- mov ah,42h
- int 21h
- pop es di bx
- ret
-
- endp
-
-
-
-
-
-
-Allocateload proc near
-
- push es di
- mov bx,[es:di]
- mov cl,4
- shr bx,cl
- call allocatemem
- pop di es
- ret
-
- endp
-
-
-
-
-Fillspace proc near
-
- push es ds dx di bx
- mov di,dx
- push ds
- pop es
- rep stosb
- pop bx di dx ds es
- ret
-
- endp
-
-
-
-
-
-
-
-Getridoftemp proc near
-
- mov es,tempgraphics
- call deallocatemem
- ret
-
- endp
-
-
-
-
-
-Getridoftemptext proc near
-
- mov es,textfile1
- call deallocatemem
- ret
-
- endp
-
-
-
-
-
-Getridoftemp2 proc near
-
- mov es,tempgraphics2
- call deallocatemem
- ret
-
- endp
-
-
-
-Getridoftemp3 proc near
-
- mov es,tempgraphics3
- call deallocatemem
- ret
-
- endp
-
-
-
-Getridoftempcharset proc near
-
- mov es,tempcharset
- call deallocatemem
- ret
-
- endp
-
-
-
-Getridoftempsp proc near
-
- mov es,tempsprites
- call deallocatemem
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Readsetdata proc near
-
- mov dx,offset cs:characterset1
- call standardload
- mov charset1,ax
-
- mov dx,offset cs:icongraphics0
- call standardload
- mov icons1,ax
-
- mov dx,offset cs:icongraphics1
- call standardload
- mov icons2,ax
-
- mov dx,offset cs:spritename1
- call standardload
- mov mainsprites,ax
-
- mov dx,offset cs:puzzletextname
- call standardload
- mov puzzletext,ax
-
- mov dx,offset cs:commandtextname
- call standardload
- mov commandtext,ax
-
- mov ax,charset1
- mov currentset,ax
-
- cmp soundint,255
- jz novolumeload
- mov dx,offset cs:volumetabname
- call openfile
- mov cx,2048-256
- mov ds,soundbuffer
- mov dx,16384
- call readfromfile
- call closefile
-novolumeload: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Createfile proc near
-
- mov ah,3ch
- mov cx,0
- int 21h
- mov bx,ax
- ret
-
- endp
-
-
-
-
-
-
-
-Openfile proc near
-
- if cd
- call makename
- endif
- push cs
- pop ds
- mov ah,3dh
- mov al,2
- push dx
- int 21h
- pop dx
- jc fileerror
- mov handle,ax
- ret
-fileerror: mov gameerror,8
- jmp quickquit2
-
- endp
-
-
- if cd
-Openfilefromc proc near
-
- push cs
- pop ds
- mov ah,3dh
- mov al,2
- push dx
- int 21h
- pop dx
- mov handle,ax
- ret
-
- endp
- endif
-
-
- if cd
-Makename proc near
-
- if demo
- ret
- endif
- mov si,dx
- mov di,offset cs:place
-transfer: mov al,[cs:si]
- mov [cs:di],al
- inc si
- inc di
- cmp al,0
- jnz transfer
- mov dx,offset cs:id
- ret
-id: db "D:\"
-place: db 30 dup (0)
-
- endp
- endif
-
-
-
-
-
-Openfilenocheck proc near
-
- if cd
- call makename
- endif
- push cs
- pop ds
- mov ah,3dh
- mov al,2
- int 21h
- mov handle,ax
- ret
-
- endp
-
-
-
-Openforsave proc near
-
- mov cx,0
- mov ah,3ch
- mov al,2
- int 21h
- mov handle,ax
- ret
-
- endp
-
-
-
-Closefile proc near
-
- mov bx,handle
- mov ah,3eh
- int 21h
- ret
-
- endp
-
-
-
-
-Readfromfile proc near
-
- mov bx,handle
- mov ah,3fh
- int 21h
- ret
-
- endp
-
-
-
-
-Setkeyboardint proc near
-
- mov ah,35h
- mov al,9
- int 21h
- mov oldint9seg,es ; Save es:bx to temp memory
- mov oldint9add,bx
- push cs
- pop ds
- mov dx,offset cs:keyboardread
- mov ah,25h
- mov al,9
- int 21h ; Set to new
- ret
-
- endp
-
-
-
-
-Resetkeyboard proc near
-
- cmp oldint9add,-1
- jz noreset
- mov dx,oldint9add ;Restore old interupt vector
- mov ax,oldint9seg ;for keys
- mov ds,ax
- mov ah,25h
- mov al,9
- int 21h
-noreset: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Keyboardread proc near
-
- push ax dx di ds es
- in al,60h
- cmp al,lasthardkey
- jz same
- mov lasthardkey,al
- cmp al,128
- jnc same
- mov dx,bufferin
- inc dx
- and dx,15
- cmp dx,bufferout
- jz same ;buffer is full
- mov bufferin,dx
- call convertkey
- mov di,offset cs:keybuffer
- mov dx,bufferin
- add di,dx
- mov [cs:di],al
-same: in al,61h
- mov ah,al
- or al,80h ; Mask for Akn
- out 61h,al ; Set Akn.
- and al,7fh
- out 61h,al
- cli
- mov al,20h ; 8259 end of interrupt
- out 20h,al
- pop es ds di dx ax
- iret
-
- endp
-
-
-
-;------------------------------------------------------Text and tables data----
-
-
-
-Fileheader db "DREAMWEB DATA FILE "
- db "COPYRIGHT 1992 "
- db "CREATIVE REALITY"
-Filedata dw 20 dup (0)
-Extradata db 6 dup (0)
-Headerlen equ $-Fileheader
-
-
-Roomdata db "DREAMWEB.R00",0 ;Ryan's apartment
- db 5,255,33,10
- db 255,255,255,0
- db 1,6,2,255,3,255,255,255,255,255,0
-
- db "DREAMWEB.R01",0
- db 1,255,44,10
- db 255,255,255,0
- db 7,2,255,255,255,255,6,255,255,255,1
-
- db "DREAMWEB.R02",0
- db 2,255,33,0
- db 255,255,255,0
- db 1,0,255,255,1,255,3,255,255,255,2
-
- db "DREAMWEB.R03",0
- db 5,255,33,10
- db 255,255,255,0
- db 2,2,0,2,4,255,0,255,255,255,3
-
- db "DREAMWEB.R04",0
- db 23,255,11,30
- db 255,255,255,0
- db 1,4,0,5,255,255,3,255,255,255,4
-
- db "DREAMWEB.R05",0
- if demo
- db 22,255,22,30
- else
- db 5,255,22,30
- endif
- db 255,255,255,0
- db 1,2,0,4,255,255,3,255,255,255,5
-
- db "DREAMWEB.R06",0
- db 5,255,11,30
- db 255,255,255,0
- db 1,0,0,1,2,255,0,255,255,255,6
-
- db "DREAMWEB.R07",0
- db 255,255,0,20
- db 255,255,255,0
- db 2,2,255,255,255,255,0,255,255,255,7
-
- db "DREAMWEB.R08",0
- db 8,255,0,10
- db 255,255,255,0
- db 1,2,255,255,255,255,0,11,40,0,8
-
- db "DREAMWEB.R09",0
- db 9,255,22,10
- db 255,255,255,0
- db 4,6,255,255,255,255,0,255,255,255,9
-
- db "DREAMWEB.R10",0
- db 10,255,33,30
- db 255,255,255,0
- db 2,0,255,255,2,2,4,22,30,255,10 ;22,30,0 switches
- ;off path 0 in skip
- db "DREAMWEB.R11",0
- db 11,255,11,20
- db 255,255,255,0
- db 0,4,255,255,255,255,255,255,255,255,11
-
- db "DREAMWEB.R12",0
- db 12,255,22,20
- db 255,255,255,0
- db 1,4,255,255,255,255,255,255,255,255,12
-
- db "DREAMWEB.R13",0
- db 12,255,22,20
- db 255,255,255,0
- db 1,4,255,255,255,255,255,255,255,255,13
-
- db "DREAMWEB.R14",0
- db 14,255,44,20
- db 255,255,255,0
- db 0,6,255,255,255,255,255,255,255,255,14
-
- db 32 dup (0)
- db 32 dup (0)
- db 32 dup (0)
- db 32 dup (0)
-
- db "DREAMWEB.R19",0
- db 19,255,0,0
- db 255,255,255,0
- db 0,4,255,255,255,255,255,255,255,255,19
-
- db "DREAMWEB.R20",0
- db 22,255,0,20
- db 255,255,255,0
- db 1,4,2,15,255,255,255,255,255,255,20
-
- db "DREAMWEB.R21",0
- if demo
- db 22,255,11,10
- else
- db 5,255,11,10
- endif
- db 255,255,255,0
- db 1,4,2,15,1,255,255,255,255,255,21
-
- db "DREAMWEB.R22",0
- db 22,255,22,10
- db 255,255,255,0
- db 0,4,255,255,1,255,255,255,255,255,22
-
- db "DREAMWEB.R23",0
- db 23,255,22,30
- db 255,255,255,0
- db 1,4,2,15,3,255,255,255,255,255,23
-
- db "DREAMWEB.R24",0
- db 5,255,44,0
- db 255,255,255,0
- db 1,6,2,15,255,255,255,255,255,255,24
-
- db "DREAMWEB.R25",0
- db 22,255,11,40
- db 255,255,255,0
- db 1,0,255,255,255,255,255,255,255,255,25
-
- db "DREAMWEB.R26",0
- db 9,255,22,20
- db 255,255,255,0
- db 4,2,255,255,255,255,255,255,255,255,26
-
- db "DREAMWEB.R27",0
- db 22,255,11,20
- db 255,255,255,0
- db 0,6,255,255,255,255,255,255,255,255,27
-
- db "DREAMWEB.R28",0
- db 5,255,11,30
- db 255,255,255,0
- db 0,0,255,255,2,255,255,255,255,255,28
-
- db "DREAMWEB.R29",0
- db 22,255,11,10
- db 255,255,255,0
- db 0,2,255,255,255,255,255,255,255,255,29
-
-
-
- db "DREAMWEB.R05",0 ;Duplicate of hotel lobby,
- if demo
- db 22,255,22,10 ;but emerging from the lift.
- else
- db 5,255,22,10
- endif
- db 255,255,255,0
- db 1,4,1,15,255,255,255,255,255,255,5
-
- db "DREAMWEB.R04",0 ;Duplicate of pool hall lobby,
- db 23,255,22,20 ;but emerging from the lift.
- db 255,255,255,0
- db 1,4,2,15,255,255,255,255,255,255,4
-
- db "DREAMWEB.R10",0 ;entering alley via skip
- db 10,255,22,30
- db 255,255,255,0
- db 3,6,255,255,255,255,255,255,255,255,10
-
- db "DREAMWEB.R12",0 ;on the beach, getting up.
- db 12,255,22,20
- db 255,255,255,0
- db 0,2,255,255,255,255,255,255,255,255,12
-
- db "DREAMWEB.R03",0 ;Duplicate of Eden's lobby
- db 5,255,44,0 ;but emerging from the lift
- db 255,255,255,0
- db 1,6,2,255,4,255,255,255,255,255,3
-
- db "DREAMWEB.R24",0 ;Duplicate of Eden's flat
- db 5,255,22,0 ;but starting on the bed
- db 255,255,255,0
- db 3,6,0,255,255,255,255,33,0,3,24 ; 33,0,3 turns off
- ; path for lift
- db "DREAMWEB.R22",0 ;Duplicate
- db 22,255,22,20 ;of hotel but in pool room
- db 255,255,255,0
- db 1,4,255,255,255,255,255,255,255,255,22
-
- db "DREAMWEB.R22",0 ;Duplicate
- db 22,255,22,20 ;of hotel but in pool room
- db 255,255,255,0 ;coming out of bedroom
- db 0,2,255,255,255,255,255,255,255,255,22
-
- db "DREAMWEB.R11",0 ;Duplicate
- db 11,255,22,30 ;of carpark but getting
- db 255,255,255,0 ;up off the floor
- db 0,0,255,255,255,255,255,255,255,255,11
-
- db "DREAMWEB.R28",0
- db 5,255,11,20
- db 255,255,255,0
- db 0,6,255,255,2,255,255,255,255,255,28
-
- db "DREAMWEB.R21",0
- if demo
- db 22,255,11,10
- else
- db 5,255,11,10
- endif
- db 255,255,255,0
- db 1,4,2,15,1,255,255,255,255,255,21
-
- db "DREAMWEB.R26",0
- db 9,255,0,40
- db 255,255,255,0
- db 0,0,255,255,255,255,255,255,255,255,26
-
- db "DREAMWEB.R19",0
- db 19,255,0,0
- db 255,255,255,0
- db 2,2,255,255,255,255,255,255,255,255,19
-
- db "DREAMWEB.R08",0 ;leaving tvstudio into street
- db 8,255,11,40
- db 255,255,255,0
- db 0,4,255,255,255,255,255,255,255,255,8
-
- db "DREAMWEB.R01",0
- db 1,255,44,10
- db 255,255,255,0
- db 3,6,255,255,255,255,255,255,255,255,1
-
-
-
- db "DREAMWEB.R45",0 ;Dream room
- db 35,255,22,30
- db 255,255,255,0
- db 0,6,255,255,255,255,255,255,255,255,45
-
- db "DREAMWEB.R46",0 ;Dream room
- db 35,255,22,40
- db 255,255,255,0
- db 0,4,255,255,255,255,255,255,255,255,46
-
- db "DREAMWEB.R47",0 ;Dream room
- db 35,255,0,0
- db 255,255,255,0
- db 0,0,255,255,255,255,255,255,255,255,47
-
- db "DREAMWEB.R45",0 ;Dream room
- db 35,255,22,30
- db 255,255,255,0
- db 4,0,255,255,255,255,255,255,255,255,45
-
- db "DREAMWEB.R46",0 ;Dream room
- db 35,255,22,50
- db 255,255,255,0
- db 0,4,255,255,255,255,255,255,255,255,46
-
-
-
- db "DREAMWEB.R50",0 ; Intro sequence one
- db 35,255,22,30
- db 255,255,255,0
- db 0,0,255,255,255,255,255,255,255,255,50
-
- db "DREAMWEB.R51",0 ; Intro sequence two
- db 35,255,11,30
- db 255,255,255,0
- db 0,0,255,255,255,255,255,255,255,255,51
-
- db "DREAMWEB.R52",0 ; Intro sequence three
- db 35,255,22,30
- db 255,255,255,0
- db 0,0,255,255,255,255,255,255,255,255,52
-
- db "DREAMWEB.R53",0 ; Intro sequence four
- db 35,255,33,0
- db 255,255,255,0
- db 0,0,255,255,255,255,255,255,255,255,53
-
- db "DREAMWEB.R54",0 ; Intro sequence five - wasteland
- db 35,255,0,0
- db 255,255,255,0
- db 0,0,255,255,255,255,255,255,255,255,54
-
- db "DREAMWEB.R55",0 ; End sequence
- db 14,255,44,0
- db 255,255,255,0
- db 0,0,255,255,255,255,255,255,255,255,55
-
-
-Madeuproomdat db 32 dup (0)
-
-Roomscango db 1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0
-
-Roompics db 5,0,3,2,4,1,10,9,8,6,11,4,7,7,0
-
-Oplist db 3 dup (0)
-
-Inputline db 128 dup (0)
-
-linedata dw 200 dup (0ffffh)
-
-presslist db 6 dup (255)
-
-savenames db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
-
-
-
-savefiles db "DREAMWEB.D00",0
- db "DREAMWEB.D01",0
- db "DREAMWEB.D02",0
- db "DREAMWEB.D03",0
- db "DREAMWEB.D04",0
- db "DREAMWEB.D05",0
- db "DREAMWEB.D06",0
-
-Recname db "DREAMWEB.DEM",0
-
-
-;-------------------------------------------------------End of code segment----
-
-DREAMWEBPROG ends
-
-
-
-
-;---------------------------------------------------------------Stack space----s
-
-STACKSPACE segment para stack 'STACK'
-
-stak db 256 dup (?)
-
-STACKSPACE ends
-
-
-
-;-----------------------------------------------------------End of all code----
-
- end Dreamweb
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ call allocateload
+ mov reel2,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+ call allocateload
+ mov reel3,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ call allocateload
+ mov reels,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ call allocateload
+ mov people,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ call allocateload
+ mov setdesc,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ call allocateload
+ mov blockdesc,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ call allocateload
+ mov roomdesc,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ call allocateload
+ mov freeframes,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ ;mov ds,freedat
+ ;mov dx,0
+ ;mov cx,freedatlen
+ ;mov al,255
+ ;call fillspace
+ call dontloadseg
+
+ call allocateload
+ mov freedesc,ax
+ mov ds,ax
+ mov dx,freetextdat
+ call loadseg
+
+ call closefile
+
+ call setallchanges
+ ret
+
+ endp
+
+
+
+Sortoutmap proc near
+
+ push es di
+ mov ds,workspace
+ mov si,0
+ mov es,mapdata
+ mov di,0
+
+ mov cx,maplength
+blimey: push cx si
+ mov cx,mapwidth
+ rep movsb
+ pop si cx
+ add si,132
+ loop blimey
+ pop di es
+ ret
+
+ endp
+
+
+
+
+Startloading proc near
+
+ mov combatcount,0
+ mov al,[cs:bx+13]
+ mov roomssample,al
+ mov al,[cs:bx+15]
+ mov mapx,al
+ mov al,[cs:bx+16]
+ mov mapy,al
+
+ mov al,[cs:bx+20] ; start path pos
+ mov liftflag,al
+ mov al,[cs:bx+21] ; start path pos
+ mov manspath,al
+ mov destination,al
+ mov finaldest,al
+ mov al,[cs:bx+22]
+ mov facing,al
+ mov turntoface,al
+ mov al,[cs:bx+23]
+ mov counttoopen,al
+ mov al,[cs:bx+24]
+ mov liftpath,al
+ mov al,[cs:bx+25]
+ mov doorpath,al
+ mov lastweapon,-1
+ mov al,[cs:bx+27]
+ push ax
+
+ mov al,[cs:bx+31]
+ mov ah,reallocation
+ mov reallocation,al
+
+ mov dx,bx
+ call openfile
+ call readheader
+
+ call allocateload
+ mov ds,ax
+ mov backdrop,ax
+ mov dx,flags
+ call loadseg
+
+ mov ds,workspace ;mapdata
+ mov dx,map
+ mov cx,132*66 ;maplen
+ mov al,0
+ call fillspace
+ call loadseg
+ call sortoutmap
+
+ call allocateload
+ mov setframes,ax
+ mov ds,ax
+ mov dx,framedata
+ call loadseg
+
+ mov ds,setdat
+ mov dx,0
+ mov cx,setdatlen
+ mov al,255
+ call fillspace
+ call loadseg
+
+ call allocateload
+ mov reel1,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+ call allocateload
+ mov reel2,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+ call allocateload
+ mov reel3,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ call allocateload
+ mov reels,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ call allocateload
+ mov people,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ call allocateload
+ mov setdesc,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ call allocateload
+ mov blockdesc,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ call allocateload
+ mov roomdesc,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ call allocateload
+ mov freeframes,ax
+ mov ds,ax
+ mov dx,0
+ call loadseg
+
+ mov ds,freedat
+ mov dx,0
+ mov cx,freedatlen
+ mov al,255
+ call fillspace
+ call loadseg
+
+ call allocateload
+ mov freedesc,ax
+ mov ds,ax
+ mov dx,freetextdat
+ call loadseg
+
+ call closefile
+
+
+ call findroominloc
+ call deletetaken
+ call setallchanges
+ call autoappear
+ mov al,newlocation
+ call getroomdata
+ mov lastweapon,-1
+ mov mandead,0
+ mov lookcounter,160
+ mov newlocation,255
+ mov linepointer,254
+ pop ax
+ cmp al,255
+ jz dontwalkin
+ mov manspath,al
+ push bx
+ call autosetwalk
+ pop bx
+dontwalkin: call findxyfrompath
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Disablepath proc near ;needs al,ah map x,y cl=path
+
+ push cx
+ xchg al,ah
+ mov cx,-6
+looky2: add cx,6
+ sub al,10
+ jnc looky2
+ mov al,ah
+ dec cx
+lookx2: inc cx
+ sub al,11
+ jnc lookx2
+ mov al,cl
+ mov ah,0
+ mov cx,144
+ mul cx
+ mov es,reels
+ mov bx,pathdata
+ add bx,ax
+ pop ax
+ mov ah,0
+ add ax,ax
+ add ax,ax
+ add ax,ax
+ add bx,ax
+ mov al,0
+ mov [es:bx+6],al
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Findxyfrompath proc near ;path number was found from
+ ;room data. Fill ryanxy from
+ call getroomspaths ;the pathdata.
+ mov al,manspath
+ mov ah,0
+ add ax,ax
+ add ax,ax
+ add ax,ax
+ add bx,ax
+ mov ax,[es:bx]
+ sub al,12
+ sub ah,12
+ mov ryanx,al
+ mov ryany,ah
+ ret
+
+ endp
+
+
+
+
+
+Findroominloc proc near
+
+ mov al,mapy
+ mov cx,-6
+looky: add cx,6
+ sub al,10
+ jnc looky
+ mov al,mapx
+ dec cx
+lookx: inc cx
+ sub al,11
+ jnc lookx
+ mov roomnum,cl
+ ret
+
+ endp
+
+
+
+
+
+
+Getroomdata proc near
+
+ mov ah,0
+ mov cx,32
+ mul cx
+ mov bx,offset cs:roomdata
+ add bx,ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+Readheader proc near
+
+ push cs
+ pop ds
+ mov dx,offset cs:fileheader
+ mov cx,headerlen
+ call readfromfile
+ push cs
+ pop es
+ mov di,offset cs:filedata
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Dontloadseg proc neqr
+
+ mov ax,[es:di]
+ add di,2
+ push bx di es
+ mov cx,0
+ mov dx,ax
+ mov al,1
+ mov ah,42h
+ int 21h
+ pop es di bx
+ ret
+
+ endp
+
+
+
+
+
+
+Allocateload proc near
+
+ push es di
+ mov bx,[es:di]
+ mov cl,4
+ shr bx,cl
+ call allocatemem
+ pop di es
+ ret
+
+ endp
+
+
+
+
+Fillspace proc near
+
+ push es ds dx di bx
+ mov di,dx
+ push ds
+ pop es
+ rep stosb
+ pop bx di dx ds es
+ ret
+
+ endp
+
+
+
+
+
+
+
+Getridoftemp proc near
+
+ mov es,tempgraphics
+ call deallocatemem
+ ret
+
+ endp
+
+
+
+
+
+Getridoftemptext proc near
+
+ mov es,textfile1
+ call deallocatemem
+ ret
+
+ endp
+
+
+
+
+
+Getridoftemp2 proc near
+
+ mov es,tempgraphics2
+ call deallocatemem
+ ret
+
+ endp
+
+
+
+Getridoftemp3 proc near
+
+ mov es,tempgraphics3
+ call deallocatemem
+ ret
+
+ endp
+
+
+
+Getridoftempcharset proc near
+
+ mov es,tempcharset
+ call deallocatemem
+ ret
+
+ endp
+
+
+
+Getridoftempsp proc near
+
+ mov es,tempsprites
+ call deallocatemem
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Readsetdata proc near
+
+ mov dx,offset cs:characterset1
+ call standardload
+ mov charset1,ax
+
+ mov dx,offset cs:icongraphics0
+ call standardload
+ mov icons1,ax
+
+ mov dx,offset cs:icongraphics1
+ call standardload
+ mov icons2,ax
+
+ mov dx,offset cs:spritename1
+ call standardload
+ mov mainsprites,ax
+
+ mov dx,offset cs:puzzletextname
+ call standardload
+ mov puzzletext,ax
+
+ mov dx,offset cs:commandtextname
+ call standardload
+ mov commandtext,ax
+
+ mov ax,charset1
+ mov currentset,ax
+
+ cmp soundint,255
+ jz novolumeload
+ mov dx,offset cs:volumetabname
+ call openfile
+ mov cx,2048-256
+ mov ds,soundbuffer
+ mov dx,16384
+ call readfromfile
+ call closefile
+novolumeload: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Createfile proc near
+
+ mov ah,3ch
+ mov cx,0
+ int 21h
+ mov bx,ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+Openfile proc near
+
+ if cd
+ call makename
+ endif
+ push cs
+ pop ds
+ mov ah,3dh
+ mov al,2
+ push dx
+ int 21h
+ pop dx
+ jc fileerror
+ mov handle,ax
+ ret
+fileerror: mov gameerror,8
+ jmp quickquit2
+
+ endp
+
+
+ if cd
+Openfilefromc proc near
+
+ push cs
+ pop ds
+ mov ah,3dh
+ mov al,2
+ push dx
+ int 21h
+ pop dx
+ mov handle,ax
+ ret
+
+ endp
+ endif
+
+
+ if cd
+Makename proc near
+
+ if demo
+ ret
+ endif
+ mov si,dx
+ mov di,offset cs:place
+transfer: mov al,[cs:si]
+ mov [cs:di],al
+ inc si
+ inc di
+ cmp al,0
+ jnz transfer
+ mov dx,offset cs:id
+ ret
+id: db "D:\"
+place: db 30 dup (0)
+
+ endp
+ endif
+
+
+
+
+
+Openfilenocheck proc near
+
+ if cd
+ call makename
+ endif
+ push cs
+ pop ds
+ mov ah,3dh
+ mov al,2
+ int 21h
+ mov handle,ax
+ ret
+
+ endp
+
+
+
+Openforsave proc near
+
+ mov cx,0
+ mov ah,3ch
+ mov al,2
+ int 21h
+ mov handle,ax
+ ret
+
+ endp
+
+
+
+Closefile proc near
+
+ mov bx,handle
+ mov ah,3eh
+ int 21h
+ ret
+
+ endp
+
+
+
+
+Readfromfile proc near
+
+ mov bx,handle
+ mov ah,3fh
+ int 21h
+ ret
+
+ endp
+
+
+
+
+Setkeyboardint proc near
+
+ mov ah,35h
+ mov al,9
+ int 21h
+ mov oldint9seg,es ; Save es:bx to temp memory
+ mov oldint9add,bx
+ push cs
+ pop ds
+ mov dx,offset cs:keyboardread
+ mov ah,25h
+ mov al,9
+ int 21h ; Set to new
+ ret
+
+ endp
+
+
+
+
+Resetkeyboard proc near
+
+ cmp oldint9add,-1
+ jz noreset
+ mov dx,oldint9add ;Restore old interupt vector
+ mov ax,oldint9seg ;for keys
+ mov ds,ax
+ mov ah,25h
+ mov al,9
+ int 21h
+noreset: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Keyboardread proc near
+
+ push ax dx di ds es
+ in al,60h
+ cmp al,lasthardkey
+ jz same
+ mov lasthardkey,al
+ cmp al,128
+ jnc same
+ mov dx,bufferin
+ inc dx
+ and dx,15
+ cmp dx,bufferout
+ jz same ;buffer is full
+ mov bufferin,dx
+ call convertkey
+ mov di,offset cs:keybuffer
+ mov dx,bufferin
+ add di,dx
+ mov [cs:di],al
+same: in al,61h
+ mov ah,al
+ or al,80h ; Mask for Akn
+ out 61h,al ; Set Akn.
+ and al,7fh
+ out 61h,al
+ cli
+ mov al,20h ; 8259 end of interrupt
+ out 20h,al
+ pop es ds di dx ax
+ iret
+
+ endp
+
+
+
+;------------------------------------------------------Text and tables data----
+
+
+
+Fileheader db "DREAMWEB DATA FILE "
+ db "COPYRIGHT 1992 "
+ db "CREATIVE REALITY"
+Filedata dw 20 dup (0)
+Extradata db 6 dup (0)
+Headerlen equ $-Fileheader
+
+
+Roomdata db "DREAMWEB.R00",0 ;Ryan's apartment
+ db 5,255,33,10
+ db 255,255,255,0
+ db 1,6,2,255,3,255,255,255,255,255,0
+
+ db "DREAMWEB.R01",0
+ db 1,255,44,10
+ db 255,255,255,0
+ db 7,2,255,255,255,255,6,255,255,255,1
+
+ db "DREAMWEB.R02",0
+ db 2,255,33,0
+ db 255,255,255,0
+ db 1,0,255,255,1,255,3,255,255,255,2
+
+ db "DREAMWEB.R03",0
+ db 5,255,33,10
+ db 255,255,255,0
+ db 2,2,0,2,4,255,0,255,255,255,3
+
+ db "DREAMWEB.R04",0
+ db 23,255,11,30
+ db 255,255,255,0
+ db 1,4,0,5,255,255,3,255,255,255,4
+
+ db "DREAMWEB.R05",0
+ if demo
+ db 22,255,22,30
+ else
+ db 5,255,22,30
+ endif
+ db 255,255,255,0
+ db 1,2,0,4,255,255,3,255,255,255,5
+
+ db "DREAMWEB.R06",0
+ db 5,255,11,30
+ db 255,255,255,0
+ db 1,0,0,1,2,255,0,255,255,255,6
+
+ db "DREAMWEB.R07",0
+ db 255,255,0,20
+ db 255,255,255,0
+ db 2,2,255,255,255,255,0,255,255,255,7
+
+ db "DREAMWEB.R08",0
+ db 8,255,0,10
+ db 255,255,255,0
+ db 1,2,255,255,255,255,0,11,40,0,8
+
+ db "DREAMWEB.R09",0
+ db 9,255,22,10
+ db 255,255,255,0
+ db 4,6,255,255,255,255,0,255,255,255,9
+
+ db "DREAMWEB.R10",0
+ db 10,255,33,30
+ db 255,255,255,0
+ db 2,0,255,255,2,2,4,22,30,255,10 ;22,30,0 switches
+ ;off path 0 in skip
+ db "DREAMWEB.R11",0
+ db 11,255,11,20
+ db 255,255,255,0
+ db 0,4,255,255,255,255,255,255,255,255,11
+
+ db "DREAMWEB.R12",0
+ db 12,255,22,20
+ db 255,255,255,0
+ db 1,4,255,255,255,255,255,255,255,255,12
+
+ db "DREAMWEB.R13",0
+ db 12,255,22,20
+ db 255,255,255,0
+ db 1,4,255,255,255,255,255,255,255,255,13
+
+ db "DREAMWEB.R14",0
+ db 14,255,44,20
+ db 255,255,255,0
+ db 0,6,255,255,255,255,255,255,255,255,14
+
+ db 32 dup (0)
+ db 32 dup (0)
+ db 32 dup (0)
+ db 32 dup (0)
+
+ db "DREAMWEB.R19",0
+ db 19,255,0,0
+ db 255,255,255,0
+ db 0,4,255,255,255,255,255,255,255,255,19
+
+ db "DREAMWEB.R20",0
+ db 22,255,0,20
+ db 255,255,255,0
+ db 1,4,2,15,255,255,255,255,255,255,20
+
+ db "DREAMWEB.R21",0
+ if demo
+ db 22,255,11,10
+ else
+ db 5,255,11,10
+ endif
+ db 255,255,255,0
+ db 1,4,2,15,1,255,255,255,255,255,21
+
+ db "DREAMWEB.R22",0
+ db 22,255,22,10
+ db 255,255,255,0
+ db 0,4,255,255,1,255,255,255,255,255,22
+
+ db "DREAMWEB.R23",0
+ db 23,255,22,30
+ db 255,255,255,0
+ db 1,4,2,15,3,255,255,255,255,255,23
+
+ db "DREAMWEB.R24",0
+ db 5,255,44,0
+ db 255,255,255,0
+ db 1,6,2,15,255,255,255,255,255,255,24
+
+ db "DREAMWEB.R25",0
+ db 22,255,11,40
+ db 255,255,255,0
+ db 1,0,255,255,255,255,255,255,255,255,25
+
+ db "DREAMWEB.R26",0
+ db 9,255,22,20
+ db 255,255,255,0
+ db 4,2,255,255,255,255,255,255,255,255,26
+
+ db "DREAMWEB.R27",0
+ db 22,255,11,20
+ db 255,255,255,0
+ db 0,6,255,255,255,255,255,255,255,255,27
+
+ db "DREAMWEB.R28",0
+ db 5,255,11,30
+ db 255,255,255,0
+ db 0,0,255,255,2,255,255,255,255,255,28
+
+ db "DREAMWEB.R29",0
+ db 22,255,11,10
+ db 255,255,255,0
+ db 0,2,255,255,255,255,255,255,255,255,29
+
+
+
+ db "DREAMWEB.R05",0 ;Duplicate of hotel lobby,
+ if demo
+ db 22,255,22,10 ;but emerging from the lift.
+ else
+ db 5,255,22,10
+ endif
+ db 255,255,255,0
+ db 1,4,1,15,255,255,255,255,255,255,5
+
+ db "DREAMWEB.R04",0 ;Duplicate of pool hall lobby,
+ db 23,255,22,20 ;but emerging from the lift.
+ db 255,255,255,0
+ db 1,4,2,15,255,255,255,255,255,255,4
+
+ db "DREAMWEB.R10",0 ;entering alley via skip
+ db 10,255,22,30
+ db 255,255,255,0
+ db 3,6,255,255,255,255,255,255,255,255,10
+
+ db "DREAMWEB.R12",0 ;on the beach, getting up.
+ db 12,255,22,20
+ db 255,255,255,0
+ db 0,2,255,255,255,255,255,255,255,255,12
+
+ db "DREAMWEB.R03",0 ;Duplicate of Eden's lobby
+ db 5,255,44,0 ;but emerging from the lift
+ db 255,255,255,0
+ db 1,6,2,255,4,255,255,255,255,255,3
+
+ db "DREAMWEB.R24",0 ;Duplicate of Eden's flat
+ db 5,255,22,0 ;but starting on the bed
+ db 255,255,255,0
+ db 3,6,0,255,255,255,255,33,0,3,24 ; 33,0,3 turns off
+ ; path for lift
+ db "DREAMWEB.R22",0 ;Duplicate
+ db 22,255,22,20 ;of hotel but in pool room
+ db 255,255,255,0
+ db 1,4,255,255,255,255,255,255,255,255,22
+
+ db "DREAMWEB.R22",0 ;Duplicate
+ db 22,255,22,20 ;of hotel but in pool room
+ db 255,255,255,0 ;coming out of bedroom
+ db 0,2,255,255,255,255,255,255,255,255,22
+
+ db "DREAMWEB.R11",0 ;Duplicate
+ db 11,255,22,30 ;of carpark but getting
+ db 255,255,255,0 ;up off the floor
+ db 0,0,255,255,255,255,255,255,255,255,11
+
+ db "DREAMWEB.R28",0
+ db 5,255,11,20
+ db 255,255,255,0
+ db 0,6,255,255,2,255,255,255,255,255,28
+
+ db "DREAMWEB.R21",0
+ if demo
+ db 22,255,11,10
+ else
+ db 5,255,11,10
+ endif
+ db 255,255,255,0
+ db 1,4,2,15,1,255,255,255,255,255,21
+
+ db "DREAMWEB.R26",0
+ db 9,255,0,40
+ db 255,255,255,0
+ db 0,0,255,255,255,255,255,255,255,255,26
+
+ db "DREAMWEB.R19",0
+ db 19,255,0,0
+ db 255,255,255,0
+ db 2,2,255,255,255,255,255,255,255,255,19
+
+ db "DREAMWEB.R08",0 ;leaving tvstudio into street
+ db 8,255,11,40
+ db 255,255,255,0
+ db 0,4,255,255,255,255,255,255,255,255,8
+
+ db "DREAMWEB.R01",0
+ db 1,255,44,10
+ db 255,255,255,0
+ db 3,6,255,255,255,255,255,255,255,255,1
+
+
+
+ db "DREAMWEB.R45",0 ;Dream room
+ db 35,255,22,30
+ db 255,255,255,0
+ db 0,6,255,255,255,255,255,255,255,255,45
+
+ db "DREAMWEB.R46",0 ;Dream room
+ db 35,255,22,40
+ db 255,255,255,0
+ db 0,4,255,255,255,255,255,255,255,255,46
+
+ db "DREAMWEB.R47",0 ;Dream room
+ db 35,255,0,0
+ db 255,255,255,0
+ db 0,0,255,255,255,255,255,255,255,255,47
+
+ db "DREAMWEB.R45",0 ;Dream room
+ db 35,255,22,30
+ db 255,255,255,0
+ db 4,0,255,255,255,255,255,255,255,255,45
+
+ db "DREAMWEB.R46",0 ;Dream room
+ db 35,255,22,50
+ db 255,255,255,0
+ db 0,4,255,255,255,255,255,255,255,255,46
+
+
+
+ db "DREAMWEB.R50",0 ; Intro sequence one
+ db 35,255,22,30
+ db 255,255,255,0
+ db 0,0,255,255,255,255,255,255,255,255,50
+
+ db "DREAMWEB.R51",0 ; Intro sequence two
+ db 35,255,11,30
+ db 255,255,255,0
+ db 0,0,255,255,255,255,255,255,255,255,51
+
+ db "DREAMWEB.R52",0 ; Intro sequence three
+ db 35,255,22,30
+ db 255,255,255,0
+ db 0,0,255,255,255,255,255,255,255,255,52
+
+ db "DREAMWEB.R53",0 ; Intro sequence four
+ db 35,255,33,0
+ db 255,255,255,0
+ db 0,0,255,255,255,255,255,255,255,255,53
+
+ db "DREAMWEB.R54",0 ; Intro sequence five - wasteland
+ db 35,255,0,0
+ db 255,255,255,0
+ db 0,0,255,255,255,255,255,255,255,255,54
+
+ db "DREAMWEB.R55",0 ; End sequence
+ db 14,255,44,0
+ db 255,255,255,0
+ db 0,0,255,255,255,255,255,255,255,255,55
+
+
+Madeuproomdat db 32 dup (0)
+
+Roomscango db 1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0
+
+Roompics db 5,0,3,2,4,1,10,9,8,6,11,4,7,7,0
+
+Oplist db 3 dup (0)
+
+Inputline db 128 dup (0)
+
+linedata dw 200 dup (0ffffh)
+
+presslist db 6 dup (255)
+
+savenames db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+
+
+
+savefiles db "DREAMWEB.D00",0
+ db "DREAMWEB.D01",0
+ db "DREAMWEB.D02",0
+ db "DREAMWEB.D03",0
+ db "DREAMWEB.D04",0
+ db "DREAMWEB.D05",0
+ db "DREAMWEB.D06",0
+
+Recname db "DREAMWEB.DEM",0
+
+
+;-------------------------------------------------------End of code segment----
+
+DREAMWEBPROG ends
+
+
+
+
+;---------------------------------------------------------------Stack space----s
+
+STACKSPACE segment para stack 'STACK'
+
+stak db 256 dup (?)
+
+STACKSPACE ends
+
+
+
+;-----------------------------------------------------------End of all code----
+
+ end Dreamweb
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 \ No newline at end of file