aboutsummaryrefslogtreecommitdiff
path: root/devtools/tasmrecover/dreamweb
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
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')
-rw-r--r--devtools/tasmrecover/dreamweb/backdrop.asm1746
-rw-r--r--devtools/tasmrecover/dreamweb/debug.asm756
-rw-r--r--devtools/tasmrecover/dreamweb/dreamweb.asm12506
-rw-r--r--devtools/tasmrecover/dreamweb/keypad.asm3508
-rw-r--r--devtools/tasmrecover/dreamweb/look.asm326
-rw-r--r--devtools/tasmrecover/dreamweb/monitor.asm2984
-rw-r--r--devtools/tasmrecover/dreamweb/newplace.asm1154
-rw-r--r--devtools/tasmrecover/dreamweb/object.asm5208
-rw-r--r--devtools/tasmrecover/dreamweb/print.asm1174
-rw-r--r--devtools/tasmrecover/dreamweb/saveload.asm2964
-rw-r--r--devtools/tasmrecover/dreamweb/sblaster.asm2578
-rw-r--r--devtools/tasmrecover/dreamweb/sprite.asm10060
-rw-r--r--devtools/tasmrecover/dreamweb/talk.asm1128
-rw-r--r--devtools/tasmrecover/dreamweb/titles.asm1148
-rw-r--r--devtools/tasmrecover/dreamweb/use.asm7612
-rw-r--r--devtools/tasmrecover/dreamweb/vars.asm1120
-rw-r--r--devtools/tasmrecover/dreamweb/vgafades.asm1726
-rw-r--r--devtools/tasmrecover/dreamweb/vgagrafx.asm3516
18 files changed, 30607 insertions, 30607 deletions
diff --git a/devtools/tasmrecover/dreamweb/backdrop.asm b/devtools/tasmrecover/dreamweb/backdrop.asm
index 189199db91..c02d95bbe9 100644
--- a/devtools/tasmrecover/dreamweb/backdrop.asm
+++ b/devtools/tasmrecover/dreamweb/backdrop.asm
@@ -1,877 +1,877 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-;----------------------------------------------Code to draw floor and panel----
-
-Blockget proc near
-
- mov ah,al
- mov al,0
- mov ds,backdrop
- mov si,blocks
- add si,ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;--------------------------------------------------------Background display----
-
-
-
-
-
-
-
-
-Drawfloor proc near
-
- push es bx ;in case this was called during
- call eraseoldobs ;some sprite update.
- call drawflags
- call calcmapad
- call doblocks
- call showallobs
- call showallfree
- call showallex
- call paneltomap
- call initrain
- mov newobs,0
- pop bx es
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Calcmapad proc near
-
- call getdimension
-
- push cx dx
-
- mov al,11
- sub al,dl
- sub al,cl
- sub al,cl
- cbw
- mov bx,8
- mul bx
- add ax,mapoffsetx
- mov mapadx,ax
- pop dx cx
-
- mov al,10
- sub al,dh
- sub al,ch
- sub al,ch
- cbw
- mov bx,8
- mul bx
- add ax,mapoffsety
- mov mapady,ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Getdimension proc near ;Routine finds width, length
- ;and top corner of room
-
- mov es,buffers
- mov bx,mapflags
- mov ch,0
-dimloop1: call addalong
- cmp al,0
- jnz finishdim1
- inc ch
- jmp dimloop1 ;ch holds y of top corner
-
-finishdim1: mov bx,mapflags
- mov cl,0
-dimloop2: push bx
- call addlength
- pop bx
- cmp al,0
- jnz finishdim2
- inc cl
- add bx,3
- jmp dimloop2 ;cl holds x of top corner
-
-finishdim2: mov bx,mapflags+(11*3*9)
- mov dh,10
-dimloop3: push bx
- call addalong
- pop bx
- cmp al,0
- jnz finishdim3
- dec dh
- sub bx,11*3
- jmp dimloop3 ;dh holds y of bottom corner
-
-finishdim3: mov bx,mapflags+(3*10)
- mov dl,11
-dimloop4: push bx
- call addlength
- pop bx
- cmp al,0
- jnz finishdim4
- dec dl
- sub bx,3
- jmp dimloop4 ;dl holds x of bottom corner
-
-finishdim4: mov al,cl ;cl holds x start
- mov ah,0
- shl ax,1
- shl ax,1
- shl ax,1
- shl ax,1
- mov mapxstart,ax
- mov al,ch ;ch holds y start
- mov ah,0
- shl ax,1
- shl ax,1
- shl ax,1
- shl ax,1
- mov mapystart,ax
-
- sub dl,cl
- sub dh,ch
- ;dx holds x and y size of room
- mov al,dl ;dl holds x size
- mov ah,0
- shl ax,1
- shl ax,1
- shl ax,1
- shl ax,1
- mov mapxsize,al
- mov al,dh ;dh holds y size
- mov ah,0
- shl ax,1
- shl ax,1
- shl ax,1
- shl ax,1
- mov mapysize,al ;cx still holds top left corner
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-Addalong proc near
-
- mov ah,11
-addloop: cmp byte ptr [es:bx],0
- jnz gotalong
- add bx,3
- dec ah
- jnz addloop
- mov al,0
- ret
-gotalong: mov al,1
- ret
-
- endp
-
-
-
-
-
-Addlength proc near
-
- mov ah,10
-addloop2: cmp byte ptr [es:bx],0
- jnz gotlength
- add bx,3*11
- dec ah
- jnz addloop2
- mov al,0
- ret
-gotlength: mov al,1
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Drawflags proc near
-
- mov es,buffers
- mov di,mapflags
- mov al,mapy
- mov ah,0
- mov cx,mapwidth
- mul cx
- mov bl,mapx
- mov bh,0
- add ax,bx
- mov si,map
- add si,ax
-
- mov cx,10
-$28: push cx
- mov cx,11
-$28a: mov ds,mapdata
- lodsb
- mov ds,backdrop
- push si ax
- mov ah,0
- add ax,ax
- mov si,flags
- add si,ax
- movsw
- pop ax
- stosb
- pop si
- loop $28a
- add si,mapwidth-11
- pop cx
- loop $28
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;-------------------------------------------------------Set object printing----
-
-Eraseoldobs proc near
-
- cmp newobs,0
- jz donterase
-
- mov es,buffers
- mov bx,spritetable
-
- mov cx,16
-oberase: push cx bx
- mov ax,[es:bx+20]
- cmp ax,0ffffh
- jz notthisob
- mov di,bx
- mov al,255
- mov cx,tablesize
- rep stosb
-notthisob: pop bx cx
- add bx,tablesize
- loop oberase
-
-donterase: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Showallobs proc near
-
- mov es,buffers
- mov bx,setlist
- mov listpos,bx
- mov di,bx
- mov cx,128*5
- mov al,255
- rep stosb
-
- mov es,setframes
- mov frsegment,es
- mov ax,framedata
- mov dataad,ax
- mov ax,frames
- mov framesad,ax
- mov currentob,0
-
- mov ds,setdat
- mov si,0
-
- mov cx,128
-showobsloop: push cx si
-
- push si
- add si,58
- mov es,setdat
- call getmapad
- pop si
- cmp ch,0
- jz blankframe
-
- mov al,[es:si+18]
- mov ah,0
- mov currentframe,ax
- cmp al,255
- jz blankframe
-
- push es si
- call calcfrframe
- call finalframe
- pop si es
-
- mov al,[es:si+18]
- mov [es:si+17],al
- cmp byte ptr [es:si+8],0
- jnz animating
- cmp byte ptr [es:si+5],5
- jz animating
- cmp byte ptr [es:si+5],6
- jz animating
- mov ax,currentframe
- mov ah,0
- add di,mapadx
- add bx,mapady
- call showframe
- jmp drawnsetob
-
-animating: call makebackob
-
-drawnsetob: mov si,listpos
- mov es,buffers
- mov al,savex
- mov ah,savey
- mov [es:si],ax
- mov cx,ax
- mov ax,savesize
- add al,cl
- add ah,ch
- mov [es:si+2],ax
- mov al,currentob
- mov [es:si+4],al
- add si,5
- mov listpos,si
-
-blankframe: inc currentob
- pop si cx
- add si,64
- dec cx
- jz finishedsetobs
- jmp showobsloop
-
-finishedsetobs: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Makebackob proc near
-
- cmp newobs,0
- jz nomake
-
- mov al,[es:si+5] ; priority
- mov ah,[es:si+8] ; type - steady, constant,random,door etc.
- push si ax si
- mov ax,objectx
- mov bx,objecty
- mov ah,bl
- mov si,ax
- mov cx,offset cs:backobject
- mov dx,setframes
- mov di,framedata
- call makesprite
- pop ax
- mov [es:bx+20],ax
- pop ax
- cmp al,255
- jnz usedpriority ; forgotten to specify priority
- mov al,0
-usedpriority: mov [es:bx+23],al
- mov [es:bx+30],ah
- mov byte ptr [es:bx+16],0
- mov byte ptr [es:bx+18],0
- mov byte ptr [es:bx+19],0
- pop si
-nomake: ret
-
- endp
-
-
-
-
-;------------------------------------------------------Free object printing----
-
-Showallfree proc near
-
- mov es,buffers
- mov bx,freelist
- mov listpos,bx
- mov di,freelist
- mov cx,80*5
- mov al,255
- rep stosb
-
- mov es,freeframes
- mov frsegment,es
- mov ax,frframedata
- mov dataad,ax
- mov ax,frframes
- mov framesad,ax
- mov al,0
- mov currentfree,al
-
- mov ds,freedat
- mov si,2
-
- mov cx,0
-loop127: push cx si
-
- push si
- mov es,freedat
- call getmapad
- pop si
- cmp ch,0
- jz over138
-
- mov al,currentfree
- mov ah,0
- mov dx,ax
- add ax,ax
- add ax,dx
- mov currentframe,ax
-
- push es si
- call calcfrframe
- mov es,mapstore
- mov ds,frsegment
- call finalframe
- pop si es
- cmp cx,0
- jz over138
-
- mov ax,currentframe
- mov ah,0
- add di,mapadx
- add bx,mapady
- call showframe
- mov si,listpos
- mov es,buffers
- mov al,savex
- mov ah,savey
- mov [es:si],ax
- mov cx,ax
- mov ax,savesize
- add al,cl
- add ah,ch
- mov [es:si+2],ax
- pop ax cx
- push cx ax
- mov [es:si+4],cl
- add si,5
- mov listpos,si
-
-over138: inc currentfree
- pop si cx
- add si,16
- inc cx
- cmp cx,80
- jz finfree
- jmp loop127
-
-finfree: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-Showallex proc near
-
- mov es,buffers
- mov bx,exlist
- mov listpos,bx
- mov di,exlist
- mov cx,100*5
- mov al,255
- rep stosb
-
- mov es,extras
- mov frsegment,es
- mov ax,exframedata
- mov dataad,ax
- mov ax,exframes
- mov framesad,ax
- mov currentex,0
-
- mov si,exdata+2
-
- mov cx,0
-exloop: push cx si
-
- mov es,extras
-
- push si
- mov ch,0
- cmp byte ptr [es:si],255
- jz notinroom
- mov al,[es:si-2]
- cmp al,reallocation
- jnz notinroom
- call getmapad
-notinroom: pop si
- cmp ch,0
- jz blankex
-
- mov al,currentex
- mov ah,0
- mov dx,ax
- add ax,ax
- add ax,dx
- mov currentframe,ax
-
- push es si
- call calcfrframe
- mov es,mapstore
- mov ds,frsegment
- call finalframe
- pop si es
- cmp cx,0
- jz blankex
-
- mov ax,currentframe
- mov ah,0
- add di,mapadx
- add bx,mapady
- call showframe
- mov si,listpos
- mov es,buffers
- mov al,savex
- mov ah,savey
- mov [es:si],ax
- mov cx,ax
- mov ax,savesize
- add al,cl
- add ah,ch
- mov [es:si+2],ax
- pop ax cx
- push cx ax
- mov [es:si+4],cl
- add si,5
- mov listpos,si
-
-blankex: inc currentex
- pop si cx
- add si,16
- inc cx
- cmp cx,100
- jz finex
- jmp exloop
-
-finex: ret
-
- endp
-
-
-
-
-
-
-
-Calcfrframe proc near
-
- mov dx,frsegment
- mov ax,framesad
- push ax
- mov cx,dataad
- mov ax,currentframe
- mov ds,dx
- mov bx,6
- mul bx
- add ax,cx
- mov bx,ax
- mov cx,[bx]
- mov ax,[bx+2]
- mov dx,[bx+4]
- pop bx
- push dx
- add ax,bx ;ax=source add, cx=x,y
- ;need this later
- mov savesource,ax
- mov savesize,cx
- pop ax
- push ax
- mov ah,0
- mov offsetx,ax
- pop ax
- mov al,ah
- mov ah,0
- mov offsety,ax
- ret
-nullframe: pop ax
- mov cx,0
- mov savesize,cx
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Finalframe proc near
-
- mov ax,objecty
- add ax,offsety
- mov bx,objectx
- add bx,offsetx
- mov savex,bl
- mov savey,al
- mov di,objectx
- mov bx,objecty
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-Adjustlen proc near
-
- mov ah,al
- add al,ch
- cmp al,100
- jc over242
- mov al,224
- sub al,ch
- mov ch,al
-over242: ret
-
- endp
-
-
-
-
-
-
-
-
-
-Getmapad proc near
-
- call getxad
- cmp ch,0
- jz over146
- mov objectx,ax
- call getyad
- cmp ch,0
- jz over146
- mov objecty,ax
- mov ch,1
-over146: ret
-
- endp
-
-
-
-
-
-
-
-
-
-Getxad proc near
-
- mov cl,[es:si]
- inc si
- mov al,[es:si]
- inc si
- mov ah,[es:si]
- inc si
- cmp cl,0
- jnz over148
- sub al,mapx
- jc over148
- cmp al,11
- jnc over148
- mov cl,4
- shl al,cl
- or al,ah
- mov ah,0
- mov ch,1
- ret
-over148: mov ch,0
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Getyad proc near
-
- mov al,[es:si]
- inc si
- mov ah,[es:si]
- inc si
- sub al,mapy
- jc over147
- cmp al,10
- jnc over147
- mov cl,4
- shl al,cl
- or al,ah
- mov ah,0
- mov ch,1
- ret
-
-over147: mov ch,0
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+;----------------------------------------------Code to draw floor and panel----
+
+Blockget proc near
+
+ mov ah,al
+ mov al,0
+ mov ds,backdrop
+ mov si,blocks
+ add si,ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+;--------------------------------------------------------Background display----
+
+
+
+
+
+
+
+
+Drawfloor proc near
+
+ push es bx ;in case this was called during
+ call eraseoldobs ;some sprite update.
+ call drawflags
+ call calcmapad
+ call doblocks
+ call showallobs
+ call showallfree
+ call showallex
+ call paneltomap
+ call initrain
+ mov newobs,0
+ pop bx es
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Calcmapad proc near
+
+ call getdimension
+
+ push cx dx
+
+ mov al,11
+ sub al,dl
+ sub al,cl
+ sub al,cl
+ cbw
+ mov bx,8
+ mul bx
+ add ax,mapoffsetx
+ mov mapadx,ax
+ pop dx cx
+
+ mov al,10
+ sub al,dh
+ sub al,ch
+ sub al,ch
+ cbw
+ mov bx,8
+ mul bx
+ add ax,mapoffsety
+ mov mapady,ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Getdimension proc near ;Routine finds width, length
+ ;and top corner of room
+
+ mov es,buffers
+ mov bx,mapflags
+ mov ch,0
+dimloop1: call addalong
+ cmp al,0
+ jnz finishdim1
+ inc ch
+ jmp dimloop1 ;ch holds y of top corner
+
+finishdim1: mov bx,mapflags
+ mov cl,0
+dimloop2: push bx
+ call addlength
+ pop bx
+ cmp al,0
+ jnz finishdim2
+ inc cl
+ add bx,3
+ jmp dimloop2 ;cl holds x of top corner
+
+finishdim2: mov bx,mapflags+(11*3*9)
+ mov dh,10
+dimloop3: push bx
+ call addalong
+ pop bx
+ cmp al,0
+ jnz finishdim3
+ dec dh
+ sub bx,11*3
+ jmp dimloop3 ;dh holds y of bottom corner
+
+finishdim3: mov bx,mapflags+(3*10)
+ mov dl,11
+dimloop4: push bx
+ call addlength
+ pop bx
+ cmp al,0
+ jnz finishdim4
+ dec dl
+ sub bx,3
+ jmp dimloop4 ;dl holds x of bottom corner
+
+finishdim4: mov al,cl ;cl holds x start
+ mov ah,0
+ shl ax,1
+ shl ax,1
+ shl ax,1
+ shl ax,1
+ mov mapxstart,ax
+ mov al,ch ;ch holds y start
+ mov ah,0
+ shl ax,1
+ shl ax,1
+ shl ax,1
+ shl ax,1
+ mov mapystart,ax
+
+ sub dl,cl
+ sub dh,ch
+ ;dx holds x and y size of room
+ mov al,dl ;dl holds x size
+ mov ah,0
+ shl ax,1
+ shl ax,1
+ shl ax,1
+ shl ax,1
+ mov mapxsize,al
+ mov al,dh ;dh holds y size
+ mov ah,0
+ shl ax,1
+ shl ax,1
+ shl ax,1
+ shl ax,1
+ mov mapysize,al ;cx still holds top left corner
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+Addalong proc near
+
+ mov ah,11
+addloop: cmp byte ptr [es:bx],0
+ jnz gotalong
+ add bx,3
+ dec ah
+ jnz addloop
+ mov al,0
+ ret
+gotalong: mov al,1
+ ret
+
+ endp
+
+
+
+
+
+Addlength proc near
+
+ mov ah,10
+addloop2: cmp byte ptr [es:bx],0
+ jnz gotlength
+ add bx,3*11
+ dec ah
+ jnz addloop2
+ mov al,0
+ ret
+gotlength: mov al,1
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Drawflags proc near
+
+ mov es,buffers
+ mov di,mapflags
+ mov al,mapy
+ mov ah,0
+ mov cx,mapwidth
+ mul cx
+ mov bl,mapx
+ mov bh,0
+ add ax,bx
+ mov si,map
+ add si,ax
+
+ mov cx,10
+$28: push cx
+ mov cx,11
+$28a: mov ds,mapdata
+ lodsb
+ mov ds,backdrop
+ push si ax
+ mov ah,0
+ add ax,ax
+ mov si,flags
+ add si,ax
+ movsw
+ pop ax
+ stosb
+ pop si
+ loop $28a
+ add si,mapwidth-11
+ pop cx
+ loop $28
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+;-------------------------------------------------------Set object printing----
+
+Eraseoldobs proc near
+
+ cmp newobs,0
+ jz donterase
+
+ mov es,buffers
+ mov bx,spritetable
+
+ mov cx,16
+oberase: push cx bx
+ mov ax,[es:bx+20]
+ cmp ax,0ffffh
+ jz notthisob
+ mov di,bx
+ mov al,255
+ mov cx,tablesize
+ rep stosb
+notthisob: pop bx cx
+ add bx,tablesize
+ loop oberase
+
+donterase: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Showallobs proc near
+
+ mov es,buffers
+ mov bx,setlist
+ mov listpos,bx
+ mov di,bx
+ mov cx,128*5
+ mov al,255
+ rep stosb
+
+ mov es,setframes
+ mov frsegment,es
+ mov ax,framedata
+ mov dataad,ax
+ mov ax,frames
+ mov framesad,ax
+ mov currentob,0
+
+ mov ds,setdat
+ mov si,0
+
+ mov cx,128
+showobsloop: push cx si
+
+ push si
+ add si,58
+ mov es,setdat
+ call getmapad
+ pop si
+ cmp ch,0
+ jz blankframe
+
+ mov al,[es:si+18]
+ mov ah,0
+ mov currentframe,ax
+ cmp al,255
+ jz blankframe
+
+ push es si
+ call calcfrframe
+ call finalframe
+ pop si es
+
+ mov al,[es:si+18]
+ mov [es:si+17],al
+ cmp byte ptr [es:si+8],0
+ jnz animating
+ cmp byte ptr [es:si+5],5
+ jz animating
+ cmp byte ptr [es:si+5],6
+ jz animating
+ mov ax,currentframe
+ mov ah,0
+ add di,mapadx
+ add bx,mapady
+ call showframe
+ jmp drawnsetob
+
+animating: call makebackob
+
+drawnsetob: mov si,listpos
+ mov es,buffers
+ mov al,savex
+ mov ah,savey
+ mov [es:si],ax
+ mov cx,ax
+ mov ax,savesize
+ add al,cl
+ add ah,ch
+ mov [es:si+2],ax
+ mov al,currentob
+ mov [es:si+4],al
+ add si,5
+ mov listpos,si
+
+blankframe: inc currentob
+ pop si cx
+ add si,64
+ dec cx
+ jz finishedsetobs
+ jmp showobsloop
+
+finishedsetobs: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Makebackob proc near
+
+ cmp newobs,0
+ jz nomake
+
+ mov al,[es:si+5] ; priority
+ mov ah,[es:si+8] ; type - steady, constant,random,door etc.
+ push si ax si
+ mov ax,objectx
+ mov bx,objecty
+ mov ah,bl
+ mov si,ax
+ mov cx,offset cs:backobject
+ mov dx,setframes
+ mov di,framedata
+ call makesprite
+ pop ax
+ mov [es:bx+20],ax
+ pop ax
+ cmp al,255
+ jnz usedpriority ; forgotten to specify priority
+ mov al,0
+usedpriority: mov [es:bx+23],al
+ mov [es:bx+30],ah
+ mov byte ptr [es:bx+16],0
+ mov byte ptr [es:bx+18],0
+ mov byte ptr [es:bx+19],0
+ pop si
+nomake: ret
+
+ endp
+
+
+
+
+;------------------------------------------------------Free object printing----
+
+Showallfree proc near
+
+ mov es,buffers
+ mov bx,freelist
+ mov listpos,bx
+ mov di,freelist
+ mov cx,80*5
+ mov al,255
+ rep stosb
+
+ mov es,freeframes
+ mov frsegment,es
+ mov ax,frframedata
+ mov dataad,ax
+ mov ax,frframes
+ mov framesad,ax
+ mov al,0
+ mov currentfree,al
+
+ mov ds,freedat
+ mov si,2
+
+ mov cx,0
+loop127: push cx si
+
+ push si
+ mov es,freedat
+ call getmapad
+ pop si
+ cmp ch,0
+ jz over138
+
+ mov al,currentfree
+ mov ah,0
+ mov dx,ax
+ add ax,ax
+ add ax,dx
+ mov currentframe,ax
+
+ push es si
+ call calcfrframe
+ mov es,mapstore
+ mov ds,frsegment
+ call finalframe
+ pop si es
+ cmp cx,0
+ jz over138
+
+ mov ax,currentframe
+ mov ah,0
+ add di,mapadx
+ add bx,mapady
+ call showframe
+ mov si,listpos
+ mov es,buffers
+ mov al,savex
+ mov ah,savey
+ mov [es:si],ax
+ mov cx,ax
+ mov ax,savesize
+ add al,cl
+ add ah,ch
+ mov [es:si+2],ax
+ pop ax cx
+ push cx ax
+ mov [es:si+4],cl
+ add si,5
+ mov listpos,si
+
+over138: inc currentfree
+ pop si cx
+ add si,16
+ inc cx
+ cmp cx,80
+ jz finfree
+ jmp loop127
+
+finfree: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+Showallex proc near
+
+ mov es,buffers
+ mov bx,exlist
+ mov listpos,bx
+ mov di,exlist
+ mov cx,100*5
+ mov al,255
+ rep stosb
+
+ mov es,extras
+ mov frsegment,es
+ mov ax,exframedata
+ mov dataad,ax
+ mov ax,exframes
+ mov framesad,ax
+ mov currentex,0
+
+ mov si,exdata+2
+
+ mov cx,0
+exloop: push cx si
+
+ mov es,extras
+
+ push si
+ mov ch,0
+ cmp byte ptr [es:si],255
+ jz notinroom
+ mov al,[es:si-2]
+ cmp al,reallocation
+ jnz notinroom
+ call getmapad
+notinroom: pop si
+ cmp ch,0
+ jz blankex
+
+ mov al,currentex
+ mov ah,0
+ mov dx,ax
+ add ax,ax
+ add ax,dx
+ mov currentframe,ax
+
+ push es si
+ call calcfrframe
+ mov es,mapstore
+ mov ds,frsegment
+ call finalframe
+ pop si es
+ cmp cx,0
+ jz blankex
+
+ mov ax,currentframe
+ mov ah,0
+ add di,mapadx
+ add bx,mapady
+ call showframe
+ mov si,listpos
+ mov es,buffers
+ mov al,savex
+ mov ah,savey
+ mov [es:si],ax
+ mov cx,ax
+ mov ax,savesize
+ add al,cl
+ add ah,ch
+ mov [es:si+2],ax
+ pop ax cx
+ push cx ax
+ mov [es:si+4],cl
+ add si,5
+ mov listpos,si
+
+blankex: inc currentex
+ pop si cx
+ add si,16
+ inc cx
+ cmp cx,100
+ jz finex
+ jmp exloop
+
+finex: ret
+
+ endp
+
+
+
+
+
+
+
+Calcfrframe proc near
+
+ mov dx,frsegment
+ mov ax,framesad
+ push ax
+ mov cx,dataad
+ mov ax,currentframe
+ mov ds,dx
+ mov bx,6
+ mul bx
+ add ax,cx
+ mov bx,ax
+ mov cx,[bx]
+ mov ax,[bx+2]
+ mov dx,[bx+4]
+ pop bx
+ push dx
+ add ax,bx ;ax=source add, cx=x,y
+ ;need this later
+ mov savesource,ax
+ mov savesize,cx
+ pop ax
+ push ax
+ mov ah,0
+ mov offsetx,ax
+ pop ax
+ mov al,ah
+ mov ah,0
+ mov offsety,ax
+ ret
+nullframe: pop ax
+ mov cx,0
+ mov savesize,cx
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Finalframe proc near
+
+ mov ax,objecty
+ add ax,offsety
+ mov bx,objectx
+ add bx,offsetx
+ mov savex,bl
+ mov savey,al
+ mov di,objectx
+ mov bx,objecty
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+Adjustlen proc near
+
+ mov ah,al
+ add al,ch
+ cmp al,100
+ jc over242
+ mov al,224
+ sub al,ch
+ mov ch,al
+over242: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Getmapad proc near
+
+ call getxad
+ cmp ch,0
+ jz over146
+ mov objectx,ax
+ call getyad
+ cmp ch,0
+ jz over146
+ mov objecty,ax
+ mov ch,1
+over146: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Getxad proc near
+
+ mov cl,[es:si]
+ inc si
+ mov al,[es:si]
+ inc si
+ mov ah,[es:si]
+ inc si
+ cmp cl,0
+ jnz over148
+ sub al,mapx
+ jc over148
+ cmp al,11
+ jnc over148
+ mov cl,4
+ shl al,cl
+ or al,ah
+ mov ah,0
+ mov ch,1
+ ret
+over148: mov ch,0
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Getyad proc near
+
+ mov al,[es:si]
+ inc si
+ mov ah,[es:si]
+ inc si
+ sub al,mapy
+ jc over147
+ cmp al,10
+ jnc over147
+ mov cl,4
+ shl al,cl
+ or al,ah
+ mov ah,0
+ mov ch,1
+ ret
+
+over147: mov ch,0
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/debug.asm b/devtools/tasmrecover/dreamweb/debug.asm
index 3c24913b2e..991e240fd1 100644
--- a/devtools/tasmrecover/dreamweb/debug.asm
+++ b/devtools/tasmrecover/dreamweb/debug.asm
@@ -1,382 +1,382 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-
- if debuglevel2
-
-
-Debugkeys proc near
-
- ret
-
- endp
-
-
-
-Debugstart proc near
-
- call allpalette
- mov reeltohold,-1
- mov newlocation,23
- mov dreamnumber,0
- mov al,"W"
- mov ah,"S"
- mov cl,"H"
- mov ch,"D"
- call findexobject
- mov byte ptr [es:bx+12],"S"-"A"
- mov byte ptr [es:bx+13],"C"-"A"
- mov byte ptr [es:bx+14],"R"-"A"
- mov byte ptr [es:bx+15],"W"-"A"
- mov al,"W"
- mov ah,"E"
- mov cl,"T"
- mov ch,"A"
- call findexobject
- mov byte ptr [es:bx+12],"G"-"A"
- mov byte ptr [es:bx+13],"U"-"A"
- mov byte ptr [es:bx+14],"N"-"A"
- mov byte ptr [es:bx+15],"A"-"A"
- mov al,"W"
- mov ah,"E"
- mov cl,"T"
- mov ch,"B"
- call findexobject
- mov byte ptr [es:bx+12],"S"-"A"
- mov byte ptr [es:bx+13],"H"-"A"
- mov byte ptr [es:bx+14],"L"-"A"
- mov byte ptr [es:bx+15],"D"-"A"
- mov card1money,12342
-
- ret
-
- endp
-
-
-
-
-
-Debuggreen proc near
-
- push ax dx
- mov al,0
- mov dx,3c8h
- out dx,al
- mov dx,3c9h
- mov al,0
- out dx,al
- mov al,63
- out dx,al
- mov al,0
- out dx,al
- pop dx ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-Debugred proc near
-
- push ax dx
- mov al,0
- mov dx,3c8h
- out dx,al
- mov dx,3c9h
- mov al,63
- out dx,al
- mov al,0
- out dx,al
- mov al,0
- out dx,al
- pop dx ax
- ret
-
- endp
-
-
-
-
-Debugblue proc near
-
- push ax dx
- mov al,0
- mov dx,3c8h
- out dx,al
- mov dx,3c9h
- mov al,0
- out dx,al
- mov al,0
- out dx,al
- mov al,63
- out dx,al
- pop dx ax
- ret
-
- endp
-
-
-
-
-
-Debugblack proc near
-
- push dx ax
- mov al,0
- mov dx,3c8h
- out dx,al
- mov dx,3c9h
- mov al,0
- out dx,al
- mov al,0
- out dx,al
- mov al,0
- out dx,al
- pop ax dx
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Debug proc near
-
- push ds dx cx
- mov ah,3ch
- mov cx,0
- mov dx,seg filenamed
- mov ds,dx
- mov dx,offset filenamed
- int 21h
- mov bx,ax
- pop cx dx ds
- push bx
- mov ah,40h
- int 21h
- pop bx
- mov ah,3eh
- int 21h
- ret
-
-filenamed db "DREAMWEB.TXT",0
-
- endp
-
-
-
-
-
-
-
-
-Shout proc near
-
- push ax bx cx dx si di es ds
- call debugblue
- mov cx,50
- call hangon
- call debugblack
- mov cx,10
- call hangon
- pop ds es di si dx cx bx ax
- ret
-
- endp
-
-
-Shoutred proc near
-
- push ax bx cx dx si di es ds
- call debugred
- mov cx,4
- call hangon
- call debugblack
- mov cx,40
- call hangon
- pop ds es di si dx cx bx ax
- ret
-
- endp
-
-
-
-Shoutgreen proc near
-
- push ax bx cx dx si di es ds
- call debuggreen
- mov cx,4
- call hangon
- call debugblack
- mov cx,40
- call hangon
- pop ds es di si dx cx bx ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-;Checkmemingame proc near
-
-; cmp charset1,0
-; jz nodebug
-; mov bx,60000
-; mov ah,48h
-; int 21h
-; mov ax,bx
-; mov cl,6
-; shr ax,cl
-; mov di,offset cs:debugtextig
-; call showword
-
-; mov ax,soundbufferwrite
-; ;mov ax,exframepos
-; mov di,offset cs:debugtextex
-; call showword
-
-; ;mov ax,extextpos
-; ;mov di,offset cs:debugtextex2
-; ;call showword
-
-; push cs
-; pop es
-; mov si,offset cs:debugtextig
-; mov al,0
-; mov ah,0
-; mov dl,100
-; mov di,204
-; mov bx,14
-; call printdirect
-; push cs
-; pop es
-; mov si,offset cs:debugtextex
-; mov al,0
-; mov ah,0
-; mov dl,100
-; mov di,204
-; mov bx,22
-; call printdirect
-; push cs
-; pop es
-; mov si,offset cs:debugtextex2
-; mov al,0
-; mov ah,0
-; mov dl,100
-; mov di,204
-; mov bx,30
-; call printdirect
-; mov di,204
-; mov bx,14
-; mov cl,40
-; mov ch,24
-; call multidump
-;nodebug: ret
-
- endp
-
-debugtextig: db "00000K",0
-
-debugtextex: db "00000b",0
-
-debugtextex2: db "00000b",0
-
-
-
-
-
-
- if recording
-
- mov ax,recordpos
- mov di,offset cs:debugtextr
- call showword
-
- mov al,0
- call print
- dw 4,4,100
-debugtextr: db "00000",0
-
- mov si,0
- mov di,0
- mov cl,40
- mov ch,12
- call multidump
-
- endif
-
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;Debugax proc near
-;
-; push ax
-; call showpanel
-; pop ax
-; mov di,offset cs:debugaxtext
-; call showword
-;
-; mov di,204
-; mov bx,14
-; mov al,0
-; mov ah,0
-; mov dl,100
-; push cs
-; pop es
-; mov si,offset cs:debugaxtext
-; call printdirect
-; mov di,204
-; mov bx,14
-; mov cl,40
-; mov ch,24
-; call multidump
-; ret
-;
-;debugaxtext db "00000 ",0
-;
-; endp
-
-
-
-
-
-
-
- endif
+
+ if debuglevel2
+
+
+Debugkeys proc near
+
+ ret
+
+ endp
+
+
+
+Debugstart proc near
+
+ call allpalette
+ mov reeltohold,-1
+ mov newlocation,23
+ mov dreamnumber,0
+ mov al,"W"
+ mov ah,"S"
+ mov cl,"H"
+ mov ch,"D"
+ call findexobject
+ mov byte ptr [es:bx+12],"S"-"A"
+ mov byte ptr [es:bx+13],"C"-"A"
+ mov byte ptr [es:bx+14],"R"-"A"
+ mov byte ptr [es:bx+15],"W"-"A"
+ mov al,"W"
+ mov ah,"E"
+ mov cl,"T"
+ mov ch,"A"
+ call findexobject
+ mov byte ptr [es:bx+12],"G"-"A"
+ mov byte ptr [es:bx+13],"U"-"A"
+ mov byte ptr [es:bx+14],"N"-"A"
+ mov byte ptr [es:bx+15],"A"-"A"
+ mov al,"W"
+ mov ah,"E"
+ mov cl,"T"
+ mov ch,"B"
+ call findexobject
+ mov byte ptr [es:bx+12],"S"-"A"
+ mov byte ptr [es:bx+13],"H"-"A"
+ mov byte ptr [es:bx+14],"L"-"A"
+ mov byte ptr [es:bx+15],"D"-"A"
+ mov card1money,12342
+
+ ret
+
+ endp
+
+
+
+
+
+Debuggreen proc near
+
+ push ax dx
+ mov al,0
+ mov dx,3c8h
+ out dx,al
+ mov dx,3c9h
+ mov al,0
+ out dx,al
+ mov al,63
+ out dx,al
+ mov al,0
+ out dx,al
+ pop dx ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Debugred proc near
+
+ push ax dx
+ mov al,0
+ mov dx,3c8h
+ out dx,al
+ mov dx,3c9h
+ mov al,63
+ out dx,al
+ mov al,0
+ out dx,al
+ mov al,0
+ out dx,al
+ pop dx ax
+ ret
+
+ endp
+
+
+
+
+Debugblue proc near
+
+ push ax dx
+ mov al,0
+ mov dx,3c8h
+ out dx,al
+ mov dx,3c9h
+ mov al,0
+ out dx,al
+ mov al,0
+ out dx,al
+ mov al,63
+ out dx,al
+ pop dx ax
+ ret
+
+ endp
+
+
+
+
+
+Debugblack proc near
+
+ push dx ax
+ mov al,0
+ mov dx,3c8h
+ out dx,al
+ mov dx,3c9h
+ mov al,0
+ out dx,al
+ mov al,0
+ out dx,al
+ mov al,0
+ out dx,al
+ pop ax dx
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Debug proc near
+
+ push ds dx cx
+ mov ah,3ch
+ mov cx,0
+ mov dx,seg filenamed
+ mov ds,dx
+ mov dx,offset filenamed
+ int 21h
+ mov bx,ax
+ pop cx dx ds
+ push bx
+ mov ah,40h
+ int 21h
+ pop bx
+ mov ah,3eh
+ int 21h
+ ret
+
+filenamed db "DREAMWEB.TXT",0
+
+ endp
+
+
+
+
+
+
+
+
+Shout proc near
+
+ push ax bx cx dx si di es ds
+ call debugblue
+ mov cx,50
+ call hangon
+ call debugblack
+ mov cx,10
+ call hangon
+ pop ds es di si dx cx bx ax
+ ret
+
+ endp
+
+
+Shoutred proc near
+
+ push ax bx cx dx si di es ds
+ call debugred
+ mov cx,4
+ call hangon
+ call debugblack
+ mov cx,40
+ call hangon
+ pop ds es di si dx cx bx ax
+ ret
+
+ endp
+
+
+
+Shoutgreen proc near
+
+ push ax bx cx dx si di es ds
+ call debuggreen
+ mov cx,4
+ call hangon
+ call debugblack
+ mov cx,40
+ call hangon
+ pop ds es di si dx cx bx ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+;Checkmemingame proc near
+
+; cmp charset1,0
+; jz nodebug
+; mov bx,60000
+; mov ah,48h
+; int 21h
+; mov ax,bx
+; mov cl,6
+; shr ax,cl
+; mov di,offset cs:debugtextig
+; call showword
+
+; mov ax,soundbufferwrite
+; ;mov ax,exframepos
+; mov di,offset cs:debugtextex
+; call showword
+
+; ;mov ax,extextpos
+; ;mov di,offset cs:debugtextex2
+; ;call showword
+
+; push cs
+; pop es
+; mov si,offset cs:debugtextig
+; mov al,0
+; mov ah,0
+; mov dl,100
+; mov di,204
+; mov bx,14
+; call printdirect
+; push cs
+; pop es
+; mov si,offset cs:debugtextex
+; mov al,0
+; mov ah,0
+; mov dl,100
+; mov di,204
+; mov bx,22
+; call printdirect
+; push cs
+; pop es
+; mov si,offset cs:debugtextex2
+; mov al,0
+; mov ah,0
+; mov dl,100
+; mov di,204
+; mov bx,30
+; call printdirect
+; mov di,204
+; mov bx,14
+; mov cl,40
+; mov ch,24
+; call multidump
+;nodebug: ret
+
+ endp
+
+debugtextig: db "00000K",0
+
+debugtextex: db "00000b",0
+
+debugtextex2: db "00000b",0
+
+
+
+
+
+
+ if recording
+
+ mov ax,recordpos
+ mov di,offset cs:debugtextr
+ call showword
+
+ mov al,0
+ call print
+ dw 4,4,100
+debugtextr: db "00000",0
+
+ mov si,0
+ mov di,0
+ mov cl,40
+ mov ch,12
+ call multidump
+
+ endif
+
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+;Debugax proc near
+;
+; push ax
+; call showpanel
+; pop ax
+; mov di,offset cs:debugaxtext
+; call showword
+;
+; mov di,204
+; mov bx,14
+; mov al,0
+; mov ah,0
+; mov dl,100
+; push cs
+; pop es
+; mov si,offset cs:debugaxtext
+; call printdirect
+; mov di,204
+; mov bx,14
+; mov cl,40
+; mov ch,24
+; call multidump
+; ret
+;
+;debugaxtext db "00000 ",0
+;
+; endp
+
+
+
+
+
+
+
+ endif
 \ No newline at end of file
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
diff --git a/devtools/tasmrecover/dreamweb/keypad.asm b/devtools/tasmrecover/dreamweb/keypad.asm
index 9ddce697f2..d75a4fde82 100644
--- a/devtools/tasmrecover/dreamweb/keypad.asm
+++ b/devtools/tasmrecover/dreamweb/keypad.asm
@@ -1,1758 +1,1758 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-Entercode proc near
-
- mov keypadax,ax
- mov keypadcx,cx
- call getridofreels
- call loadkeypad
- call createpanel
- call showicon
- call showouterpad
- call showkeypad
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
- mov presspointer,0
- mov getback,0
-
-keypadloop: call delpointer
- call readmouse
- call showkeypad
- call showpointer
- cmp presscount,0
- jz nopresses
- dec presscount
- jmp afterpress
-nopresses: mov pressed,255
- mov graphicpress,255
- call vsync
-
-afterpress: call dumppointer
- call dumpkeypad
- call dumptextline
- mov bx,offset cs:keypadlist
- call checkcoords
- cmp getback,1
- jz numberright
-
- cmp lightcount,1
- jnz notendkey
- cmp lockstatus,0
- jz numberright
- jmp keypadloop
-
-notendkey: cmp presscount,40
- jnz keypadloop
- call addtopresslist
- cmp pressed,11
- jnz keypadloop
- mov ax,keypadax
- mov cx,keypadcx
- call isitright
- jnz incorrect
- mov lockstatus,0
- mov al,11
- call playchannel1
- mov lightcount,120
- mov presspointer,0
- jmp keypadloop
-incorrect: mov al,11
- call playchannel1
- mov lightcount,120
- mov presspointer,0
- jmp keypadloop
-
-numberright: mov manisoffscreen,0
- call getridoftemp
- call restorereels
- call redrawmainscrn
- call worktoscreenm
- ret
-
-keypadlist: dw keypadx+9,keypadx+30,keypady+9,keypady+22,buttonone
- dw keypadx+31,keypadx+52,keypady+9,keypady+22,buttontwo
- dw keypadx+53,keypadx+74,keypady+9,keypady+22,buttonthree
- dw keypadx+9,keypadx+30,keypady+23,keypady+40,buttonfour
- dw keypadx+31,keypadx+52,keypady+23,keypady+40,buttonfive
- dw keypadx+53,keypadx+74,keypady+23,keypady+40,buttonsix
- dw keypadx+9,keypadx+30,keypady+41,keypady+58,buttonseven
- dw keypadx+31,keypadx+52,keypady+41,keypady+58,buttoneight
- dw keypadx+53,keypadx+74,keypady+41,keypady+58,buttonnine
- dw keypadx+9,keypadx+30,keypady+59,keypady+73,buttonnought
- dw keypadx+31,keypadx+74,keypady+59,keypady+73,buttonenter
- dw keypadx+72,keypadx+86,keypady+80,keypady+94,quitkey
- dw 0,320,0,200,blank
- dw 0ffffh
-
- endp
-
-
-
-
-
-
-
-
-Loadkeypad proc near
-
- mov dx,offset cs:extragraphics1
- call loadintotemp
- ret
-
- endp
-
-
-
-
-Quitkey proc near
-
- cmp commandtype,222
- jz alreadyqk
- mov commandtype,222
- mov al,4
- call commandonly
-alreadyqk: mov ax,mousebutton
- cmp ax,oldbutton
- jz notqk
- and ax,1
- jnz doqk
-notqk: ret
-
-doqk: mov getback,1
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Addtopresslist proc near
-
- cmp presspointer,5
- jz nomorekeys
- mov al,pressed
- cmp al,10
- jnz not10
- mov al,0
-not10: mov bx,presspointer
- mov dx,seg presslist
- mov es,dx
- add bx,offset es:presslist
- mov [es:bx],al
- inc presspointer
-nomorekeys: ret
-
- endp
-
-
-
-
-Buttonone proc near
-
- mov cl,1
- call buttonpress
- ret
-
- endp
-
-
-Buttontwo proc near
-
- mov cl,2
- call buttonpress
- ret
-
- endp
-
-
-
-Buttonthree proc near
-
- mov cl,3
- call buttonpress
- ret
-
- endp
-
-
-
-Buttonfour proc near
-
- mov cl,4
- call buttonpress
- ret
-
- endp
-
-
-Buttonfive proc near
-
- mov cl,5
- call buttonpress
- ret
-
- endp
-
-
-
-Buttonsix proc near
-
- mov cl,6
- call buttonpress
- ret
-
- endp
-
-
-Buttonseven proc near
-
- mov cl,7
- call buttonpress
- ret
-
- endp
-
-
-Buttoneight proc near
-
- mov cl,8
- call buttonpress
- ret
-
- endp
-
-Buttonnine proc near
-
- mov cl,9
- call buttonpress
- ret
-
- endp
-
-
-
-Buttonnought proc near
-
- mov cl,10
- call buttonpress
- ret
-
- endp
-
-
-
-
-
-
-Buttonenter proc near
-
- mov cl,11
- call buttonpress
- ret
-
- endp
-
-
-
-Buttonpress proc near
-
- mov ch,cl
- add ch,100
- cmp commandtype,ch
- jz alreadyb
- mov commandtype,ch
- mov al,cl
- add al,4
- push cx
- call commandonly
- pop cx
-alreadyb: mov ax,mousebutton
- cmp ax,oldbutton
- jz notb
- and ax,1
- jnz dob
-notb: ret
-
-dob: mov pressed,cl
- add cl,21
- mov graphicpress,cl
- mov presscount,40
- cmp cl,32
- jz nonoise
- mov al,10
- call playchannel1
-nonoise: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Showouterpad proc near
-
- mov di,keypadx-3
- mov bx,keypady-4
- mov ds,tempgraphics
- mov al,1
- mov ah,0
- call showframe
- mov di,keypadx+74
- mov bx,keypady+76
- mov ds,tempgraphics
- mov al,37
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Showkeypad proc near
-
- mov al,22
- mov di,keypadx+9
- mov bx,keypady+5
- call singlekey
- mov al,23
- mov di,keypadx+31
- mov bx,keypady+5
- call singlekey
- mov al,24
- mov di,keypadx+53
- mov bx,keypady+5
- call singlekey
-
- mov al,25
- mov di,keypadx+9
- mov bx,keypady+23
- call singlekey
- mov al,26
- mov di,keypadx+31
- mov bx,keypady+23
- call singlekey
- mov al,27
- mov di,keypadx+53
- mov bx,keypady+23
- call singlekey
-
- mov al,28
- mov di,keypadx+9
- mov bx,keypady+41
- call singlekey
- mov al,29
- mov di,keypadx+31
- mov bx,keypady+41
- call singlekey
- mov al,30
- mov di,keypadx+53
- mov bx,keypady+41
- call singlekey
-
- mov al,31
- mov di,keypadx+9
- mov bx,keypady+59
- call singlekey
- mov al,32
- mov di,keypadx+31
- mov bx,keypady+59
- call singlekey
-
- cmp lightcount,0
- jz notenter
- dec lightcount
- mov al,36
- mov bx,keypady-1+63
- cmp lockstatus,0
- jnz changelight
- mov al,41
- mov bx,keypady+4+63
-changelight: cmp lightcount,60
- jc gotlight
- cmp lightcount,100
- jnc gotlight
- dec al
-gotlight: mov ds,tempgraphics
- mov ah,0
- mov di,keypadx+60
- call showframe
-
-notenter: ret
-
- endp
-
-
-
-
-
-Singlekey proc near
-
- cmp graphicpress,al
- jnz gotkey
- add al,11
- cmp presscount,8
- jnc gotkey
- sub al,11
-; cmp presscount,10
-; jnc gotkey
-; sub al,11
-gotkey: mov ds,tempgraphics
- sub al,20
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Dumpkeypad proc near
-
- mov di,keypadx-3
- mov bx,keypady-4
- mov cl,120
- mov ch,90
- call multidump
- ret
-
- endp
-
-
-
-
-
-;---------------------------------
-
-
-
-
-Usemenu proc near
-
- call getridofreels
- call loadmenu
- call createpanel
- call showpanel
- call showicon
- mov newobs,0
- call drawfloor
- call printsprites
-
- mov al,4
- mov ah,0
- mov di,menux-48
- mov bx,menuy-4
- mov ds,tempgraphics2
- call showframe
- call getundermenu
- mov al,5
- mov ah,0
- mov di,menux+54
- mov bx,menuy+72
- mov ds,tempgraphics2
- call showframe
-
-
- call worktoscreenm
- mov getback,0
-
-menuloop: call delpointer
- call putundermenu
- call showmenu
- call readmouse
- call showpointer
- call vsync
- call dumppointer
- call dumpmenu
- call dumptextline
- mov bx,offset cs:menulist
- call checkcoords
- cmp getback,1
- jnz menuloop
-
- mov manisoffscreen,0
- call redrawmainscrn
- call getridoftemp
- call getridoftemp2
- call restorereels
- call worktoscreenm
- ret
-
-menulist: dw menux+54,menux+68,menuy+72,menuy+88,quitkey
- dw 0,320,0,200,blank
- dw 0ffffh
-
- ret
-
- endp
-
-
-
-
-
-
-
-Dumpmenu proc near
-
- mov di,menux
- mov bx,menuy
- mov cl,48
- mov ch,48
- call multidump
- ret
-
- endp
-
-
-
-
-
-
-Getundermenu proc near
-
- mov di,menux
- mov bx,menuy
- mov cl,48
- mov ch,48
- mov ds,buffers
- mov si,undertimedtext
- call multiget
- ret
-
- endp
-
-
-
-
-
-
-
-
-Putundermenu proc near
-
- mov di,menux
- mov bx,menuy
- mov cl,48
- mov ch,48
- mov ds,buffers
- mov si,undertimedtext
- call multiput
- ret
-
- endp
-
-
-
-Showoutermenu proc near
-
- mov al,40
- mov ah,0
- mov di,menux-34
- mov bx,menuy-40
- mov ds,tempgraphics
- call showframe
- mov al,41
- mov ah,0
- mov di,menux+64-34
- mov bx,menuy-40
- mov ds,tempgraphics
- call showframe
- mov al,42
- mov ah,0
- mov di,menux-26
- mov bx,menuy+57-40
- mov ds,tempgraphics
- call showframe
- mov al,43
- mov ah,0
- mov di,menux+64-26
- mov bx,menuy+57-40
- mov ds,tempgraphics
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-
-Showmenu proc near
-
- inc menucount
- cmp menucount,37*2
- jnz menuframeok
- mov menucount,0
-menuframeok: mov al,menucount
- shr al,1
- mov ah,0
- mov di,menux
- mov bx,menuy
- mov ds,tempgraphics
- call showframe
- ret
-
- endp
-
-
-
-Loadmenu proc near
-
- mov dx,offset cs:spritename3
- call loadintotemp
- mov dx,offset cs:mongraphics2
- call loadintotemp2
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Viewfolder proc near
-
- mov manisoffscreen,1
- call getridofall
- call loadfolder
- mov folderpage,0
- call showfolder
- call worktoscreenm
- mov getback,0
-
-folderloop: call delpointer
- call readmouse
- call showpointer
- call vsync
- call dumppointer
- call dumptextline
- mov bx,offset cs:folderlist
- call checkcoords
- cmp getback,0
- jz folderloop
-
- mov manisoffscreen,0
- call getridoftemp
- call getridoftemp2
- call getridoftemp3
- call getridoftempcharset
- call restoreall
- call redrawmainscrn
- call worktoscreenm
- ret
-
-folderlist: dw 280,320,160,200,quitkey
- dw 143,300,6,194,nextfolder
- dw 0,143,6,194,lastfolder
- dw 0,320,0,200,blank
- dw 0ffffh
-
- endp
-
-
-
-
-Nextfolder proc near
-
- cmp folderpage,12
- jnz cannextf
- call blank
- ret
-cannextf: cmp commandtype,201
- jz alreadynextf
- mov commandtype,201
- mov al,16
- call commandonly
-alreadynextf: mov ax,mousebutton
- cmp ax,oldbutton
- jz notnextf
- cmp ax,1
- jz donextf
-notnextf: ret
-donextf: inc folderpage
- call folderhints
- call delpointer
- call showfolder
- mov mousebutton,0
- mov bx,offset cs:folderlist
- call checkcoords
- call worktoscreenm
- ret
-
- endp
-
-
-
-
-Folderhints proc near
-
- cmp folderpage,5
- jnz notaideadd
- cmp aidedead,1
- jz notaideadd
- mov al,13
- call getlocation
- cmp al,1
- jz notaideadd
- mov al,13
- call setlocation
- call showfolder
- mov al,30
- call findtext1
- mov di,0
- mov bx,86
- mov dl,141
- mov ah,16
- call printdirect
- call worktoscreenm
- mov cx,200
- call hangonp
- ret
-
-notaideadd: cmp folderpage,9
- jnz notaristoadd
- mov al,7
- call getlocation
- cmp al,1
- jz notaristoadd
- mov al,7
- call setlocation
- call showfolder
- mov al,31
- call findtext1
- mov di,0
- mov bx,86
- mov dl,141
- mov ah,16
- call printdirect
- call worktoscreenm
- mov cx,200
- call hangonp
-notaristoadd: ret
-
- endp
-
-
-
-Lastfolder proc near
-
- cmp folderpage,0
- jnz canlastf
- call blank
- ret
-canlastf: cmp commandtype,202
- jz alreadylastf
- mov commandtype,202
- mov al,17
- call commandonly
-alreadylastf: cmp folderpage,0
- jz notlastf
- mov ax,mousebutton
- cmp ax,oldbutton
- jz notlastf
- cmp ax,1
- jz dolastf
-notlastf: ret
-dolastf: dec folderpage
- call delpointer
- call showfolder
- mov mousebutton,0
- mov bx,offset cs:folderlist
- call checkcoords
- call worktoscreenm
- ret
-
- endp
-
-
-
-Loadfolder proc near
-
- mov dx,offset cs:foldergraphic1
- call loadintotemp
- mov dx,offset cs:foldergraphic2
- call loadintotemp2
- mov dx,offset cs:foldergraphic3
- call loadintotemp3
- mov dx,offset cs:characterset3
- call loadtempcharset
- mov dx,offset cs:foldertext
- call loadtemptext
- ret
-
- endp
-
-
-
-
-Showfolder proc near
-
- mov commandtype,255
- cmp folderpage,0
- jz closedfolder
- call usetempcharset
- call createpanel2
- mov ds,tempgraphics
- mov di,0
- mov bx,0
- mov al,0
- mov ah,0
- call showframe
- mov ds,tempgraphics
- mov di,143
- mov bx,0
- mov al,1
- mov ah,0
- call showframe
- mov ds,tempgraphics
- mov di,0
- mov bx,92
- mov al,2
- mov ah,0
- call showframe
- mov ds,tempgraphics
- mov di,143
- mov bx,92
- mov al,3
- mov ah,0
- call showframe
- call folderexit
-
- cmp folderpage,1
- jz noleftpage
- call showleftpage
-noleftpage: cmp folderpage,12
- jz norightpage
- call showrightpage
-norightpage: call usecharset1
- call undertextline
- ret
-
-closedfolder: call createpanel2
- mov ds,tempgraphics3
- mov di,143-28
- mov bx,0
- mov al,0
- mov ah,0
- call showframe
- mov ds,tempgraphics3
- mov di,143-28
- mov bx,92
- mov al,1
- mov ah,0
- call showframe
- call folderexit
- call undertextline
- ret
-
- endp
-
-
-
-
-
-
-
-
-Folderexit proc near
-
- mov ds,tempgraphics2
- mov di,296
- mov bx,178
- mov al,6
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-
-Showleftpage proc near
-
- mov ds,tempgraphics2
- mov di,0
- mov bx,12
- mov al,3
- mov ah,0
- call showframe
-
- mov bx,12+5
- mov cx,9
-leftpageloop: push cx bx
- mov ds,tempgraphics2
- mov di,0
- mov al,4
- mov ah,0
- call showframe
- pop bx cx
- add bx,16
- loop leftpageloop
-
- mov ds,tempgraphics2
- mov di,0
- mov al,5
- mov ah,0
- call showframe
-
- mov linespacing,8
- mov charshift,91
- mov kerning,1
- mov bl,folderpage
- dec bl
- dec bl
- add bl,bl
- mov bh,0
- add bx,bx
- mov es,textfile1
- mov si,[es:bx]
- add si,66*2
- mov di,2
- mov bx,48
- mov dl,140
- mov cx,2
-twolotsleft: push cx
-contleftpage: call printdirect
- add bx,linespacing
- cmp al,0
- jnz contleftpage
- pop cx
- loop twolotsleft
-
- mov kerning,0
- mov charshift,0
- mov linespacing,10
-
- mov es,workspace
- mov ds,workspace
- mov di,(48*320)+2
- mov si,(48*320)+2+130
- mov cx,120
-flipfolder: push cx di si
- mov cx,65
-flipfolderline: mov al,[es:di]
- mov ah,[es:si]
- mov [es:di],ah
- mov [es:si],al
- dec si
- inc di
- loop flipfolderline
- pop si di cx
- add si,320
- add di,320
- loop flipfolder
- ret
-
- endp
-
-
-
-Showrightpage proc near
-
- mov ds,tempgraphics2
- mov di,143
- mov bx,12
- mov al,0
- mov ah,0
- call showframe
-
- mov bx,12+37
- mov cx,7
-rightpageloop: push cx bx
- mov ds,tempgraphics2
- mov di,143
- mov al,1
- mov ah,0
- call showframe
- pop bx cx
- add bx,16
- loop rightpageloop
-
- mov ds,tempgraphics2
- mov di,143
- mov al,2
- mov ah,0
- call showframe
-
- mov linespacing,8
- mov kerning,1
- mov bl,folderpage
- dec bl
- add bl,bl
- mov bh,0
- add bx,bx
- mov es,textfile1
- mov si,[es:bx]
- add si,66*2
- mov di,152
- mov bx,48
- mov dl,140
- mov cx,2
-twolotsright: push cx
-contrightpage: call printdirect
- add bx,linespacing
- cmp al,0
- jnz contrightpage
- pop cx
- loop twolotsright
-
- mov kerning,0
- mov linespacing,10
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Entersymbol proc near
-
- mov manisoffscreen,1
- call getridofreels
- mov dx,offset cs:symbolgraphic
- call loadintotemp
- mov symboltopx,24
- mov symboltopdir,0
- mov symbolbotx,24
- mov symbolbotdir,0
- call redrawmainscrn
- call showsymbol
- call undertextline
- call worktoscreenm
- mov getback,0
-
-symbolloop: call delpointer
- call updatesymboltop
- call updatesymbolbot
- call showsymbol
- call readmouse
- call showpointer
- call vsync
- call dumppointer
- call dumptextline
- call dumpsymbol
- mov bx,offset cs:symbollist
- call checkcoords
- cmp getback,0
- jz symbolloop
-
- cmp symbolbotnum,3
- jnz symbolwrong
- cmp symboltopnum,5
- jnz symbolwrong
- mov al,43
- call removesetobject
- mov al,46
- call placesetobject
- mov ah,roomnum
- add ah,12
- mov al,0
- call turnanypathon
- mov manisoffscreen,0
- call redrawmainscrn
- call getridoftemp
- call restorereels
- call worktoscreenm
- mov al,13
- call playchannel1
- ret
-
-symbolwrong: mov al,46
- call removesetobject
- mov al,43
- call placesetobject
- mov ah,roomnum
- add ah,12
- mov al,0
- call turnanypathoff
- mov manisoffscreen,0
- call redrawmainscrn
- call getridoftemp
- call restorereels
- call worktoscreenm
- ret
-
-symbollist: dw symbolx+40,symbolx+64,symboly+2,symboly+16,quitsymbol
- dw symbolx,symbolx+52,symboly+20,symboly+50,settopleft
- dw symbolx+52,symbolx+104,symboly+20,symboly+50,settopright
- dw symbolx,symbolx+52,symboly+50,symboly+80,setbotleft
- dw symbolx+52,symbolx+104,symboly+50,symboly+80,setbotright
- dw 0,320,0,200,blank
- dw 0ffffh
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Quitsymbol proc near
-
- cmp symboltopx,24
- jnz blank
- cmp symbolbotx,24
- jnz blank
- cmp commandtype,222
- jz alreadyqs
- mov commandtype,222
- mov al,18
- call commandonly
-alreadyqs: mov ax,mousebutton
- cmp ax,oldbutton
- jz notqs
- and ax,1
- jnz doqs
-notqs: ret
-
-doqs: mov getback,1
- ret
-
- endp
-
-
-
-
-Settopleft proc near
-
- cmp symboltopdir,0
- jnz blank
- cmp commandtype,210
- jz alreadytopl
- mov commandtype,210
- mov al,19
- call commandonly
-alreadytopl: cmp mousebutton,0
- jz notopleft
- mov symboltopdir,-1
-notopleft: ret
-
- endp
-
-
-
-Settopright proc near
-
- cmp symboltopdir,0
- jnz blank
- cmp commandtype,211
- jz alreadytopr
- mov commandtype,211
- mov al,20
- call commandonly
-alreadytopr: cmp mousebutton,0
- jz notopright
- mov symboltopdir,1
-notopright: ret
-
- endp
-
-
-
-
-Setbotleft proc near
-
- cmp symbolbotdir,0
- jnz blank
- cmp commandtype,212
- jz alreadybotl
- mov commandtype,212
- mov al,21
- call commandonly
-alreadybotl: cmp mousebutton,0
- jz nobotleft
- mov symbolbotdir,-1
-nobotleft: ret
-
- endp
-
-
-
-Setbotright proc near
-
- cmp symbolbotdir,0
- jnz blank
- cmp commandtype,213
- jz alreadybotr
- mov commandtype,213
- mov al,22
- call commandonly
-alreadybotr: cmp mousebutton,0
- jz nobotright
- mov symbolbotdir,1
-nobotright: ret
-
- endp
-
-
-
-
-
-
-
-Dumpsymbol proc near
-
- mov newtextline,0
- mov di,symbolx
- mov bx,symboly+20
- mov cl,104
- mov ch,60
- call multidump
- ret
-
- endp
-
-
-
-
-Showsymbol proc near
-
- mov al,12
- mov ah,0
- mov di,symbolx
- mov bx,symboly
- mov ds,tempgraphics
- call showframe
-
- mov al,symboltopx
- mov ah,0
- mov di,ax
- add di,symbolx-44
- mov al,symboltopnum
- mov bx,symboly+20
- mov ds,tempgraphics
- mov ah,32
- push ax di bx ds
- call showframe
- pop ds bx di ax
- call nextsymbol
- add di,49
- push ax di bx ds
- call showframe
- pop ds bx di ax
- call nextsymbol
- add di,49
- call showframe
-
- mov al,symbolbotx
- mov ah,0
- mov di,ax
- add di,symbolx-44
- mov al,symbolbotnum
- add al,6
- mov bx,symboly+49
- mov ds,tempgraphics
- mov ah,32
- push ax di bx ds
- call showframe
- pop ds bx di ax
- call nextsymbol
- add di,49
- push ax di bx ds
- call showframe
- pop ds bx di ax
- call nextsymbol
- add di,49
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-Nextsymbol proc near
-
- inc al
- cmp al,6
- jz topwrap
- cmp al,12
- jz botwrap
- ret
-topwrap: mov al,0
- ret
-botwrap: mov al,6
- ret
-
- endp
-
-
-
-Updatesymboltop proc near
-
- cmp symboltopdir,0
- jz topfinished
- cmp symboltopdir,-1
- jz backwards
-
- inc symboltopx
- cmp symboltopx,49
- jnz notwrapfor
- mov symboltopx,0
- dec symboltopnum
- cmp symboltopnum,-1
- jnz topfinished
- mov symboltopnum,5
- ret
-notwrapfor: cmp symboltopx,24
- jnz topfinished
- mov symboltopdir,0
- ret
-
-backwards: dec symboltopx
- cmp symboltopx,-1
- jnz notwrapback
- mov symboltopx,48
- inc symboltopnum
- cmp symboltopnum,6
- jnz topfinished
- mov symboltopnum,0
- ret
-notwrapback: cmp symboltopx,24
- jnz topfinished
- mov symboltopdir,0
-topfinished: ret
-
- endp
-
-
-
-Updatesymbolbot proc near
-
- cmp symbolbotdir,0
- jz botfinished
- cmp symbolbotdir,-1
- jz backwardsbot
-
- inc symbolbotx
- cmp symbolbotx,49
- jnz notwrapforb
- mov symbolbotx,0
- dec symbolbotnum
- cmp symbolbotnum,-1
- jnz botfinished
- mov symbolbotnum,5
- ret
-notwrapforb: cmp symbolbotx,24
- jnz botfinished
- mov symbolbotdir,0
- ret
-
-backwardsbot: dec symbolbotx
- cmp symbolbotx,-1
- jnz notwrapbackb
- mov symbolbotx,48
- inc symbolbotnum
- cmp symbolbotnum,6
- jnz botfinished
- mov symbolbotnum,0
- ret
-notwrapbackb: cmp symbolbotx,24
- jnz botfinished
- mov symbolbotdir,0
-botfinished: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Dumpsymbox proc near
-
- cmp dumpx,-1
- jz nodumpsym
- mov di,dumpx
- mov bx,dumpy
- mov cl,30
- mov ch,77;30
- call multidump
- mov dumpx,-1
-nodumpsym: ret
-
- endp
-
-
-
-
-
-
-
-Usediary proc near
-
- call getridofreels
- mov dx,offset cs:diarygraphic
- call loadintotemp
- mov dx,offset cs:diarytext
- call loadtemptext
-
- mov dx,offset cs:characterset3
- call loadtempcharset
- call createpanel
- call showicon
- call showdiary
- call undertextline
- call showdiarypage
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
- mov getback,0
-
-diaryloop: call delpointer
- call readmouse
- call showdiarykeys
- call showpointer
- call vsync
- call dumppointer
- call dumpdiarykeys
- call dumptextline
- mov bx,offset cs:diarylist
- call checkcoords
- cmp getback,0
- jz diaryloop
-
- call getridoftemp
- call getridoftemptext
- call getridoftempcharset
- call restorereels
- mov manisoffscreen,0
- call redrawmainscrn
- call worktoscreenm
- ret
-
-diarylist: dw diaryx+94,diaryx+110,diaryy+97,diaryy+113,diarykeyn
- dw diaryx+151,diaryx+167,diaryy+71,diaryy+87,diarykeyp
- dw diaryx+176,diaryx+192,diaryy+108,diaryy+124,quitkey
- dw 0,320,0,200,blank
- dw 0ffffh
-
- ret
-
- endp
-
-
-
-
-
-
-
-Showdiary proc near
-
- mov al,1
- mov ah,0
- mov di,diaryx
- mov bx,diaryy+37
- mov ds,tempgraphics
- call showframe
- mov al,2
- mov ah,0
- mov di,diaryx+176
- mov bx,diaryy+108
- mov ds,tempgraphics
- call showframe
- ret
-
- endp
-
-
-
-
-Showdiarykeys proc near
-
- cmp presscount,0
- jz nokeyatall
- dec presscount
- cmp presscount,0
- jz nokeyatall
- cmp pressed,"N"
- jnz nokeyn
- mov al,3
- cmp presscount,1
- jz gotkeyn
- mov al,4
-gotkeyn: mov ah,0
- mov di,diaryx+94
- mov bx,diaryy+97
- mov ds,tempgraphics
- call showframe
- cmp presscount,1
- jnz notshown
- call showdiarypage
-notshown: ret
-
-nokeyn: mov al,5
- cmp presscount,1
- jz gotkeyp
- mov al,6
-gotkeyp: mov ah,0
- mov di,diaryx+151
- mov bx,diaryy+71
- mov ds,tempgraphics
- call showframe
- cmp presscount,1
- jnz notshowp
- call showdiarypage
-notshowp: ret
-
-nokeyatall: ret
-
- endp
-
-
-
-
-
-
-Dumpdiarykeys proc near
-
- cmp presscount,1
- jnz notdumpdiary
- cmp sartaindead,1
- jz notsartadd
- cmp diarypage,5
- jnz notsartadd
- cmp diarypage,5
- jnz notsartadd
- mov al,6
- call getlocation
- cmp al,1
- jz notsartadd
- mov al,6
- call setlocation
-
- call delpointer
- mov al,12
- call findtext1
- mov di,70 ;diaryx+48
- mov bx,106 ;diaryy+16
- mov dl,241
- mov ah,16
- call printdirect
-
- call worktoscreenm
- mov cx,200
- call hangonp
- call createpanel
- call showicon
- call showdiary
- call showdiarypage
- call worktoscreenm
- call showpointer
- ret
-
-notsartadd: mov di,diaryx+48
- mov bx,diaryy+15
- mov cl,200
- mov ch,16
- call multidump
-notdumpdiary: mov di,diaryx+94
- mov bx,diaryy+97
- mov cl,16
- mov ch,16
- call multidump
- mov di,diaryx+151
- mov bx,diaryy+71
- mov cl,16
- mov ch,16
- call multidump
- ret
-
- endp
-
-
-
-Diarykeyp proc near
-
- cmp commandtype,214
- jz alreadykeyp
- mov commandtype,214
- mov al,23
- call commandonly
-alreadykeyp: cmp mousebutton,0
- jz notkeyp
- mov ax,oldbutton
- cmp ax,mousebutton
- jz notkeyp
- cmp presscount,0
- jnz notkeyp
- mov al,16
- call playchannel1
- mov presscount,12
- mov pressed,"P"
- dec diarypage
- cmp diarypage,-1
- jnz notkeyp
- mov diarypage,11
-notkeyp: ret
-
- endp
-
-
-
-Diarykeyn proc near
-
- cmp commandtype,213
- jz alreadykeyn
- mov commandtype,213
- mov al,23
- call commandonly
-alreadykeyn: cmp mousebutton,0
- jz notkeyn
- mov ax,oldbutton
- cmp ax,mousebutton
- jz notkeyn
- cmp presscount,0
- jnz notkeyn
- mov al,16
- call playchannel1
- mov presscount,12
- mov pressed,"N"
- inc diarypage
- cmp diarypage,12
- jnz notkeyn
- mov diarypage,0
-notkeyn: ret
-
- endp
-
-
-
-
-
-
-Showdiarypage proc near
-
- mov al,0
- mov ah,0
- mov di,diaryx
- mov bx,diaryy
- mov ds,tempgraphics
- call showframe
-
- mov al,diarypage
- call findtext1
-
- mov kerning,1
- call usetempcharset
- mov di,diaryx+48
- mov bx,diaryy+16
- mov dl,240
- mov ah,16
- mov charshift,91+91
- call printdirect
-
- mov di,diaryx+129
- mov bx,diaryy+16
- mov dl,240
- mov ah,16
- call printdirect
-
- mov di,diaryx+48
- mov bx,diaryy+23
- mov dl,240
- mov ah,16
- call printdirect
-
- mov kerning,0
- mov charshift,0
- call usecharset1
- ret
-
- endp
-
-
-
-
-
-Findtext1 proc near
-
- mov ah,0
- mov si,ax
- add si,si
- mov es,textfile1
- mov ax,[es:si]
- add ax,textstart
- mov si,ax
- ret
-
- endp
-
+Entercode proc near
+
+ mov keypadax,ax
+ mov keypadcx,cx
+ call getridofreels
+ call loadkeypad
+ call createpanel
+ call showicon
+ call showouterpad
+ call showkeypad
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+ mov presspointer,0
+ mov getback,0
+
+keypadloop: call delpointer
+ call readmouse
+ call showkeypad
+ call showpointer
+ cmp presscount,0
+ jz nopresses
+ dec presscount
+ jmp afterpress
+nopresses: mov pressed,255
+ mov graphicpress,255
+ call vsync
+
+afterpress: call dumppointer
+ call dumpkeypad
+ call dumptextline
+ mov bx,offset cs:keypadlist
+ call checkcoords
+ cmp getback,1
+ jz numberright
+
+ cmp lightcount,1
+ jnz notendkey
+ cmp lockstatus,0
+ jz numberright
+ jmp keypadloop
+
+notendkey: cmp presscount,40
+ jnz keypadloop
+ call addtopresslist
+ cmp pressed,11
+ jnz keypadloop
+ mov ax,keypadax
+ mov cx,keypadcx
+ call isitright
+ jnz incorrect
+ mov lockstatus,0
+ mov al,11
+ call playchannel1
+ mov lightcount,120
+ mov presspointer,0
+ jmp keypadloop
+incorrect: mov al,11
+ call playchannel1
+ mov lightcount,120
+ mov presspointer,0
+ jmp keypadloop
+
+numberright: mov manisoffscreen,0
+ call getridoftemp
+ call restorereels
+ call redrawmainscrn
+ call worktoscreenm
+ ret
+
+keypadlist: dw keypadx+9,keypadx+30,keypady+9,keypady+22,buttonone
+ dw keypadx+31,keypadx+52,keypady+9,keypady+22,buttontwo
+ dw keypadx+53,keypadx+74,keypady+9,keypady+22,buttonthree
+ dw keypadx+9,keypadx+30,keypady+23,keypady+40,buttonfour
+ dw keypadx+31,keypadx+52,keypady+23,keypady+40,buttonfive
+ dw keypadx+53,keypadx+74,keypady+23,keypady+40,buttonsix
+ dw keypadx+9,keypadx+30,keypady+41,keypady+58,buttonseven
+ dw keypadx+31,keypadx+52,keypady+41,keypady+58,buttoneight
+ dw keypadx+53,keypadx+74,keypady+41,keypady+58,buttonnine
+ dw keypadx+9,keypadx+30,keypady+59,keypady+73,buttonnought
+ dw keypadx+31,keypadx+74,keypady+59,keypady+73,buttonenter
+ dw keypadx+72,keypadx+86,keypady+80,keypady+94,quitkey
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+ endp
+
+
+
+
+
+
+
+
+Loadkeypad proc near
+
+ mov dx,offset cs:extragraphics1
+ call loadintotemp
+ ret
+
+ endp
+
+
+
+
+Quitkey proc near
+
+ cmp commandtype,222
+ jz alreadyqk
+ mov commandtype,222
+ mov al,4
+ call commandonly
+alreadyqk: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz notqk
+ and ax,1
+ jnz doqk
+notqk: ret
+
+doqk: mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Addtopresslist proc near
+
+ cmp presspointer,5
+ jz nomorekeys
+ mov al,pressed
+ cmp al,10
+ jnz not10
+ mov al,0
+not10: mov bx,presspointer
+ mov dx,seg presslist
+ mov es,dx
+ add bx,offset es:presslist
+ mov [es:bx],al
+ inc presspointer
+nomorekeys: ret
+
+ endp
+
+
+
+
+Buttonone proc near
+
+ mov cl,1
+ call buttonpress
+ ret
+
+ endp
+
+
+Buttontwo proc near
+
+ mov cl,2
+ call buttonpress
+ ret
+
+ endp
+
+
+
+Buttonthree proc near
+
+ mov cl,3
+ call buttonpress
+ ret
+
+ endp
+
+
+
+Buttonfour proc near
+
+ mov cl,4
+ call buttonpress
+ ret
+
+ endp
+
+
+Buttonfive proc near
+
+ mov cl,5
+ call buttonpress
+ ret
+
+ endp
+
+
+
+Buttonsix proc near
+
+ mov cl,6
+ call buttonpress
+ ret
+
+ endp
+
+
+Buttonseven proc near
+
+ mov cl,7
+ call buttonpress
+ ret
+
+ endp
+
+
+Buttoneight proc near
+
+ mov cl,8
+ call buttonpress
+ ret
+
+ endp
+
+Buttonnine proc near
+
+ mov cl,9
+ call buttonpress
+ ret
+
+ endp
+
+
+
+Buttonnought proc near
+
+ mov cl,10
+ call buttonpress
+ ret
+
+ endp
+
+
+
+
+
+
+Buttonenter proc near
+
+ mov cl,11
+ call buttonpress
+ ret
+
+ endp
+
+
+
+Buttonpress proc near
+
+ mov ch,cl
+ add ch,100
+ cmp commandtype,ch
+ jz alreadyb
+ mov commandtype,ch
+ mov al,cl
+ add al,4
+ push cx
+ call commandonly
+ pop cx
+alreadyb: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz notb
+ and ax,1
+ jnz dob
+notb: ret
+
+dob: mov pressed,cl
+ add cl,21
+ mov graphicpress,cl
+ mov presscount,40
+ cmp cl,32
+ jz nonoise
+ mov al,10
+ call playchannel1
+nonoise: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Showouterpad proc near
+
+ mov di,keypadx-3
+ mov bx,keypady-4
+ mov ds,tempgraphics
+ mov al,1
+ mov ah,0
+ call showframe
+ mov di,keypadx+74
+ mov bx,keypady+76
+ mov ds,tempgraphics
+ mov al,37
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Showkeypad proc near
+
+ mov al,22
+ mov di,keypadx+9
+ mov bx,keypady+5
+ call singlekey
+ mov al,23
+ mov di,keypadx+31
+ mov bx,keypady+5
+ call singlekey
+ mov al,24
+ mov di,keypadx+53
+ mov bx,keypady+5
+ call singlekey
+
+ mov al,25
+ mov di,keypadx+9
+ mov bx,keypady+23
+ call singlekey
+ mov al,26
+ mov di,keypadx+31
+ mov bx,keypady+23
+ call singlekey
+ mov al,27
+ mov di,keypadx+53
+ mov bx,keypady+23
+ call singlekey
+
+ mov al,28
+ mov di,keypadx+9
+ mov bx,keypady+41
+ call singlekey
+ mov al,29
+ mov di,keypadx+31
+ mov bx,keypady+41
+ call singlekey
+ mov al,30
+ mov di,keypadx+53
+ mov bx,keypady+41
+ call singlekey
+
+ mov al,31
+ mov di,keypadx+9
+ mov bx,keypady+59
+ call singlekey
+ mov al,32
+ mov di,keypadx+31
+ mov bx,keypady+59
+ call singlekey
+
+ cmp lightcount,0
+ jz notenter
+ dec lightcount
+ mov al,36
+ mov bx,keypady-1+63
+ cmp lockstatus,0
+ jnz changelight
+ mov al,41
+ mov bx,keypady+4+63
+changelight: cmp lightcount,60
+ jc gotlight
+ cmp lightcount,100
+ jnc gotlight
+ dec al
+gotlight: mov ds,tempgraphics
+ mov ah,0
+ mov di,keypadx+60
+ call showframe
+
+notenter: ret
+
+ endp
+
+
+
+
+
+Singlekey proc near
+
+ cmp graphicpress,al
+ jnz gotkey
+ add al,11
+ cmp presscount,8
+ jnc gotkey
+ sub al,11
+; cmp presscount,10
+; jnc gotkey
+; sub al,11
+gotkey: mov ds,tempgraphics
+ sub al,20
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Dumpkeypad proc near
+
+ mov di,keypadx-3
+ mov bx,keypady-4
+ mov cl,120
+ mov ch,90
+ call multidump
+ ret
+
+ endp
+
+
+
+
+
+;---------------------------------
+
+
+
+
+Usemenu proc near
+
+ call getridofreels
+ call loadmenu
+ call createpanel
+ call showpanel
+ call showicon
+ mov newobs,0
+ call drawfloor
+ call printsprites
+
+ mov al,4
+ mov ah,0
+ mov di,menux-48
+ mov bx,menuy-4
+ mov ds,tempgraphics2
+ call showframe
+ call getundermenu
+ mov al,5
+ mov ah,0
+ mov di,menux+54
+ mov bx,menuy+72
+ mov ds,tempgraphics2
+ call showframe
+
+
+ call worktoscreenm
+ mov getback,0
+
+menuloop: call delpointer
+ call putundermenu
+ call showmenu
+ call readmouse
+ call showpointer
+ call vsync
+ call dumppointer
+ call dumpmenu
+ call dumptextline
+ mov bx,offset cs:menulist
+ call checkcoords
+ cmp getback,1
+ jnz menuloop
+
+ mov manisoffscreen,0
+ call redrawmainscrn
+ call getridoftemp
+ call getridoftemp2
+ call restorereels
+ call worktoscreenm
+ ret
+
+menulist: dw menux+54,menux+68,menuy+72,menuy+88,quitkey
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+ ret
+
+ endp
+
+
+
+
+
+
+
+Dumpmenu proc near
+
+ mov di,menux
+ mov bx,menuy
+ mov cl,48
+ mov ch,48
+ call multidump
+ ret
+
+ endp
+
+
+
+
+
+
+Getundermenu proc near
+
+ mov di,menux
+ mov bx,menuy
+ mov cl,48
+ mov ch,48
+ mov ds,buffers
+ mov si,undertimedtext
+ call multiget
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Putundermenu proc near
+
+ mov di,menux
+ mov bx,menuy
+ mov cl,48
+ mov ch,48
+ mov ds,buffers
+ mov si,undertimedtext
+ call multiput
+ ret
+
+ endp
+
+
+
+Showoutermenu proc near
+
+ mov al,40
+ mov ah,0
+ mov di,menux-34
+ mov bx,menuy-40
+ mov ds,tempgraphics
+ call showframe
+ mov al,41
+ mov ah,0
+ mov di,menux+64-34
+ mov bx,menuy-40
+ mov ds,tempgraphics
+ call showframe
+ mov al,42
+ mov ah,0
+ mov di,menux-26
+ mov bx,menuy+57-40
+ mov ds,tempgraphics
+ call showframe
+ mov al,43
+ mov ah,0
+ mov di,menux+64-26
+ mov bx,menuy+57-40
+ mov ds,tempgraphics
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Showmenu proc near
+
+ inc menucount
+ cmp menucount,37*2
+ jnz menuframeok
+ mov menucount,0
+menuframeok: mov al,menucount
+ shr al,1
+ mov ah,0
+ mov di,menux
+ mov bx,menuy
+ mov ds,tempgraphics
+ call showframe
+ ret
+
+ endp
+
+
+
+Loadmenu proc near
+
+ mov dx,offset cs:spritename3
+ call loadintotemp
+ mov dx,offset cs:mongraphics2
+ call loadintotemp2
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Viewfolder proc near
+
+ mov manisoffscreen,1
+ call getridofall
+ call loadfolder
+ mov folderpage,0
+ call showfolder
+ call worktoscreenm
+ mov getback,0
+
+folderloop: call delpointer
+ call readmouse
+ call showpointer
+ call vsync
+ call dumppointer
+ call dumptextline
+ mov bx,offset cs:folderlist
+ call checkcoords
+ cmp getback,0
+ jz folderloop
+
+ mov manisoffscreen,0
+ call getridoftemp
+ call getridoftemp2
+ call getridoftemp3
+ call getridoftempcharset
+ call restoreall
+ call redrawmainscrn
+ call worktoscreenm
+ ret
+
+folderlist: dw 280,320,160,200,quitkey
+ dw 143,300,6,194,nextfolder
+ dw 0,143,6,194,lastfolder
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+ endp
+
+
+
+
+Nextfolder proc near
+
+ cmp folderpage,12
+ jnz cannextf
+ call blank
+ ret
+cannextf: cmp commandtype,201
+ jz alreadynextf
+ mov commandtype,201
+ mov al,16
+ call commandonly
+alreadynextf: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz notnextf
+ cmp ax,1
+ jz donextf
+notnextf: ret
+donextf: inc folderpage
+ call folderhints
+ call delpointer
+ call showfolder
+ mov mousebutton,0
+ mov bx,offset cs:folderlist
+ call checkcoords
+ call worktoscreenm
+ ret
+
+ endp
+
+
+
+
+Folderhints proc near
+
+ cmp folderpage,5
+ jnz notaideadd
+ cmp aidedead,1
+ jz notaideadd
+ mov al,13
+ call getlocation
+ cmp al,1
+ jz notaideadd
+ mov al,13
+ call setlocation
+ call showfolder
+ mov al,30
+ call findtext1
+ mov di,0
+ mov bx,86
+ mov dl,141
+ mov ah,16
+ call printdirect
+ call worktoscreenm
+ mov cx,200
+ call hangonp
+ ret
+
+notaideadd: cmp folderpage,9
+ jnz notaristoadd
+ mov al,7
+ call getlocation
+ cmp al,1
+ jz notaristoadd
+ mov al,7
+ call setlocation
+ call showfolder
+ mov al,31
+ call findtext1
+ mov di,0
+ mov bx,86
+ mov dl,141
+ mov ah,16
+ call printdirect
+ call worktoscreenm
+ mov cx,200
+ call hangonp
+notaristoadd: ret
+
+ endp
+
+
+
+Lastfolder proc near
+
+ cmp folderpage,0
+ jnz canlastf
+ call blank
+ ret
+canlastf: cmp commandtype,202
+ jz alreadylastf
+ mov commandtype,202
+ mov al,17
+ call commandonly
+alreadylastf: cmp folderpage,0
+ jz notlastf
+ mov ax,mousebutton
+ cmp ax,oldbutton
+ jz notlastf
+ cmp ax,1
+ jz dolastf
+notlastf: ret
+dolastf: dec folderpage
+ call delpointer
+ call showfolder
+ mov mousebutton,0
+ mov bx,offset cs:folderlist
+ call checkcoords
+ call worktoscreenm
+ ret
+
+ endp
+
+
+
+Loadfolder proc near
+
+ mov dx,offset cs:foldergraphic1
+ call loadintotemp
+ mov dx,offset cs:foldergraphic2
+ call loadintotemp2
+ mov dx,offset cs:foldergraphic3
+ call loadintotemp3
+ mov dx,offset cs:characterset3
+ call loadtempcharset
+ mov dx,offset cs:foldertext
+ call loadtemptext
+ ret
+
+ endp
+
+
+
+
+Showfolder proc near
+
+ mov commandtype,255
+ cmp folderpage,0
+ jz closedfolder
+ call usetempcharset
+ call createpanel2
+ mov ds,tempgraphics
+ mov di,0
+ mov bx,0
+ mov al,0
+ mov ah,0
+ call showframe
+ mov ds,tempgraphics
+ mov di,143
+ mov bx,0
+ mov al,1
+ mov ah,0
+ call showframe
+ mov ds,tempgraphics
+ mov di,0
+ mov bx,92
+ mov al,2
+ mov ah,0
+ call showframe
+ mov ds,tempgraphics
+ mov di,143
+ mov bx,92
+ mov al,3
+ mov ah,0
+ call showframe
+ call folderexit
+
+ cmp folderpage,1
+ jz noleftpage
+ call showleftpage
+noleftpage: cmp folderpage,12
+ jz norightpage
+ call showrightpage
+norightpage: call usecharset1
+ call undertextline
+ ret
+
+closedfolder: call createpanel2
+ mov ds,tempgraphics3
+ mov di,143-28
+ mov bx,0
+ mov al,0
+ mov ah,0
+ call showframe
+ mov ds,tempgraphics3
+ mov di,143-28
+ mov bx,92
+ mov al,1
+ mov ah,0
+ call showframe
+ call folderexit
+ call undertextline
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Folderexit proc near
+
+ mov ds,tempgraphics2
+ mov di,296
+ mov bx,178
+ mov al,6
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+Showleftpage proc near
+
+ mov ds,tempgraphics2
+ mov di,0
+ mov bx,12
+ mov al,3
+ mov ah,0
+ call showframe
+
+ mov bx,12+5
+ mov cx,9
+leftpageloop: push cx bx
+ mov ds,tempgraphics2
+ mov di,0
+ mov al,4
+ mov ah,0
+ call showframe
+ pop bx cx
+ add bx,16
+ loop leftpageloop
+
+ mov ds,tempgraphics2
+ mov di,0
+ mov al,5
+ mov ah,0
+ call showframe
+
+ mov linespacing,8
+ mov charshift,91
+ mov kerning,1
+ mov bl,folderpage
+ dec bl
+ dec bl
+ add bl,bl
+ mov bh,0
+ add bx,bx
+ mov es,textfile1
+ mov si,[es:bx]
+ add si,66*2
+ mov di,2
+ mov bx,48
+ mov dl,140
+ mov cx,2
+twolotsleft: push cx
+contleftpage: call printdirect
+ add bx,linespacing
+ cmp al,0
+ jnz contleftpage
+ pop cx
+ loop twolotsleft
+
+ mov kerning,0
+ mov charshift,0
+ mov linespacing,10
+
+ mov es,workspace
+ mov ds,workspace
+ mov di,(48*320)+2
+ mov si,(48*320)+2+130
+ mov cx,120
+flipfolder: push cx di si
+ mov cx,65
+flipfolderline: mov al,[es:di]
+ mov ah,[es:si]
+ mov [es:di],ah
+ mov [es:si],al
+ dec si
+ inc di
+ loop flipfolderline
+ pop si di cx
+ add si,320
+ add di,320
+ loop flipfolder
+ ret
+
+ endp
+
+
+
+Showrightpage proc near
+
+ mov ds,tempgraphics2
+ mov di,143
+ mov bx,12
+ mov al,0
+ mov ah,0
+ call showframe
+
+ mov bx,12+37
+ mov cx,7
+rightpageloop: push cx bx
+ mov ds,tempgraphics2
+ mov di,143
+ mov al,1
+ mov ah,0
+ call showframe
+ pop bx cx
+ add bx,16
+ loop rightpageloop
+
+ mov ds,tempgraphics2
+ mov di,143
+ mov al,2
+ mov ah,0
+ call showframe
+
+ mov linespacing,8
+ mov kerning,1
+ mov bl,folderpage
+ dec bl
+ add bl,bl
+ mov bh,0
+ add bx,bx
+ mov es,textfile1
+ mov si,[es:bx]
+ add si,66*2
+ mov di,152
+ mov bx,48
+ mov dl,140
+ mov cx,2
+twolotsright: push cx
+contrightpage: call printdirect
+ add bx,linespacing
+ cmp al,0
+ jnz contrightpage
+ pop cx
+ loop twolotsright
+
+ mov kerning,0
+ mov linespacing,10
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Entersymbol proc near
+
+ mov manisoffscreen,1
+ call getridofreels
+ mov dx,offset cs:symbolgraphic
+ call loadintotemp
+ mov symboltopx,24
+ mov symboltopdir,0
+ mov symbolbotx,24
+ mov symbolbotdir,0
+ call redrawmainscrn
+ call showsymbol
+ call undertextline
+ call worktoscreenm
+ mov getback,0
+
+symbolloop: call delpointer
+ call updatesymboltop
+ call updatesymbolbot
+ call showsymbol
+ call readmouse
+ call showpointer
+ call vsync
+ call dumppointer
+ call dumptextline
+ call dumpsymbol
+ mov bx,offset cs:symbollist
+ call checkcoords
+ cmp getback,0
+ jz symbolloop
+
+ cmp symbolbotnum,3
+ jnz symbolwrong
+ cmp symboltopnum,5
+ jnz symbolwrong
+ mov al,43
+ call removesetobject
+ mov al,46
+ call placesetobject
+ mov ah,roomnum
+ add ah,12
+ mov al,0
+ call turnanypathon
+ mov manisoffscreen,0
+ call redrawmainscrn
+ call getridoftemp
+ call restorereels
+ call worktoscreenm
+ mov al,13
+ call playchannel1
+ ret
+
+symbolwrong: mov al,46
+ call removesetobject
+ mov al,43
+ call placesetobject
+ mov ah,roomnum
+ add ah,12
+ mov al,0
+ call turnanypathoff
+ mov manisoffscreen,0
+ call redrawmainscrn
+ call getridoftemp
+ call restorereels
+ call worktoscreenm
+ ret
+
+symbollist: dw symbolx+40,symbolx+64,symboly+2,symboly+16,quitsymbol
+ dw symbolx,symbolx+52,symboly+20,symboly+50,settopleft
+ dw symbolx+52,symbolx+104,symboly+20,symboly+50,settopright
+ dw symbolx,symbolx+52,symboly+50,symboly+80,setbotleft
+ dw symbolx+52,symbolx+104,symboly+50,symboly+80,setbotright
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Quitsymbol proc near
+
+ cmp symboltopx,24
+ jnz blank
+ cmp symbolbotx,24
+ jnz blank
+ cmp commandtype,222
+ jz alreadyqs
+ mov commandtype,222
+ mov al,18
+ call commandonly
+alreadyqs: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz notqs
+ and ax,1
+ jnz doqs
+notqs: ret
+
+doqs: mov getback,1
+ ret
+
+ endp
+
+
+
+
+Settopleft proc near
+
+ cmp symboltopdir,0
+ jnz blank
+ cmp commandtype,210
+ jz alreadytopl
+ mov commandtype,210
+ mov al,19
+ call commandonly
+alreadytopl: cmp mousebutton,0
+ jz notopleft
+ mov symboltopdir,-1
+notopleft: ret
+
+ endp
+
+
+
+Settopright proc near
+
+ cmp symboltopdir,0
+ jnz blank
+ cmp commandtype,211
+ jz alreadytopr
+ mov commandtype,211
+ mov al,20
+ call commandonly
+alreadytopr: cmp mousebutton,0
+ jz notopright
+ mov symboltopdir,1
+notopright: ret
+
+ endp
+
+
+
+
+Setbotleft proc near
+
+ cmp symbolbotdir,0
+ jnz blank
+ cmp commandtype,212
+ jz alreadybotl
+ mov commandtype,212
+ mov al,21
+ call commandonly
+alreadybotl: cmp mousebutton,0
+ jz nobotleft
+ mov symbolbotdir,-1
+nobotleft: ret
+
+ endp
+
+
+
+Setbotright proc near
+
+ cmp symbolbotdir,0
+ jnz blank
+ cmp commandtype,213
+ jz alreadybotr
+ mov commandtype,213
+ mov al,22
+ call commandonly
+alreadybotr: cmp mousebutton,0
+ jz nobotright
+ mov symbolbotdir,1
+nobotright: ret
+
+ endp
+
+
+
+
+
+
+
+Dumpsymbol proc near
+
+ mov newtextline,0
+ mov di,symbolx
+ mov bx,symboly+20
+ mov cl,104
+ mov ch,60
+ call multidump
+ ret
+
+ endp
+
+
+
+
+Showsymbol proc near
+
+ mov al,12
+ mov ah,0
+ mov di,symbolx
+ mov bx,symboly
+ mov ds,tempgraphics
+ call showframe
+
+ mov al,symboltopx
+ mov ah,0
+ mov di,ax
+ add di,symbolx-44
+ mov al,symboltopnum
+ mov bx,symboly+20
+ mov ds,tempgraphics
+ mov ah,32
+ push ax di bx ds
+ call showframe
+ pop ds bx di ax
+ call nextsymbol
+ add di,49
+ push ax di bx ds
+ call showframe
+ pop ds bx di ax
+ call nextsymbol
+ add di,49
+ call showframe
+
+ mov al,symbolbotx
+ mov ah,0
+ mov di,ax
+ add di,symbolx-44
+ mov al,symbolbotnum
+ add al,6
+ mov bx,symboly+49
+ mov ds,tempgraphics
+ mov ah,32
+ push ax di bx ds
+ call showframe
+ pop ds bx di ax
+ call nextsymbol
+ add di,49
+ push ax di bx ds
+ call showframe
+ pop ds bx di ax
+ call nextsymbol
+ add di,49
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+Nextsymbol proc near
+
+ inc al
+ cmp al,6
+ jz topwrap
+ cmp al,12
+ jz botwrap
+ ret
+topwrap: mov al,0
+ ret
+botwrap: mov al,6
+ ret
+
+ endp
+
+
+
+Updatesymboltop proc near
+
+ cmp symboltopdir,0
+ jz topfinished
+ cmp symboltopdir,-1
+ jz backwards
+
+ inc symboltopx
+ cmp symboltopx,49
+ jnz notwrapfor
+ mov symboltopx,0
+ dec symboltopnum
+ cmp symboltopnum,-1
+ jnz topfinished
+ mov symboltopnum,5
+ ret
+notwrapfor: cmp symboltopx,24
+ jnz topfinished
+ mov symboltopdir,0
+ ret
+
+backwards: dec symboltopx
+ cmp symboltopx,-1
+ jnz notwrapback
+ mov symboltopx,48
+ inc symboltopnum
+ cmp symboltopnum,6
+ jnz topfinished
+ mov symboltopnum,0
+ ret
+notwrapback: cmp symboltopx,24
+ jnz topfinished
+ mov symboltopdir,0
+topfinished: ret
+
+ endp
+
+
+
+Updatesymbolbot proc near
+
+ cmp symbolbotdir,0
+ jz botfinished
+ cmp symbolbotdir,-1
+ jz backwardsbot
+
+ inc symbolbotx
+ cmp symbolbotx,49
+ jnz notwrapforb
+ mov symbolbotx,0
+ dec symbolbotnum
+ cmp symbolbotnum,-1
+ jnz botfinished
+ mov symbolbotnum,5
+ ret
+notwrapforb: cmp symbolbotx,24
+ jnz botfinished
+ mov symbolbotdir,0
+ ret
+
+backwardsbot: dec symbolbotx
+ cmp symbolbotx,-1
+ jnz notwrapbackb
+ mov symbolbotx,48
+ inc symbolbotnum
+ cmp symbolbotnum,6
+ jnz botfinished
+ mov symbolbotnum,0
+ ret
+notwrapbackb: cmp symbolbotx,24
+ jnz botfinished
+ mov symbolbotdir,0
+botfinished: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Dumpsymbox proc near
+
+ cmp dumpx,-1
+ jz nodumpsym
+ mov di,dumpx
+ mov bx,dumpy
+ mov cl,30
+ mov ch,77;30
+ call multidump
+ mov dumpx,-1
+nodumpsym: ret
+
+ endp
+
+
+
+
+
+
+
+Usediary proc near
+
+ call getridofreels
+ mov dx,offset cs:diarygraphic
+ call loadintotemp
+ mov dx,offset cs:diarytext
+ call loadtemptext
+
+ mov dx,offset cs:characterset3
+ call loadtempcharset
+ call createpanel
+ call showicon
+ call showdiary
+ call undertextline
+ call showdiarypage
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+ mov getback,0
+
+diaryloop: call delpointer
+ call readmouse
+ call showdiarykeys
+ call showpointer
+ call vsync
+ call dumppointer
+ call dumpdiarykeys
+ call dumptextline
+ mov bx,offset cs:diarylist
+ call checkcoords
+ cmp getback,0
+ jz diaryloop
+
+ call getridoftemp
+ call getridoftemptext
+ call getridoftempcharset
+ call restorereels
+ mov manisoffscreen,0
+ call redrawmainscrn
+ call worktoscreenm
+ ret
+
+diarylist: dw diaryx+94,diaryx+110,diaryy+97,diaryy+113,diarykeyn
+ dw diaryx+151,diaryx+167,diaryy+71,diaryy+87,diarykeyp
+ dw diaryx+176,diaryx+192,diaryy+108,diaryy+124,quitkey
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+ ret
+
+ endp
+
+
+
+
+
+
+
+Showdiary proc near
+
+ mov al,1
+ mov ah,0
+ mov di,diaryx
+ mov bx,diaryy+37
+ mov ds,tempgraphics
+ call showframe
+ mov al,2
+ mov ah,0
+ mov di,diaryx+176
+ mov bx,diaryy+108
+ mov ds,tempgraphics
+ call showframe
+ ret
+
+ endp
+
+
+
+
+Showdiarykeys proc near
+
+ cmp presscount,0
+ jz nokeyatall
+ dec presscount
+ cmp presscount,0
+ jz nokeyatall
+ cmp pressed,"N"
+ jnz nokeyn
+ mov al,3
+ cmp presscount,1
+ jz gotkeyn
+ mov al,4
+gotkeyn: mov ah,0
+ mov di,diaryx+94
+ mov bx,diaryy+97
+ mov ds,tempgraphics
+ call showframe
+ cmp presscount,1
+ jnz notshown
+ call showdiarypage
+notshown: ret
+
+nokeyn: mov al,5
+ cmp presscount,1
+ jz gotkeyp
+ mov al,6
+gotkeyp: mov ah,0
+ mov di,diaryx+151
+ mov bx,diaryy+71
+ mov ds,tempgraphics
+ call showframe
+ cmp presscount,1
+ jnz notshowp
+ call showdiarypage
+notshowp: ret
+
+nokeyatall: ret
+
+ endp
+
+
+
+
+
+
+Dumpdiarykeys proc near
+
+ cmp presscount,1
+ jnz notdumpdiary
+ cmp sartaindead,1
+ jz notsartadd
+ cmp diarypage,5
+ jnz notsartadd
+ cmp diarypage,5
+ jnz notsartadd
+ mov al,6
+ call getlocation
+ cmp al,1
+ jz notsartadd
+ mov al,6
+ call setlocation
+
+ call delpointer
+ mov al,12
+ call findtext1
+ mov di,70 ;diaryx+48
+ mov bx,106 ;diaryy+16
+ mov dl,241
+ mov ah,16
+ call printdirect
+
+ call worktoscreenm
+ mov cx,200
+ call hangonp
+ call createpanel
+ call showicon
+ call showdiary
+ call showdiarypage
+ call worktoscreenm
+ call showpointer
+ ret
+
+notsartadd: mov di,diaryx+48
+ mov bx,diaryy+15
+ mov cl,200
+ mov ch,16
+ call multidump
+notdumpdiary: mov di,diaryx+94
+ mov bx,diaryy+97
+ mov cl,16
+ mov ch,16
+ call multidump
+ mov di,diaryx+151
+ mov bx,diaryy+71
+ mov cl,16
+ mov ch,16
+ call multidump
+ ret
+
+ endp
+
+
+
+Diarykeyp proc near
+
+ cmp commandtype,214
+ jz alreadykeyp
+ mov commandtype,214
+ mov al,23
+ call commandonly
+alreadykeyp: cmp mousebutton,0
+ jz notkeyp
+ mov ax,oldbutton
+ cmp ax,mousebutton
+ jz notkeyp
+ cmp presscount,0
+ jnz notkeyp
+ mov al,16
+ call playchannel1
+ mov presscount,12
+ mov pressed,"P"
+ dec diarypage
+ cmp diarypage,-1
+ jnz notkeyp
+ mov diarypage,11
+notkeyp: ret
+
+ endp
+
+
+
+Diarykeyn proc near
+
+ cmp commandtype,213
+ jz alreadykeyn
+ mov commandtype,213
+ mov al,23
+ call commandonly
+alreadykeyn: cmp mousebutton,0
+ jz notkeyn
+ mov ax,oldbutton
+ cmp ax,mousebutton
+ jz notkeyn
+ cmp presscount,0
+ jnz notkeyn
+ mov al,16
+ call playchannel1
+ mov presscount,12
+ mov pressed,"N"
+ inc diarypage
+ cmp diarypage,12
+ jnz notkeyn
+ mov diarypage,0
+notkeyn: ret
+
+ endp
+
+
+
+
+
+
+Showdiarypage proc near
+
+ mov al,0
+ mov ah,0
+ mov di,diaryx
+ mov bx,diaryy
+ mov ds,tempgraphics
+ call showframe
+
+ mov al,diarypage
+ call findtext1
+
+ mov kerning,1
+ call usetempcharset
+ mov di,diaryx+48
+ mov bx,diaryy+16
+ mov dl,240
+ mov ah,16
+ mov charshift,91+91
+ call printdirect
+
+ mov di,diaryx+129
+ mov bx,diaryy+16
+ mov dl,240
+ mov ah,16
+ call printdirect
+
+ mov di,diaryx+48
+ mov bx,diaryy+23
+ mov dl,240
+ mov ah,16
+ call printdirect
+
+ mov kerning,0
+ mov charshift,0
+ call usecharset1
+ ret
+
+ endp
+
+
+
+
+
+Findtext1 proc near
+
+ mov ah,0
+ mov si,ax
+ add si,si
+ mov es,textfile1
+ mov ax,[es:si]
+ add ax,textstart
+ mov si,ax
+ ret
+
+ endp
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/look.asm b/devtools/tasmrecover/dreamweb/look.asm
index 11ee24beb6..b5bc913a73 100644
--- a/devtools/tasmrecover/dreamweb/look.asm
+++ b/devtools/tasmrecover/dreamweb/look.asm
@@ -1,167 +1,167 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-;---------------------------------------------------------------Look-routine----
-
-Autolook proc near
-
- mov ax,mousex
- cmp ax,oldx
- jnz diffmouse
- mov ax,mousey
- cmp ax,oldy
- jnz diffmouse
-
- dec lookcounter
- cmp lookcounter,0
- jnz noautolook
- cmp watchingtime,0
- jnz noautolook
- call dolook
-noautolook: ret
-
-diffmouse: mov lookcounter,1000
- ret
-
- endp
-
-
-
-
-Look proc near
-
- cmp watchingtime,0
- jnz blank
- cmp pointermode,2
- jz blank
-
- cmp commandtype,241
- jz alreadylook
- mov commandtype,241
- mov al,25
- call commandonly
-alreadylook: cmp mousebutton,1
- jnz nolook
- mov ax,mousebutton
- cmp ax,oldbutton
- jz nolook
- call dolook
-nolook: ret
-
- endp
-
-
-
-
-
-Dolook proc near
-
- call createpanel
- call showicon
- call undertextline
- call worktoscreenm
-
- mov commandtype,255
- call dumptextline
-
- mov bl,roomnum
- and bl,31
- mov bh,0
- add bx,bx
-
- mov es,roomdesc
- add bx,intextdat
-
- mov si,[es:bx]
- add si,intext
-
- call findnextcolon
-
- mov di,66
- cmp reallocation,50
- jc notdream3
- mov di,40
-notdream3: mov bx,80
- mov dl,241
- call printslow
-
- cmp al,1
- jz afterlook
- mov cx,400
- call hangonp
-
-afterlook: mov pointermode,0
- mov commandtype,0
- call redrawmainscrn
- call worktoscreenm
- ret
-
- endp
-
-
-
-
-
-
-Redrawmainscrn proc near
-
- mov timecount,0
- call createpanel
- mov newobs,0
- call drawfloor
- call printsprites
- call reelsonscreen
- call showicon
- call getunderzoom
- call undertextline
- call readmouse
- mov commandtype,255
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Getback1 proc near
-
- cmp pickup,0
- jz notgotobject
- call blank
- ret
-
-notgotobject: cmp commandtype,202
- jz alreadyget
- mov commandtype,202
- mov al,26
- call commandonly
-alreadyget: mov ax,mousebutton
- cmp ax,oldbutton
- jz nogetback
- and ax,1
- jnz dogetback
-nogetback: ret
-
-dogetback: mov getback,1
- mov pickup,0
- ret
-
- endp
-
-
-
-
-
-
+;---------------------------------------------------------------Look-routine----
+
+Autolook proc near
+
+ mov ax,mousex
+ cmp ax,oldx
+ jnz diffmouse
+ mov ax,mousey
+ cmp ax,oldy
+ jnz diffmouse
+
+ dec lookcounter
+ cmp lookcounter,0
+ jnz noautolook
+ cmp watchingtime,0
+ jnz noautolook
+ call dolook
+noautolook: ret
+
+diffmouse: mov lookcounter,1000
+ ret
+
+ endp
+
+
+
+
+Look proc near
+
+ cmp watchingtime,0
+ jnz blank
+ cmp pointermode,2
+ jz blank
+
+ cmp commandtype,241
+ jz alreadylook
+ mov commandtype,241
+ mov al,25
+ call commandonly
+alreadylook: cmp mousebutton,1
+ jnz nolook
+ mov ax,mousebutton
+ cmp ax,oldbutton
+ jz nolook
+ call dolook
+nolook: ret
+
+ endp
+
+
+
+
+
+Dolook proc near
+
+ call createpanel
+ call showicon
+ call undertextline
+ call worktoscreenm
+
+ mov commandtype,255
+ call dumptextline
+
+ mov bl,roomnum
+ and bl,31
+ mov bh,0
+ add bx,bx
+
+ mov es,roomdesc
+ add bx,intextdat
+
+ mov si,[es:bx]
+ add si,intext
+
+ call findnextcolon
+
+ mov di,66
+ cmp reallocation,50
+ jc notdream3
+ mov di,40
+notdream3: mov bx,80
+ mov dl,241
+ call printslow
+
+ cmp al,1
+ jz afterlook
+ mov cx,400
+ call hangonp
+
+afterlook: mov pointermode,0
+ mov commandtype,0
+ call redrawmainscrn
+ call worktoscreenm
+ ret
+
+ endp
+
+
+
+
+
+
+Redrawmainscrn proc near
+
+ mov timecount,0
+ call createpanel
+ mov newobs,0
+ call drawfloor
+ call printsprites
+ call reelsonscreen
+ call showicon
+ call getunderzoom
+ call undertextline
+ call readmouse
+ mov commandtype,255
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Getback1 proc near
+
+ cmp pickup,0
+ jz notgotobject
+ call blank
+ ret
+
+notgotobject: cmp commandtype,202
+ jz alreadyget
+ mov commandtype,202
+ mov al,26
+ call commandonly
+alreadyget: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz nogetback
+ and ax,1
+ jnz dogetback
+nogetback: ret
+
+dogetback: mov getback,1
+ mov pickup,0
+ ret
+
+ endp
+
+
+
+
+
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/monitor.asm b/devtools/tasmrecover/dreamweb/monitor.asm
index 65b68cb94c..7cc1a5a4dd 100644
--- a/devtools/tasmrecover/dreamweb/monitor.asm
+++ b/devtools/tasmrecover/dreamweb/monitor.asm
@@ -1,1496 +1,1496 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-Usemon proc near
-
- mov lasttrigger,0
-
- push cs ;start off with no file name
- pop es
- mov di,offset cs:currentfile+1
- mov cx,12
- mov al,32
- rep stosb
- push cs ;start off with no file name
- pop es
- mov di,offset cs:operand1+1
- mov cx,12
- mov al,32
- rep stosb
-
- push cs ;clear all keys
- pop es
- mov di,offset cs:keys
- mov byte ptr [es:di],1
- add di,26
- mov cx,3
-keyloop: mov byte ptr [es:di],0
- add di,26
- loop keyloop
-
- call createpanel
- call showpanel
- call showicon
- call drawfloor
- call getridofall ;reels
-
- mov dx,offset cs:mongraphicname
- call loadintotemp
- call loadpersonal
- call loadnews
- call loadcart
- mov dx,offset cs:characterset2
- call loadtempcharset
-
- call printoutermon
- call initialmoncols
- call printlogo
- call worktoscreen
- call turnonpower
- call fadeupyellows
- call fadeupmonfirst
-
- mov monadx,76
- mov monady,141
- mov al,1
- call monmessage
- mov cx,120
- call hangoncurs
- mov al,2
- call monmessage
- mov cx,60
- call randomaccess
- mov al,3
- call monmessage
- mov cx,100
- call hangoncurs
- call printlogo
- call scrollmonitor
- mov bufferin,0
- mov bufferout,0
-
-moreinput: mov di,monadx
- mov bx,monady
- push di bx
- call input
- pop bx di
- mov monadx,di
- mov monady,bx
- call execcommand
- cmp al,0
- jz moreinput
-
-endmon: call getridoftemp
- call getridoftempcharset
- mov es,textfile1
- call deallocatemem
- mov es,textfile2
- call deallocatemem
- mov es,textfile3
- call deallocatemem
- mov getback,1
- mov al,26
- call playchannel1
- mov manisoffscreen,0
- call restoreall ;reels
- call redrawmainscrn
- call worktoscreenm
- ret
-
- endp
-
-
-
-
-
-
-Printoutermon proc near
-
- mov di,40
- mov bx,32
- mov ds,tempgraphics
- mov al,1
- mov ah,0
- call showframe
- mov di,264
- mov bx,32
- mov ds,tempgraphics
- mov al,2
- mov ah,0
- call showframe
- mov di,40
- mov bx,12
- mov ds,tempgraphics
- mov al,3
- mov ah,0
- call showframe
- mov di,40
- mov bx,164
- mov ds,tempgraphics
- mov al,4
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-Loadpersonal proc near
-
- mov al,location
- mov dx,offset cs:monitorfile1
- cmp al,0
- jz foundpersonal
- cmp al,42
- jz foundpersonal
- mov dx,offset cs:monitorfile2
- cmp al,2
- jz foundpersonal
-
-foundpersonal: call openfile
- call readheader
- mov bx,[es:di]
- push bx
- mov cl,4
- shr bx,cl
- call allocatemem
- mov textfile1,ax
- mov ds,ax
- pop cx
- mov dx,0
- call readfromfile
- call closefile
- ret
-
- endp
-
-
-
-
-Loadnews proc near ;textfile2 holds information
- ;accessable by anyone
- mov al,newsitem
- mov dx,offset cs:monitorfile10
- cmp al,0
- jz foundnews
- mov dx,offset cs:monitorfile11
- cmp al,1
- jz foundnews
- mov dx,offset cs:monitorfile12
- cmp al,2
- jz foundnews
- mov dx,offset cs:monitorfile13
-foundnews: call openfile
- call readheader
- mov bx,[es:di]
- push bx
- mov cl,4
- shr bx,cl
- call allocatemem
- mov textfile2,ax
- mov ds,ax
- pop cx
- mov dx,0
- call readfromfile
- call closefile
- ret
-
- endp
-
-
-
-
-
-
-Loadcart proc near
-
- call lookininterface
-
- mov dx,offset cs:monitorfile20
- cmp al,0
- jz gotcart
- mov dx,offset cs:monitorfile21
- cmp al,1
- jz gotcart
- mov dx,offset cs:monitorfile22
- cmp al,2
- jz gotcart
- mov dx,offset cs:monitorfile23
- cmp al,3
- jz gotcart
- mov dx,offset cs:monitorfile24
-gotcart: call openfile
- call readheader
- mov bx,[es:di]
- push bx
- mov cl,4
- shr bx,cl
- call allocatemem
- mov textfile3,ax
- mov ds,ax
- pop cx
- mov dx,0
- call readfromfile
- call closefile
- ret
-
- endp
-
-
-
-
-
-
-Lookininterface proc near
-
- mov al,"I"
- mov ah,"N"
- mov cl,"T"
- mov ch,"F"
- call findsetobject ;this bit searches set obs
- ;until the interface is found
- ;al holds object number
- mov ah,1 ;ah holds type, 1=set object
- call checkinside ;this searches for any extra
- ;object inside the interface..
- cmp cl,numexobjects
- jz emptyinterface
- mov al,[es:bx+15] ;get the last letter of ID code
- inc al
- ret
-emptyinterface: mov al,0
- ret
-
- endp
-
-
-
-
-
-
-
-Turnonpower proc near
-
- mov cx,3
-powerloop: push cx
- call powerlighton
- mov cx,30
- call hangon
- call powerlightoff
- mov cx,30
- call hangon
- pop cx
- loop powerloop
- call powerlighton
- ret
-
- endp
-
-
-
-
-
-Randomaccess proc near
-
-accessloop: push cx
- call vsync
- call vsync
- call randomnum1
- and al,15
- cmp al,10
- jc off
- call accesslighton
- jmp chosenaccess
-off: call accesslightoff
-chosenaccess: pop cx
- loop accessloop
- call accesslightoff
- ret
-
- endp
-
-
-
-Powerlighton proc near
-
- mov di,257+4
- mov bx,182
- mov ds,tempgraphics
- mov al,6
- mov ah,0
- push di bx
- call showframe
- pop bx di
- mov cl,12
- mov ch,8
- call multidump
- ret
-
- endp
-
-
-
-
-Powerlightoff proc near
-
- mov di,257+4
- mov bx,182
- mov ds,tempgraphics
- mov al,5
- mov ah,0
- push di bx
- call showframe
- pop bx di
- mov cl,12
- mov ch,8
- call multidump
- ret
-
- endp
-
-
-
-
-Accesslighton proc near
-
- mov di,74
- mov bx,182
- mov ds,tempgraphics
- mov al,8
- mov ah,0
- push di bx
- call showframe
- pop bx di
- mov cl,12
- mov ch,8
- call multidump
- ret
-
- endp
-
-
-
-
-Accesslightoff proc near
-
- mov di,74
- mov bx,182
- mov ds,tempgraphics
- mov al,7
- mov ah,0
- push di bx
- call showframe
- pop bx di
- mov cl,12
- mov ch,8
- call multidump
- ret
-
- endp
-
-
-
-
-
-Locklighton proc near
-
- mov di,56
- mov bx,182
- mov ds,tempgraphics
- mov al,10
- mov ah,0
- push di bx
- call showframe
- pop bx di
- mov cl,12
- mov ch,8
- call multidump
- ret
-
- endp
-
-
-
-
-Locklightoff proc near
-
- mov di,56
- mov bx,182
- mov ds,tempgraphics
- mov al,9
- mov ah,0
- push di bx
- call showframe
- pop bx di
- mov cl,12
- mov ch,8
- call multidump
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Input proc near
-
- push cs
- pop es
- mov di,offset cs:inputline
- mov cx,64
- mov al,0
- rep stosb
-
- mov curpos,0
- mov al,">"
- mov di,monadx
- mov bx,monady
- mov ds,tempcharset
- mov ah,0
- call printchar
- mov di,monadx
- mov bx,monady
- mov cl,6
- mov ch,8
- call multidump
- add monadx,6
- mov ax,monadx
- mov curslocx,ax
- mov ax,monady
- mov curslocy,ax
-
-waitkey: call printcurs
- call vsync
- call delcurs
- call readkey
- mov al,currentkey
- cmp al,0
- jz waitkey
- cmp al,13
- jz endofinput
- cmp al,8
- jnz notdel
- cmp curpos,0
- jz waitkey
- call delchar
- jmp waitkey
-notdel: cmp curpos,28
- jz waitkey
- cmp currentkey,32
- jnz notleadingspace
- cmp curpos,0
- jz waitkey
-notleadingspace: call makecaps
- push cs
- pop es
- mov si,curpos
- add si,si
- add si,offset cs:inputline
- mov [es:si],al
-
- cmp al,"Z"+1
- jnc waitkey
-
- push ax es si
- mov di,monadx
- mov bx,monady
- mov ds,mapstore
- mov ax,curpos
- xchg al,ah
- mov si,ax
- mov cl,8
- mov ch,8
- call multiget
- pop si es ax
-
- push es si
- mov di,monadx
- mov bx,monady
- mov ds,tempcharset
- mov ah,0
- call printchar
- pop si es
- ;dec cx
- mov [es:si+1],cl
- mov ch,0
- add monadx,cx
- inc curpos
- add curslocx,cx
- jmp waitkey
-
-endofinput: ret
-
- endp
-
-
-
-
-
-
-
-
-Makecaps proc near
-
- cmp al,"a"
- jc notupperc
- sub al,32
-notupperc: ret
-
- endp
-
-
-
-
-
-
-
-
-
-Delchar proc near
-
- dec curpos
- mov si,curpos
- add si,si
- push cs
- pop es
- add si,offset cs:inputline
- mov byte ptr [es:si],0
- mov al,[es:si+1]
- mov ah,0
- sub monadx,ax
- sub curslocx,ax
- mov di,monadx
- mov bx,monady
- mov ds,mapstore
- mov ax,curpos
- xchg al,ah
- mov si,ax
- mov cl,8
- mov ch,8
- call multiput
- mov di,monadx
- mov bx,monady
- mov cl,al
- mov ch,8
- call multidump
- ret
-
- endp
-
-
-
-
-
-
-
-Execcommand proc near
-
- push cs
- pop es
- mov bx,offset cs:comlist
- push cs
- pop ds
- mov si,offset cs:inputline
- mov al,[si]
- cmp al,0
- jnz notblankinp
- call scrollmonitor
- ret
-
-notblankinp: mov cl,0
-comloop: push bx si
-comloop2: mov al,[si]
- add si,2
- mov ah,[es:bx]
- inc bx
- cmp ah,32
- jz foundcom
- cmp al,ah
- jz comloop2
- pop si bx
- add bx,10
- inc cl
- cmp cl,6
- jnz comloop
- call neterror
- mov al,0
- ret
-foundcom: pop si bx
- cmp cl,1
- jz testcom
- cmp cl,2
- jz directory
- cmp cl,3
- jz accesscom
- cmp cl,4
- jz signoncom
- cmp cl,5
- jz keyscom
- jmp quitcom
-
-directory: call dircom
- mov al,0
- ret
-
-signoncom: call signon
- mov al,0
- ret
-
-accesscom: call read
- mov al,0
- ret
-
-keyscom: call showkeys
- mov al,0
- ret
-
-testcom: mov al,6
- call monmessage
- mov al,0
- ret
-
-quitcom: mov al,1
- ret
-
-comlist: db "EXIT "
- db "HELP "
- db "LIST "
- db "READ "
- db "LOGON "
- db "KEYS "
-
-keys: db 1,0,"PUBLIC PUBLIC ",0
- db 0,0,"BLACKDRAGON RYAN ",0
- db 0,0,"HENDRIX LOUIS ",0
- db 0,0,"SEPTIMUS BECKETT ",0
- db 255,255
-
-operand1: db " ",0
-rootdir: db 34,"ROOT ",0
-currentfile db 34," ",0
-
- endp
-
-
-
-
-
-
-
-Neterror proc near
-
- mov al,5
- call monmessage
- call scrollmonitor
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Dircom proc near
-
- mov cx,30
- call randomaccess
- call parser
- cmp byte ptr [es:di+1],0
- jz dirroot
- call dirfile
- ret
-
-dirroot: mov logonum,0
- push cs
- pop ds
- mov si,offset cs:rootdir
- inc si
- push cs
- pop es
- mov di,offset cs:currentfile
- inc di
- mov cx,12
- rep movsb
- call monitorlogo
- call scrollmonitor
-
- mov al,9
- call monmessage
-
- mov es,textfile1
- call searchforfiles
- mov es,textfile2
- call searchforfiles
- mov es,textfile3
- call searchforfiles
-
- call scrollmonitor
- ret
-
- endp
-
-
-
-
-
-
-Searchforfiles proc near
-
- mov bx,textstart
-directloop1: mov al,[es:bx]
- inc bx
- cmp al,"*"
- jz endofdir
- cmp al,34
- jnz directloop1
- call monprint
- jmp directloop1
-endofdir: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-Signon proc near
-
- call parser
- inc di
- push cs
- pop ds
- mov si,offset cs:keys
- mov cx,4
-signonloop: push cx si di
- add si,14
- mov cx,11
-signonloop2: lodsb
- cmp al,32
- jz foundsign
- call makecaps
- mov ah,[es:di]
- inc di
- cmp al,ah
- jnz nomatch
- loop signonloop2
-nomatch: pop di si cx
- add si,26
- loop signonloop
- mov al,13
- call monmessage
- ret
-
-foundsign: pop di si cx ;ds:si contains ad of key matched
- mov bx,si
- push ds
- pop es ;now ds:si is in es:bx
-
- cmp byte ptr [es:bx],0
- jz notyetassigned
-
- mov al,17
- call monmessage
- ret
-
-notyetassigned: push es bx
- call scrollmonitor
- mov al,15
- call monmessage
- mov di,monadx
- mov bx,monady
- push di bx
- call input
- pop bx di
- mov monadx,di
- mov monady,bx
- pop bx es
- push es bx
-
- add bx,2
- push cs
- pop ds
- mov si,offset cs:inputline
-checkpass: lodsw
- mov ah,[es:bx]
- inc bx
- ;cmp al,0
- cmp ah,32
- jz passpassed
- cmp al,ah
- jz checkpass
-passerror: pop bx es
- call scrollmonitor
- mov al,16
- call monmessage
- ret
-
-passpassed: mov al,14
- call monmessage
- pop bx es
- push es bx
- add bx,14
- call monprint
- call scrollmonitor
- pop bx es
- mov byte ptr [es:bx],1
- ret
-
- endp
-
-
-
-
-
-
-
-Showkeys proc near
-
- mov cx,10
- call randomaccess
- call scrollmonitor
- mov al,18
- call monmessage
-
- push cs
- pop es
- mov bx,offset cs:keys
- mov cx,4
-keysloop: push cx bx
- cmp byte ptr [es:bx],0
- jz notheld
- add bx,14
- call monprint
-notheld: pop bx cx
- add bx,26
- loop keysloop
- call scrollmonitor
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Read proc near
-
- mov cx,40
- call randomaccess
- call parser
- cmp byte ptr [es:di+1],0
- jnz okcom
- call neterror
- ret
-okcom: push cs
- pop es
- mov di,offset cs:currentfile
- mov ax,textfile1
- mov monsource,ax
- mov ds,ax
- mov si,textstart
- call searchforstring
- cmp al,0
- jz foundfile2
- mov ax,textfile2
- mov monsource,ax
- mov ds,ax
- mov si,textstart
- call searchforstring
- cmp al,0
- jz foundfile2
- mov ax,textfile3
- mov monsource,ax
- mov ds,ax
- mov si,textstart
- call searchforstring
- cmp al,0
- jz foundfile2
- mov al,7
- call monmessage
- ret
-foundfile2: call getkeyandlogo
- cmp al,0
- jz keyok1
- ret
-keyok1: push cs
- pop es
- mov di,offset cs:operand1
- mov ds,monsource
- call searchforstring
- cmp al,0
- jz findtopictext
- mov al,oldlogonum
- mov logonum,al
- mov al,11
- call monmessage
- ret
-
-findtopictext: inc bx
- push es bx
- call monitorlogo
- call scrollmonitor
- pop bx es
-moretopic: call monprint
- mov al,[es:bx]
- cmp al,34
- jz endoftopic
- cmp al,"="
- jz endoftopic
- cmp al,"*"
- jz endoftopic
- push es bx
- call processtrigger
- mov cx,24
- call randomaccess
- pop bx es
- jmp moretopic
-
-endoftopic: call scrollmonitor
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Dirfile proc near
-
- mov al,34
- mov [es:di],al
- push es di ;save start point held in es:di
- mov ds,textfile1
- mov si,textstart
- call searchforstring
- cmp al,0
- jz foundfile
- pop di es
- push es di
- mov ds,textfile2
- mov si,textstart
- call searchforstring
- cmp al,0
- jz foundfile
- pop di es
- push es di
- mov ds,textfile3
- mov si,textstart
- call searchforstring
- cmp al,0
- jz foundfile
-
- pop di es
- mov al,7
- call monmessage
- ret
-
-foundfile: pop ax ax ;discard old values of es:di
- call getkeyandlogo
- cmp al,0
- jz keyok2
- ret
-
-keyok2: push es bx
- push cs
- pop ds
- mov si,offset cs:operand1+1
- push cs
- pop es
- mov di,offset cs:currentfile+1
- mov cx,12
- rep movsb
- call monitorlogo
- call scrollmonitor
- mov al,10
- call monmessage
- pop bx es
-
-
-directloop2: mov al,[es:bx]
- inc bx
- cmp al,34
- jz endofdir2
- cmp al,"*"
- jz endofdir2
- cmp al,"="
- jnz directloop2
- call monprint
- jmp directloop2
-
-endofdir2: call scrollmonitor
- ret
-
- endp
-
-
-
-
-
-
-Getkeyandlogo proc near
-
- inc bx
- mov al,[es:bx]
- sub al,48
- mov newlogonum,al
- add bx,2
- mov al,[es:bx]
- sub al,48
- mov keynum,al
- inc bx
- push es bx
- mov al,keynum
- mov ah,0
- mov cx,26
- mul cx
- push cs
- pop es
- mov bx,offset cs:keys
- add bx,ax
- mov al,[es:bx]
- cmp al,1
- jz keyok
- push bx es
- mov al,12
- call monmessage
- pop es bx
- add bx,14
- call monprint
- call scrollmonitor
- pop bx es
- mov al,1
- ret
-
-keyok: pop bx es
- mov al,newlogonum
- mov logonum,al
- mov al,0
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Searchforstring proc near ;finds string at es:di in
- ;text at ds:si
-
- mov dl,[es:di] ;needs to know first character
- ;if it's an equals then we must
- ;stop at the next quotation mark
- mov cx,di ;need to remember starting point
-
-restartlook: mov di,cx
- mov bx,si
-
- mov dh,0 ;dh holds count of brackets
- ;brackets are either " or =
-keeplooking: lodsb
- call makecaps
- cmp al,"*"
- jz notfound
- cmp dl,"="
- jnz nofindingtopic ;are we looking for a topic?
- cmp al,34 ;if YES, check we haven't reached
- jz notfound ;the end of this file.
-nofindingtopic: mov ah,[es:di]
- cmp al,dl ;all searches bracketed by same thing
- jnz notbracket
- inc dh
- cmp dh,2
- jz complete
-notbracket: cmp al,ah
- jnz restartlook
- inc di
- jmp keeplooking
-complete: push ds ;es:bx returns found string
- pop es
- mov al,0
- mov bx,si
- ret
-notfound: mov al,1
- ret
-
- endp
-
-
-
-
-
-
-Parser proc near
-
- push cs
- pop es
- mov di,offset cs:operand1
- mov cx,13
- mov al,0
- rep stosb
-
- mov di,offset cs:operand1
- mov al,"="
- stosb
-
- push cs
- pop ds
- mov si,offset cs:inputline
-
-notspace1: lodsw
- cmp al,32
- jz stillspace1
- cmp al,0
- jnz notspace1
- jmp finishpars
-
-stillspace1: lodsw
- cmp al,32
- jz stillspace1
-
-copyin1: stosb
- lodsw
- cmp al,0
- jz finishpars
- cmp al,32
- jnz copyin1
-
-finishpars: mov di,offset cs:operand1
- ret
-
- endp
-
-
-
-
-
-
-Scrollmonitor proc near
-
- push ax bx cx dx di si es ds
-
- call printlogo
- mov di,monadx
- mov bx,monady
- call printundermon
- mov ax,monady
- call worktoscreen
- mov al,25
- call playchannel1
-
- pop ds es si di dx cx bx ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Lockmon proc near
-
- cmp lasthardkey,57
- jnz notlock
- call locklighton
-lockloop: cmp lasthardkey,57
- jz lockloop
- call locklightoff
-notlock: ret
-
- endp
-
-
-
-
-
-Monitorlogo proc near
-
- mov al,logonum
- cmp al,oldlogonum
- jz notnewlogo
- mov oldlogonum,al
- ;call fadedownmon
- call printlogo
- call printundermon
- call worktoscreen
- call printlogo
- ;call fadeupmon
- call printlogo
- mov al,26
- call playchannel1
- mov cx,20
- call randomaccess
- ret
-notnewlogo: call printlogo
- ret
-
- endp
-
-
-
-
-
-
-
-
-Printlogo proc near
-
- mov di,56
- mov bx,32
- mov ds,tempgraphics
- mov al,0
- mov ah,0
- call showframe
- call showcurrentfile
- ret
-
- endp
-
-
-
-
-
-
-Showcurrentfile proc near
-
- mov di,178 ;99
- mov bx,37
- mov si,offset cs:currentfile+1
-curfileloop: mov al,[cs:si]
- cmp al,0
- jz finishfile
- inc si
- push si
- if foreign
- call modifychar
- endif
- mov ds,tempcharset
- mov ah,0
- call printchar
- pop si
- jmp curfileloop
-finishfile: ret
-
- endp
-
-
-
-
-
-
-
-
-
-Monmessage proc near
-
- mov es,textfile1
- mov bx,textstart
- mov cl,al
- mov ch,0
-monmessageloop: mov al,[es:bx]
- inc bx
- cmp al,"+"
- jnz monmessageloop
- loop monmessageloop
- call monprint
- ret
-
- endp
-
-
-
-
-
-
-Processtrigger proc near
-
- cmp lasttrigger,"1"
- jnz notfirsttrigger
- mov al,8
- call setlocation
- mov al,45
- call triggermessage
- ret
-
-notfirsttrigger: cmp lasttrigger,"2"
- jnz notsecondtrigger
- mov al,9
- call setlocation
- mov al,55
- call triggermessage
- ret
-
-notsecondtrigger: cmp lasttrigger,"3"
- jnz notthirdtrigger
- mov al,2
- call setlocation
- mov al,59
- call triggermessage
-
-notthirdtrigger: ret
-
- endp
-
-
-
-
-Triggermessage proc near
-
- push ax
- mov di,174
- mov bx,153
- mov cl,200
- mov ch,63
- mov ds,mapstore
- mov si,0
- call multiget
- pop ax
- call findpuztext
- mov di,174
- mov bx,156
- mov dl,141
- mov ah,16
- call printdirect
- mov cx,140
- call hangon
- call worktoscreen
- mov cx,340
- call hangon
- mov di,174
- mov bx,153
- mov cl,200
- mov ch,63
- mov ds,mapstore
- mov si,0
- call multiput
- call worktoscreen
- mov lasttrigger,0
- ret
-
- endp
-
-
-
-
-
-
-Printcurs proc near
-
- push si di ds dx bx es
- mov di,curslocx
- mov bx,curslocy
- mov cl,6
- mov ch,8
- if foreign
- sub bx,3
- mov ch,11
- endif
- mov ds,buffers
- mov si,textunder
- push di bx
- call multiget
- pop bx di
-
- push bx di
- inc maintimer
- mov ax,maintimer
- and al,16
- jnz flashcurs
- mov al,"/"
- sub al,32
- mov ah,0
- mov ds,tempcharset
- call showframe
-
-flashcurs: pop di bx
- sub di,6
- mov cl,12
- if foreign
- mov ch,11
- else
- mov ch,8
- endif
- call multidump
-
- pop es bx dx ds di si
- ret
-
- endp
-
-
-
-
-
-
-Delcurs proc near
-
- push es bx di ds dx si
- mov di,curslocx
- mov bx,curslocy
- mov cl,6
- mov ch,8
- if foreign
- sub bx,3
- mov ch,11
- endif
- push di bx cx
- mov ds,buffers
- mov si,textunder
- call multiput
- pop cx bx di
- call multidump
-finishcurdel:
- pop si dx ds di bx es
- ret
-
- endp
-
-
-
-
-
+Usemon proc near
+
+ mov lasttrigger,0
+
+ push cs ;start off with no file name
+ pop es
+ mov di,offset cs:currentfile+1
+ mov cx,12
+ mov al,32
+ rep stosb
+ push cs ;start off with no file name
+ pop es
+ mov di,offset cs:operand1+1
+ mov cx,12
+ mov al,32
+ rep stosb
+
+ push cs ;clear all keys
+ pop es
+ mov di,offset cs:keys
+ mov byte ptr [es:di],1
+ add di,26
+ mov cx,3
+keyloop: mov byte ptr [es:di],0
+ add di,26
+ loop keyloop
+
+ call createpanel
+ call showpanel
+ call showicon
+ call drawfloor
+ call getridofall ;reels
+
+ mov dx,offset cs:mongraphicname
+ call loadintotemp
+ call loadpersonal
+ call loadnews
+ call loadcart
+ mov dx,offset cs:characterset2
+ call loadtempcharset
+
+ call printoutermon
+ call initialmoncols
+ call printlogo
+ call worktoscreen
+ call turnonpower
+ call fadeupyellows
+ call fadeupmonfirst
+
+ mov monadx,76
+ mov monady,141
+ mov al,1
+ call monmessage
+ mov cx,120
+ call hangoncurs
+ mov al,2
+ call monmessage
+ mov cx,60
+ call randomaccess
+ mov al,3
+ call monmessage
+ mov cx,100
+ call hangoncurs
+ call printlogo
+ call scrollmonitor
+ mov bufferin,0
+ mov bufferout,0
+
+moreinput: mov di,monadx
+ mov bx,monady
+ push di bx
+ call input
+ pop bx di
+ mov monadx,di
+ mov monady,bx
+ call execcommand
+ cmp al,0
+ jz moreinput
+
+endmon: call getridoftemp
+ call getridoftempcharset
+ mov es,textfile1
+ call deallocatemem
+ mov es,textfile2
+ call deallocatemem
+ mov es,textfile3
+ call deallocatemem
+ mov getback,1
+ mov al,26
+ call playchannel1
+ mov manisoffscreen,0
+ call restoreall ;reels
+ call redrawmainscrn
+ call worktoscreenm
+ ret
+
+ endp
+
+
+
+
+
+
+Printoutermon proc near
+
+ mov di,40
+ mov bx,32
+ mov ds,tempgraphics
+ mov al,1
+ mov ah,0
+ call showframe
+ mov di,264
+ mov bx,32
+ mov ds,tempgraphics
+ mov al,2
+ mov ah,0
+ call showframe
+ mov di,40
+ mov bx,12
+ mov ds,tempgraphics
+ mov al,3
+ mov ah,0
+ call showframe
+ mov di,40
+ mov bx,164
+ mov ds,tempgraphics
+ mov al,4
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+Loadpersonal proc near
+
+ mov al,location
+ mov dx,offset cs:monitorfile1
+ cmp al,0
+ jz foundpersonal
+ cmp al,42
+ jz foundpersonal
+ mov dx,offset cs:monitorfile2
+ cmp al,2
+ jz foundpersonal
+
+foundpersonal: call openfile
+ call readheader
+ mov bx,[es:di]
+ push bx
+ mov cl,4
+ shr bx,cl
+ call allocatemem
+ mov textfile1,ax
+ mov ds,ax
+ pop cx
+ mov dx,0
+ call readfromfile
+ call closefile
+ ret
+
+ endp
+
+
+
+
+Loadnews proc near ;textfile2 holds information
+ ;accessable by anyone
+ mov al,newsitem
+ mov dx,offset cs:monitorfile10
+ cmp al,0
+ jz foundnews
+ mov dx,offset cs:monitorfile11
+ cmp al,1
+ jz foundnews
+ mov dx,offset cs:monitorfile12
+ cmp al,2
+ jz foundnews
+ mov dx,offset cs:monitorfile13
+foundnews: call openfile
+ call readheader
+ mov bx,[es:di]
+ push bx
+ mov cl,4
+ shr bx,cl
+ call allocatemem
+ mov textfile2,ax
+ mov ds,ax
+ pop cx
+ mov dx,0
+ call readfromfile
+ call closefile
+ ret
+
+ endp
+
+
+
+
+
+
+Loadcart proc near
+
+ call lookininterface
+
+ mov dx,offset cs:monitorfile20
+ cmp al,0
+ jz gotcart
+ mov dx,offset cs:monitorfile21
+ cmp al,1
+ jz gotcart
+ mov dx,offset cs:monitorfile22
+ cmp al,2
+ jz gotcart
+ mov dx,offset cs:monitorfile23
+ cmp al,3
+ jz gotcart
+ mov dx,offset cs:monitorfile24
+gotcart: call openfile
+ call readheader
+ mov bx,[es:di]
+ push bx
+ mov cl,4
+ shr bx,cl
+ call allocatemem
+ mov textfile3,ax
+ mov ds,ax
+ pop cx
+ mov dx,0
+ call readfromfile
+ call closefile
+ ret
+
+ endp
+
+
+
+
+
+
+Lookininterface proc near
+
+ mov al,"I"
+ mov ah,"N"
+ mov cl,"T"
+ mov ch,"F"
+ call findsetobject ;this bit searches set obs
+ ;until the interface is found
+ ;al holds object number
+ mov ah,1 ;ah holds type, 1=set object
+ call checkinside ;this searches for any extra
+ ;object inside the interface..
+ cmp cl,numexobjects
+ jz emptyinterface
+ mov al,[es:bx+15] ;get the last letter of ID code
+ inc al
+ ret
+emptyinterface: mov al,0
+ ret
+
+ endp
+
+
+
+
+
+
+
+Turnonpower proc near
+
+ mov cx,3
+powerloop: push cx
+ call powerlighton
+ mov cx,30
+ call hangon
+ call powerlightoff
+ mov cx,30
+ call hangon
+ pop cx
+ loop powerloop
+ call powerlighton
+ ret
+
+ endp
+
+
+
+
+
+Randomaccess proc near
+
+accessloop: push cx
+ call vsync
+ call vsync
+ call randomnum1
+ and al,15
+ cmp al,10
+ jc off
+ call accesslighton
+ jmp chosenaccess
+off: call accesslightoff
+chosenaccess: pop cx
+ loop accessloop
+ call accesslightoff
+ ret
+
+ endp
+
+
+
+Powerlighton proc near
+
+ mov di,257+4
+ mov bx,182
+ mov ds,tempgraphics
+ mov al,6
+ mov ah,0
+ push di bx
+ call showframe
+ pop bx di
+ mov cl,12
+ mov ch,8
+ call multidump
+ ret
+
+ endp
+
+
+
+
+Powerlightoff proc near
+
+ mov di,257+4
+ mov bx,182
+ mov ds,tempgraphics
+ mov al,5
+ mov ah,0
+ push di bx
+ call showframe
+ pop bx di
+ mov cl,12
+ mov ch,8
+ call multidump
+ ret
+
+ endp
+
+
+
+
+Accesslighton proc near
+
+ mov di,74
+ mov bx,182
+ mov ds,tempgraphics
+ mov al,8
+ mov ah,0
+ push di bx
+ call showframe
+ pop bx di
+ mov cl,12
+ mov ch,8
+ call multidump
+ ret
+
+ endp
+
+
+
+
+Accesslightoff proc near
+
+ mov di,74
+ mov bx,182
+ mov ds,tempgraphics
+ mov al,7
+ mov ah,0
+ push di bx
+ call showframe
+ pop bx di
+ mov cl,12
+ mov ch,8
+ call multidump
+ ret
+
+ endp
+
+
+
+
+
+Locklighton proc near
+
+ mov di,56
+ mov bx,182
+ mov ds,tempgraphics
+ mov al,10
+ mov ah,0
+ push di bx
+ call showframe
+ pop bx di
+ mov cl,12
+ mov ch,8
+ call multidump
+ ret
+
+ endp
+
+
+
+
+Locklightoff proc near
+
+ mov di,56
+ mov bx,182
+ mov ds,tempgraphics
+ mov al,9
+ mov ah,0
+ push di bx
+ call showframe
+ pop bx di
+ mov cl,12
+ mov ch,8
+ call multidump
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Input proc near
+
+ push cs
+ pop es
+ mov di,offset cs:inputline
+ mov cx,64
+ mov al,0
+ rep stosb
+
+ mov curpos,0
+ mov al,">"
+ mov di,monadx
+ mov bx,monady
+ mov ds,tempcharset
+ mov ah,0
+ call printchar
+ mov di,monadx
+ mov bx,monady
+ mov cl,6
+ mov ch,8
+ call multidump
+ add monadx,6
+ mov ax,monadx
+ mov curslocx,ax
+ mov ax,monady
+ mov curslocy,ax
+
+waitkey: call printcurs
+ call vsync
+ call delcurs
+ call readkey
+ mov al,currentkey
+ cmp al,0
+ jz waitkey
+ cmp al,13
+ jz endofinput
+ cmp al,8
+ jnz notdel
+ cmp curpos,0
+ jz waitkey
+ call delchar
+ jmp waitkey
+notdel: cmp curpos,28
+ jz waitkey
+ cmp currentkey,32
+ jnz notleadingspace
+ cmp curpos,0
+ jz waitkey
+notleadingspace: call makecaps
+ push cs
+ pop es
+ mov si,curpos
+ add si,si
+ add si,offset cs:inputline
+ mov [es:si],al
+
+ cmp al,"Z"+1
+ jnc waitkey
+
+ push ax es si
+ mov di,monadx
+ mov bx,monady
+ mov ds,mapstore
+ mov ax,curpos
+ xchg al,ah
+ mov si,ax
+ mov cl,8
+ mov ch,8
+ call multiget
+ pop si es ax
+
+ push es si
+ mov di,monadx
+ mov bx,monady
+ mov ds,tempcharset
+ mov ah,0
+ call printchar
+ pop si es
+ ;dec cx
+ mov [es:si+1],cl
+ mov ch,0
+ add monadx,cx
+ inc curpos
+ add curslocx,cx
+ jmp waitkey
+
+endofinput: ret
+
+ endp
+
+
+
+
+
+
+
+
+Makecaps proc near
+
+ cmp al,"a"
+ jc notupperc
+ sub al,32
+notupperc: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Delchar proc near
+
+ dec curpos
+ mov si,curpos
+ add si,si
+ push cs
+ pop es
+ add si,offset cs:inputline
+ mov byte ptr [es:si],0
+ mov al,[es:si+1]
+ mov ah,0
+ sub monadx,ax
+ sub curslocx,ax
+ mov di,monadx
+ mov bx,monady
+ mov ds,mapstore
+ mov ax,curpos
+ xchg al,ah
+ mov si,ax
+ mov cl,8
+ mov ch,8
+ call multiput
+ mov di,monadx
+ mov bx,monady
+ mov cl,al
+ mov ch,8
+ call multidump
+ ret
+
+ endp
+
+
+
+
+
+
+
+Execcommand proc near
+
+ push cs
+ pop es
+ mov bx,offset cs:comlist
+ push cs
+ pop ds
+ mov si,offset cs:inputline
+ mov al,[si]
+ cmp al,0
+ jnz notblankinp
+ call scrollmonitor
+ ret
+
+notblankinp: mov cl,0
+comloop: push bx si
+comloop2: mov al,[si]
+ add si,2
+ mov ah,[es:bx]
+ inc bx
+ cmp ah,32
+ jz foundcom
+ cmp al,ah
+ jz comloop2
+ pop si bx
+ add bx,10
+ inc cl
+ cmp cl,6
+ jnz comloop
+ call neterror
+ mov al,0
+ ret
+foundcom: pop si bx
+ cmp cl,1
+ jz testcom
+ cmp cl,2
+ jz directory
+ cmp cl,3
+ jz accesscom
+ cmp cl,4
+ jz signoncom
+ cmp cl,5
+ jz keyscom
+ jmp quitcom
+
+directory: call dircom
+ mov al,0
+ ret
+
+signoncom: call signon
+ mov al,0
+ ret
+
+accesscom: call read
+ mov al,0
+ ret
+
+keyscom: call showkeys
+ mov al,0
+ ret
+
+testcom: mov al,6
+ call monmessage
+ mov al,0
+ ret
+
+quitcom: mov al,1
+ ret
+
+comlist: db "EXIT "
+ db "HELP "
+ db "LIST "
+ db "READ "
+ db "LOGON "
+ db "KEYS "
+
+keys: db 1,0,"PUBLIC PUBLIC ",0
+ db 0,0,"BLACKDRAGON RYAN ",0
+ db 0,0,"HENDRIX LOUIS ",0
+ db 0,0,"SEPTIMUS BECKETT ",0
+ db 255,255
+
+operand1: db " ",0
+rootdir: db 34,"ROOT ",0
+currentfile db 34," ",0
+
+ endp
+
+
+
+
+
+
+
+Neterror proc near
+
+ mov al,5
+ call monmessage
+ call scrollmonitor
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Dircom proc near
+
+ mov cx,30
+ call randomaccess
+ call parser
+ cmp byte ptr [es:di+1],0
+ jz dirroot
+ call dirfile
+ ret
+
+dirroot: mov logonum,0
+ push cs
+ pop ds
+ mov si,offset cs:rootdir
+ inc si
+ push cs
+ pop es
+ mov di,offset cs:currentfile
+ inc di
+ mov cx,12
+ rep movsb
+ call monitorlogo
+ call scrollmonitor
+
+ mov al,9
+ call monmessage
+
+ mov es,textfile1
+ call searchforfiles
+ mov es,textfile2
+ call searchforfiles
+ mov es,textfile3
+ call searchforfiles
+
+ call scrollmonitor
+ ret
+
+ endp
+
+
+
+
+
+
+Searchforfiles proc near
+
+ mov bx,textstart
+directloop1: mov al,[es:bx]
+ inc bx
+ cmp al,"*"
+ jz endofdir
+ cmp al,34
+ jnz directloop1
+ call monprint
+ jmp directloop1
+endofdir: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+Signon proc near
+
+ call parser
+ inc di
+ push cs
+ pop ds
+ mov si,offset cs:keys
+ mov cx,4
+signonloop: push cx si di
+ add si,14
+ mov cx,11
+signonloop2: lodsb
+ cmp al,32
+ jz foundsign
+ call makecaps
+ mov ah,[es:di]
+ inc di
+ cmp al,ah
+ jnz nomatch
+ loop signonloop2
+nomatch: pop di si cx
+ add si,26
+ loop signonloop
+ mov al,13
+ call monmessage
+ ret
+
+foundsign: pop di si cx ;ds:si contains ad of key matched
+ mov bx,si
+ push ds
+ pop es ;now ds:si is in es:bx
+
+ cmp byte ptr [es:bx],0
+ jz notyetassigned
+
+ mov al,17
+ call monmessage
+ ret
+
+notyetassigned: push es bx
+ call scrollmonitor
+ mov al,15
+ call monmessage
+ mov di,monadx
+ mov bx,monady
+ push di bx
+ call input
+ pop bx di
+ mov monadx,di
+ mov monady,bx
+ pop bx es
+ push es bx
+
+ add bx,2
+ push cs
+ pop ds
+ mov si,offset cs:inputline
+checkpass: lodsw
+ mov ah,[es:bx]
+ inc bx
+ ;cmp al,0
+ cmp ah,32
+ jz passpassed
+ cmp al,ah
+ jz checkpass
+passerror: pop bx es
+ call scrollmonitor
+ mov al,16
+ call monmessage
+ ret
+
+passpassed: mov al,14
+ call monmessage
+ pop bx es
+ push es bx
+ add bx,14
+ call monprint
+ call scrollmonitor
+ pop bx es
+ mov byte ptr [es:bx],1
+ ret
+
+ endp
+
+
+
+
+
+
+
+Showkeys proc near
+
+ mov cx,10
+ call randomaccess
+ call scrollmonitor
+ mov al,18
+ call monmessage
+
+ push cs
+ pop es
+ mov bx,offset cs:keys
+ mov cx,4
+keysloop: push cx bx
+ cmp byte ptr [es:bx],0
+ jz notheld
+ add bx,14
+ call monprint
+notheld: pop bx cx
+ add bx,26
+ loop keysloop
+ call scrollmonitor
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Read proc near
+
+ mov cx,40
+ call randomaccess
+ call parser
+ cmp byte ptr [es:di+1],0
+ jnz okcom
+ call neterror
+ ret
+okcom: push cs
+ pop es
+ mov di,offset cs:currentfile
+ mov ax,textfile1
+ mov monsource,ax
+ mov ds,ax
+ mov si,textstart
+ call searchforstring
+ cmp al,0
+ jz foundfile2
+ mov ax,textfile2
+ mov monsource,ax
+ mov ds,ax
+ mov si,textstart
+ call searchforstring
+ cmp al,0
+ jz foundfile2
+ mov ax,textfile3
+ mov monsource,ax
+ mov ds,ax
+ mov si,textstart
+ call searchforstring
+ cmp al,0
+ jz foundfile2
+ mov al,7
+ call monmessage
+ ret
+foundfile2: call getkeyandlogo
+ cmp al,0
+ jz keyok1
+ ret
+keyok1: push cs
+ pop es
+ mov di,offset cs:operand1
+ mov ds,monsource
+ call searchforstring
+ cmp al,0
+ jz findtopictext
+ mov al,oldlogonum
+ mov logonum,al
+ mov al,11
+ call monmessage
+ ret
+
+findtopictext: inc bx
+ push es bx
+ call monitorlogo
+ call scrollmonitor
+ pop bx es
+moretopic: call monprint
+ mov al,[es:bx]
+ cmp al,34
+ jz endoftopic
+ cmp al,"="
+ jz endoftopic
+ cmp al,"*"
+ jz endoftopic
+ push es bx
+ call processtrigger
+ mov cx,24
+ call randomaccess
+ pop bx es
+ jmp moretopic
+
+endoftopic: call scrollmonitor
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Dirfile proc near
+
+ mov al,34
+ mov [es:di],al
+ push es di ;save start point held in es:di
+ mov ds,textfile1
+ mov si,textstart
+ call searchforstring
+ cmp al,0
+ jz foundfile
+ pop di es
+ push es di
+ mov ds,textfile2
+ mov si,textstart
+ call searchforstring
+ cmp al,0
+ jz foundfile
+ pop di es
+ push es di
+ mov ds,textfile3
+ mov si,textstart
+ call searchforstring
+ cmp al,0
+ jz foundfile
+
+ pop di es
+ mov al,7
+ call monmessage
+ ret
+
+foundfile: pop ax ax ;discard old values of es:di
+ call getkeyandlogo
+ cmp al,0
+ jz keyok2
+ ret
+
+keyok2: push es bx
+ push cs
+ pop ds
+ mov si,offset cs:operand1+1
+ push cs
+ pop es
+ mov di,offset cs:currentfile+1
+ mov cx,12
+ rep movsb
+ call monitorlogo
+ call scrollmonitor
+ mov al,10
+ call monmessage
+ pop bx es
+
+
+directloop2: mov al,[es:bx]
+ inc bx
+ cmp al,34
+ jz endofdir2
+ cmp al,"*"
+ jz endofdir2
+ cmp al,"="
+ jnz directloop2
+ call monprint
+ jmp directloop2
+
+endofdir2: call scrollmonitor
+ ret
+
+ endp
+
+
+
+
+
+
+Getkeyandlogo proc near
+
+ inc bx
+ mov al,[es:bx]
+ sub al,48
+ mov newlogonum,al
+ add bx,2
+ mov al,[es:bx]
+ sub al,48
+ mov keynum,al
+ inc bx
+ push es bx
+ mov al,keynum
+ mov ah,0
+ mov cx,26
+ mul cx
+ push cs
+ pop es
+ mov bx,offset cs:keys
+ add bx,ax
+ mov al,[es:bx]
+ cmp al,1
+ jz keyok
+ push bx es
+ mov al,12
+ call monmessage
+ pop es bx
+ add bx,14
+ call monprint
+ call scrollmonitor
+ pop bx es
+ mov al,1
+ ret
+
+keyok: pop bx es
+ mov al,newlogonum
+ mov logonum,al
+ mov al,0
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Searchforstring proc near ;finds string at es:di in
+ ;text at ds:si
+
+ mov dl,[es:di] ;needs to know first character
+ ;if it's an equals then we must
+ ;stop at the next quotation mark
+ mov cx,di ;need to remember starting point
+
+restartlook: mov di,cx
+ mov bx,si
+
+ mov dh,0 ;dh holds count of brackets
+ ;brackets are either " or =
+keeplooking: lodsb
+ call makecaps
+ cmp al,"*"
+ jz notfound
+ cmp dl,"="
+ jnz nofindingtopic ;are we looking for a topic?
+ cmp al,34 ;if YES, check we haven't reached
+ jz notfound ;the end of this file.
+nofindingtopic: mov ah,[es:di]
+ cmp al,dl ;all searches bracketed by same thing
+ jnz notbracket
+ inc dh
+ cmp dh,2
+ jz complete
+notbracket: cmp al,ah
+ jnz restartlook
+ inc di
+ jmp keeplooking
+complete: push ds ;es:bx returns found string
+ pop es
+ mov al,0
+ mov bx,si
+ ret
+notfound: mov al,1
+ ret
+
+ endp
+
+
+
+
+
+
+Parser proc near
+
+ push cs
+ pop es
+ mov di,offset cs:operand1
+ mov cx,13
+ mov al,0
+ rep stosb
+
+ mov di,offset cs:operand1
+ mov al,"="
+ stosb
+
+ push cs
+ pop ds
+ mov si,offset cs:inputline
+
+notspace1: lodsw
+ cmp al,32
+ jz stillspace1
+ cmp al,0
+ jnz notspace1
+ jmp finishpars
+
+stillspace1: lodsw
+ cmp al,32
+ jz stillspace1
+
+copyin1: stosb
+ lodsw
+ cmp al,0
+ jz finishpars
+ cmp al,32
+ jnz copyin1
+
+finishpars: mov di,offset cs:operand1
+ ret
+
+ endp
+
+
+
+
+
+
+Scrollmonitor proc near
+
+ push ax bx cx dx di si es ds
+
+ call printlogo
+ mov di,monadx
+ mov bx,monady
+ call printundermon
+ mov ax,monady
+ call worktoscreen
+ mov al,25
+ call playchannel1
+
+ pop ds es si di dx cx bx ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lockmon proc near
+
+ cmp lasthardkey,57
+ jnz notlock
+ call locklighton
+lockloop: cmp lasthardkey,57
+ jz lockloop
+ call locklightoff
+notlock: ret
+
+ endp
+
+
+
+
+
+Monitorlogo proc near
+
+ mov al,logonum
+ cmp al,oldlogonum
+ jz notnewlogo
+ mov oldlogonum,al
+ ;call fadedownmon
+ call printlogo
+ call printundermon
+ call worktoscreen
+ call printlogo
+ ;call fadeupmon
+ call printlogo
+ mov al,26
+ call playchannel1
+ mov cx,20
+ call randomaccess
+ ret
+notnewlogo: call printlogo
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Printlogo proc near
+
+ mov di,56
+ mov bx,32
+ mov ds,tempgraphics
+ mov al,0
+ mov ah,0
+ call showframe
+ call showcurrentfile
+ ret
+
+ endp
+
+
+
+
+
+
+Showcurrentfile proc near
+
+ mov di,178 ;99
+ mov bx,37
+ mov si,offset cs:currentfile+1
+curfileloop: mov al,[cs:si]
+ cmp al,0
+ jz finishfile
+ inc si
+ push si
+ if foreign
+ call modifychar
+ endif
+ mov ds,tempcharset
+ mov ah,0
+ call printchar
+ pop si
+ jmp curfileloop
+finishfile: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Monmessage proc near
+
+ mov es,textfile1
+ mov bx,textstart
+ mov cl,al
+ mov ch,0
+monmessageloop: mov al,[es:bx]
+ inc bx
+ cmp al,"+"
+ jnz monmessageloop
+ loop monmessageloop
+ call monprint
+ ret
+
+ endp
+
+
+
+
+
+
+Processtrigger proc near
+
+ cmp lasttrigger,"1"
+ jnz notfirsttrigger
+ mov al,8
+ call setlocation
+ mov al,45
+ call triggermessage
+ ret
+
+notfirsttrigger: cmp lasttrigger,"2"
+ jnz notsecondtrigger
+ mov al,9
+ call setlocation
+ mov al,55
+ call triggermessage
+ ret
+
+notsecondtrigger: cmp lasttrigger,"3"
+ jnz notthirdtrigger
+ mov al,2
+ call setlocation
+ mov al,59
+ call triggermessage
+
+notthirdtrigger: ret
+
+ endp
+
+
+
+
+Triggermessage proc near
+
+ push ax
+ mov di,174
+ mov bx,153
+ mov cl,200
+ mov ch,63
+ mov ds,mapstore
+ mov si,0
+ call multiget
+ pop ax
+ call findpuztext
+ mov di,174
+ mov bx,156
+ mov dl,141
+ mov ah,16
+ call printdirect
+ mov cx,140
+ call hangon
+ call worktoscreen
+ mov cx,340
+ call hangon
+ mov di,174
+ mov bx,153
+ mov cl,200
+ mov ch,63
+ mov ds,mapstore
+ mov si,0
+ call multiput
+ call worktoscreen
+ mov lasttrigger,0
+ ret
+
+ endp
+
+
+
+
+
+
+Printcurs proc near
+
+ push si di ds dx bx es
+ mov di,curslocx
+ mov bx,curslocy
+ mov cl,6
+ mov ch,8
+ if foreign
+ sub bx,3
+ mov ch,11
+ endif
+ mov ds,buffers
+ mov si,textunder
+ push di bx
+ call multiget
+ pop bx di
+
+ push bx di
+ inc maintimer
+ mov ax,maintimer
+ and al,16
+ jnz flashcurs
+ mov al,"/"
+ sub al,32
+ mov ah,0
+ mov ds,tempcharset
+ call showframe
+
+flashcurs: pop di bx
+ sub di,6
+ mov cl,12
+ if foreign
+ mov ch,11
+ else
+ mov ch,8
+ endif
+ call multidump
+
+ pop es bx dx ds di si
+ ret
+
+ endp
+
+
+
+
+
+
+Delcurs proc near
+
+ push es bx di ds dx si
+ mov di,curslocx
+ mov bx,curslocy
+ mov cl,6
+ mov ch,8
+ if foreign
+ sub bx,3
+ mov ch,11
+ endif
+ push di bx cx
+ mov ds,buffers
+ mov si,textunder
+ call multiput
+ pop cx bx di
+ call multidump
+finishcurdel:
+ pop si dx ds di bx es
+ ret
+
+ endp
+
+
+
+
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/newplace.asm b/devtools/tasmrecover/dreamweb/newplace.asm
index 8a1e97367c..cac6e100a7 100644
--- a/devtools/tasmrecover/dreamweb/newplace.asm
+++ b/devtools/tasmrecover/dreamweb/newplace.asm
@@ -1,581 +1,581 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-;----------------------------------------------------Choosing a new location----
-
-Newplace proc near
-
- cmp needtotravel,1
- jz istravel
- cmp autolocation,-1
- jnz isautoloc
- ret
-
-isautoloc: mov al,autolocation
- mov newlocation,al
- mov autolocation,-1
- ret
-
-istravel: mov needtotravel,0
- call selectlocation
- ret
-
- endp
-
-
-
-
-Selectlocation proc near
-
- mov inmaparea,0
- call clearbeforeload
- mov getback,0
- mov pointerframe,22
-
- call readcitypic
- call showcity
- call getridoftemp
- call readdesticon
- call loadtraveltext
- call showpanel
- call showman
- call showarrows
- call showexit
- call locationpic
- call undertextline
- mov commandtype,255
- call readmouse
- mov pointerframe,0
- call showpointer
- call worktoscreen
- mov al,9
- mov ah,255
- call playchannel0
- mov newlocation,255
-
-select: call delpointer
- call readmouse
- call showpointer
- call vsync
- call dumppointer
- call dumptextline
- cmp getback,1
- jz quittravel
- mov bx,offset cs:destlist
- call checkcoords
- cmp newlocation,255
- jz select
- mov al,newlocation
- cmp al,location
- jz quittravel
-
- call getridoftemp
- call getridoftemp2
- call getridoftemp3
- mov es,traveltext
- call deallocatemem
- ret
-
-quittravel: mov al,reallocation ; was just location
- mov newlocation,al
- mov getback,0
- call getridoftemp
- call getridoftemp2
- call getridoftemp3
- mov es,traveltext
- call deallocatemem
- ret
-
-destlist: dw 238,258,4,44,nextdest
- dw 104,124,4,44,lastdest
- dw 280,308,4,44,lookatplace
- dw 104,216,138,192,destselect
- dw 273,320,157,198,getback1
- dw 0,320,0,200,blank
- dw 0ffffh
-
- endp
-
-
-
-
-
-Showcity proc near
-
- call clearwork
- mov ds,tempgraphics
- mov di,57
- mov bx,32
- mov al,0
- mov ah,0
- call showframe
- mov ds,tempgraphics
- mov di,120+57
- mov bx,32
- mov al,1
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-
-Lookatplace proc near
-
- cmp commandtype,224
- jz alreadyinfo
- mov commandtype,224
- mov al,27
- call commandonly
-alreadyinfo: mov ax,mousebutton
- and ax,1
- jz noinfo
- cmp ax,oldbutton
- jz noinfo
-
- mov bl,destpos
- cmp bl,15
- jnc noinfo
-
- push bx
- call delpointer
- call deltextline
- call getundercentre
- mov ds,tempgraphics3
- mov al,0
- mov ah,0
- mov di,60
- mov bx,72
- call showframe
- mov al,4
- mov ah,0
- mov di,60
- mov bx,72+55
- call showframe
- if foreign
- mov al,4
- mov ah,0
- mov di,60
- mov bx,72+55+21
- call showframe
- endif
- pop bx
-
- mov bh,0
- add bx,bx
- mov es,traveltext
- mov si,[es:bx]
- add si,textstart
- call findnextcolon
-
- mov di,63
- if foreign
- mov bx,84+4
- else
- mov bx,84
- endif
- mov dl,191
- mov al,0
- mov ah,0
- call printdirect
- call worktoscreenm
-
- mov cx,500
- call hangonp
-
-afterinfo: mov pointermode,0
- mov pointerframe,0
- call putundercentre
- call worktoscreenm
-
-noinfo: ret
-
- endp
-
-
-
-
-Getundercentre proc near
-
- mov di,58
- mov bx,72
- mov ds,mapstore
- mov si,0
- mov cl,254
- mov ch,110
- call multiget
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Putundercentre proc near
-
- mov di,58
- mov bx,72
- mov ds,mapstore
- mov si,0
- mov cl,254
- mov ch,110
- call multiput
- ret
-
- endp
-
-
-
-
-
-
-
-Locationpic proc near
-
- call getdestinfo
- mov al,[es:si]
- push es si
- mov di,0
- cmp al,6
- jnc secondlot
- mov ds,tempgraphics
- add al,4
- jmp gotgraphic
-secondlot: sub al,6
- mov ds,tempgraphics2
-gotgraphic: add di,104
- mov bx,138+14
- mov ah,0
- call showframe
- pop si es
- mov al,destpos
- cmp al,reallocation
- jnz notinthisone
- mov al,3
- mov di,104
- mov bx,140+14
- mov ds,tempgraphics
- mov ah,0
- call showframe
-notinthisone: mov bl,destpos
- mov bh,0
- add bx,bx
- mov es,traveltext
- mov si,[es:bx]
- add si,textstart
- mov di,50
- mov bx,20
- mov dl,241
- mov al,0
- mov ah,0
- call printdirect
- ret
-
- endp
-
-
-
-
-Getdestinfo proc near
-
- mov al,destpos
- mov ah,0
- push ax
- mov dx,seg roomscango
- mov es,dx
- mov si,offset es:roomscango
- add si,ax
- mov cl,[es:si]
- pop ax
- push cx
- mov dx,seg roompics
- mov es,dx
- mov si,offset es:roompics
- add si,ax
- pop ax
- ret
-
- endp
-
-
-
-
-
-
-Showarrows proc near
-
- mov di,116-12
- mov bx,16
- mov ds,tempgraphics
- mov al,0
- mov ah,0
- call showframe
- mov di,226+12
- mov bx,16
- mov ds,tempgraphics
- mov al,1
- mov ah,0
- call showframe
- mov di,280
- mov bx,14
- mov ds,tempgraphics
- mov al,2
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Nextdest proc near
-
-duok: cmp commandtype,218
- jz alreadydu
- mov commandtype,218
- mov al,28
- call commandonly
-alreadydu: mov ax,mousebutton
- and ax,1
- jz nodu
- cmp ax,oldbutton
- jz nodu
-
-searchdestup: inc destpos
- cmp destpos,15
- jnz notlastdest
- mov destpos,0
-notlastdest: call getdestinfo
- cmp al,0
- jz searchdestup
-
- mov newtextline,1
- call deltextline
- call delpointer
- call showpanel
- call showman
- call showarrows
- call locationpic
- call undertextline
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
-nodu: ret
-
- endp
-
-
-
-
-
-
-
-Lastdest proc near
-
-ddok: cmp commandtype,219
- jz alreadydd
- mov commandtype,219
- mov al,29
- call commandonly
-alreadydd: mov ax,mousebutton
- and ax,1
- jz nodd
- cmp ax,oldbutton
- jz nodd
-
-searchdestdown: dec destpos
- cmp destpos,-1
- jnz notfirstdest
- mov destpos,15
-notfirstdest: call getdestinfo
- cmp al,0
- jz searchdestdown
-
- mov newtextline,1
- call deltextline
- call delpointer
- call showpanel
- call showman
- call showarrows
- call locationpic
- call undertextline
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
-nodd: ret
-
- endp
-
-
-
-
-
-
-
-
-Destselect proc near
-
- cmp commandtype,222
- jz alreadytrav
- mov commandtype,222
- mov al,30
- call commandonly
-alreadytrav: mov ax,mousebutton
- and ax,1
- jz notrav
- cmp ax,oldbutton
- jz notrav
-
- call getdestinfo
- mov al,destpos
- mov newlocation,al
-notrav: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Getlocation proc near
-
- mov ah,0
- mov bx,ax
- mov dx,seg roomscango
- mov es,dx
- add bx,offset es:roomscango
- mov al,[es:bx]
- ret
-
- endp
-
-
-Setlocation proc near ;makes a location accessable
-
- mov ah,0
- mov bx,ax
- mov dx,seg roomscango
- mov es,dx
- add bx,offset es:roomscango
- mov byte ptr [es:bx],1
- ret
-
- endp
-
-
-
-
-Resetlocation proc near ;makes a location inaccessable
-
- push ax
- cmp al,5
- jnz notdelhotel
- call purgealocation
- mov al,21
- call purgealocation
- mov al,22
- call purgealocation
- mov al,27
- call purgealocation
- jmp clearedlocations
-
-notdelhotel: cmp al,8
- jnz notdeltvstud
- call purgealocation
- mov al,28
- call purgealocation
- jmp clearedlocations
-
-notdeltvstud: cmp al,6
- jnz notdelsarters
- call purgealocation
- mov al,20
- call purgealocation
- mov al,25
- call purgealocation
- jmp clearedlocations
-
-notdelsarters: cmp al,13
- jnz notdelboathouse
- call purgealocation
- mov al,29
- call purgealocation
- jmp clearedlocations
-
-notdelboathouse:
-
-clearedlocations: pop ax
- mov ah,0
- mov bx,ax
- mov dx,seg roomscango
- mov es,dx
- add bx,offset es:roomscango
- mov byte ptr [es:bx],0
- ret
-
- endp
-
-
-
-
-Readdesticon proc near
-
- mov dx,offset cs:travelgraphic1
- call loadintotemp
-
- mov dx,offset cs:travelgraphic2
- call loadintotemp2
-
- mov dx,offset cs:icongraphics8
- call loadintotemp3
- ret
-
- endp
-
-
-
-
-Readcitypic proc near
-
- mov dx,offset cs:cityname
- call loadintotemp
- ret
-
- endp
-
-
-
-
-
+;----------------------------------------------------Choosing a new location----
+
+Newplace proc near
+
+ cmp needtotravel,1
+ jz istravel
+ cmp autolocation,-1
+ jnz isautoloc
+ ret
+
+isautoloc: mov al,autolocation
+ mov newlocation,al
+ mov autolocation,-1
+ ret
+
+istravel: mov needtotravel,0
+ call selectlocation
+ ret
+
+ endp
+
+
+
+
+Selectlocation proc near
+
+ mov inmaparea,0
+ call clearbeforeload
+ mov getback,0
+ mov pointerframe,22
+
+ call readcitypic
+ call showcity
+ call getridoftemp
+ call readdesticon
+ call loadtraveltext
+ call showpanel
+ call showman
+ call showarrows
+ call showexit
+ call locationpic
+ call undertextline
+ mov commandtype,255
+ call readmouse
+ mov pointerframe,0
+ call showpointer
+ call worktoscreen
+ mov al,9
+ mov ah,255
+ call playchannel0
+ mov newlocation,255
+
+select: call delpointer
+ call readmouse
+ call showpointer
+ call vsync
+ call dumppointer
+ call dumptextline
+ cmp getback,1
+ jz quittravel
+ mov bx,offset cs:destlist
+ call checkcoords
+ cmp newlocation,255
+ jz select
+ mov al,newlocation
+ cmp al,location
+ jz quittravel
+
+ call getridoftemp
+ call getridoftemp2
+ call getridoftemp3
+ mov es,traveltext
+ call deallocatemem
+ ret
+
+quittravel: mov al,reallocation ; was just location
+ mov newlocation,al
+ mov getback,0
+ call getridoftemp
+ call getridoftemp2
+ call getridoftemp3
+ mov es,traveltext
+ call deallocatemem
+ ret
+
+destlist: dw 238,258,4,44,nextdest
+ dw 104,124,4,44,lastdest
+ dw 280,308,4,44,lookatplace
+ dw 104,216,138,192,destselect
+ dw 273,320,157,198,getback1
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+ endp
+
+
+
+
+
+Showcity proc near
+
+ call clearwork
+ mov ds,tempgraphics
+ mov di,57
+ mov bx,32
+ mov al,0
+ mov ah,0
+ call showframe
+ mov ds,tempgraphics
+ mov di,120+57
+ mov bx,32
+ mov al,1
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+Lookatplace proc near
+
+ cmp commandtype,224
+ jz alreadyinfo
+ mov commandtype,224
+ mov al,27
+ call commandonly
+alreadyinfo: mov ax,mousebutton
+ and ax,1
+ jz noinfo
+ cmp ax,oldbutton
+ jz noinfo
+
+ mov bl,destpos
+ cmp bl,15
+ jnc noinfo
+
+ push bx
+ call delpointer
+ call deltextline
+ call getundercentre
+ mov ds,tempgraphics3
+ mov al,0
+ mov ah,0
+ mov di,60
+ mov bx,72
+ call showframe
+ mov al,4
+ mov ah,0
+ mov di,60
+ mov bx,72+55
+ call showframe
+ if foreign
+ mov al,4
+ mov ah,0
+ mov di,60
+ mov bx,72+55+21
+ call showframe
+ endif
+ pop bx
+
+ mov bh,0
+ add bx,bx
+ mov es,traveltext
+ mov si,[es:bx]
+ add si,textstart
+ call findnextcolon
+
+ mov di,63
+ if foreign
+ mov bx,84+4
+ else
+ mov bx,84
+ endif
+ mov dl,191
+ mov al,0
+ mov ah,0
+ call printdirect
+ call worktoscreenm
+
+ mov cx,500
+ call hangonp
+
+afterinfo: mov pointermode,0
+ mov pointerframe,0
+ call putundercentre
+ call worktoscreenm
+
+noinfo: ret
+
+ endp
+
+
+
+
+Getundercentre proc near
+
+ mov di,58
+ mov bx,72
+ mov ds,mapstore
+ mov si,0
+ mov cl,254
+ mov ch,110
+ call multiget
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Putundercentre proc near
+
+ mov di,58
+ mov bx,72
+ mov ds,mapstore
+ mov si,0
+ mov cl,254
+ mov ch,110
+ call multiput
+ ret
+
+ endp
+
+
+
+
+
+
+
+Locationpic proc near
+
+ call getdestinfo
+ mov al,[es:si]
+ push es si
+ mov di,0
+ cmp al,6
+ jnc secondlot
+ mov ds,tempgraphics
+ add al,4
+ jmp gotgraphic
+secondlot: sub al,6
+ mov ds,tempgraphics2
+gotgraphic: add di,104
+ mov bx,138+14
+ mov ah,0
+ call showframe
+ pop si es
+ mov al,destpos
+ cmp al,reallocation
+ jnz notinthisone
+ mov al,3
+ mov di,104
+ mov bx,140+14
+ mov ds,tempgraphics
+ mov ah,0
+ call showframe
+notinthisone: mov bl,destpos
+ mov bh,0
+ add bx,bx
+ mov es,traveltext
+ mov si,[es:bx]
+ add si,textstart
+ mov di,50
+ mov bx,20
+ mov dl,241
+ mov al,0
+ mov ah,0
+ call printdirect
+ ret
+
+ endp
+
+
+
+
+Getdestinfo proc near
+
+ mov al,destpos
+ mov ah,0
+ push ax
+ mov dx,seg roomscango
+ mov es,dx
+ mov si,offset es:roomscango
+ add si,ax
+ mov cl,[es:si]
+ pop ax
+ push cx
+ mov dx,seg roompics
+ mov es,dx
+ mov si,offset es:roompics
+ add si,ax
+ pop ax
+ ret
+
+ endp
+
+
+
+
+
+
+Showarrows proc near
+
+ mov di,116-12
+ mov bx,16
+ mov ds,tempgraphics
+ mov al,0
+ mov ah,0
+ call showframe
+ mov di,226+12
+ mov bx,16
+ mov ds,tempgraphics
+ mov al,1
+ mov ah,0
+ call showframe
+ mov di,280
+ mov bx,14
+ mov ds,tempgraphics
+ mov al,2
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Nextdest proc near
+
+duok: cmp commandtype,218
+ jz alreadydu
+ mov commandtype,218
+ mov al,28
+ call commandonly
+alreadydu: mov ax,mousebutton
+ and ax,1
+ jz nodu
+ cmp ax,oldbutton
+ jz nodu
+
+searchdestup: inc destpos
+ cmp destpos,15
+ jnz notlastdest
+ mov destpos,0
+notlastdest: call getdestinfo
+ cmp al,0
+ jz searchdestup
+
+ mov newtextline,1
+ call deltextline
+ call delpointer
+ call showpanel
+ call showman
+ call showarrows
+ call locationpic
+ call undertextline
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+nodu: ret
+
+ endp
+
+
+
+
+
+
+
+Lastdest proc near
+
+ddok: cmp commandtype,219
+ jz alreadydd
+ mov commandtype,219
+ mov al,29
+ call commandonly
+alreadydd: mov ax,mousebutton
+ and ax,1
+ jz nodd
+ cmp ax,oldbutton
+ jz nodd
+
+searchdestdown: dec destpos
+ cmp destpos,-1
+ jnz notfirstdest
+ mov destpos,15
+notfirstdest: call getdestinfo
+ cmp al,0
+ jz searchdestdown
+
+ mov newtextline,1
+ call deltextline
+ call delpointer
+ call showpanel
+ call showman
+ call showarrows
+ call locationpic
+ call undertextline
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+nodd: ret
+
+ endp
+
+
+
+
+
+
+
+
+Destselect proc near
+
+ cmp commandtype,222
+ jz alreadytrav
+ mov commandtype,222
+ mov al,30
+ call commandonly
+alreadytrav: mov ax,mousebutton
+ and ax,1
+ jz notrav
+ cmp ax,oldbutton
+ jz notrav
+
+ call getdestinfo
+ mov al,destpos
+ mov newlocation,al
+notrav: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Getlocation proc near
+
+ mov ah,0
+ mov bx,ax
+ mov dx,seg roomscango
+ mov es,dx
+ add bx,offset es:roomscango
+ mov al,[es:bx]
+ ret
+
+ endp
+
+
+Setlocation proc near ;makes a location accessable
+
+ mov ah,0
+ mov bx,ax
+ mov dx,seg roomscango
+ mov es,dx
+ add bx,offset es:roomscango
+ mov byte ptr [es:bx],1
+ ret
+
+ endp
+
+
+
+
+Resetlocation proc near ;makes a location inaccessable
+
+ push ax
+ cmp al,5
+ jnz notdelhotel
+ call purgealocation
+ mov al,21
+ call purgealocation
+ mov al,22
+ call purgealocation
+ mov al,27
+ call purgealocation
+ jmp clearedlocations
+
+notdelhotel: cmp al,8
+ jnz notdeltvstud
+ call purgealocation
+ mov al,28
+ call purgealocation
+ jmp clearedlocations
+
+notdeltvstud: cmp al,6
+ jnz notdelsarters
+ call purgealocation
+ mov al,20
+ call purgealocation
+ mov al,25
+ call purgealocation
+ jmp clearedlocations
+
+notdelsarters: cmp al,13
+ jnz notdelboathouse
+ call purgealocation
+ mov al,29
+ call purgealocation
+ jmp clearedlocations
+
+notdelboathouse:
+
+clearedlocations: pop ax
+ mov ah,0
+ mov bx,ax
+ mov dx,seg roomscango
+ mov es,dx
+ add bx,offset es:roomscango
+ mov byte ptr [es:bx],0
+ ret
+
+ endp
+
+
+
+
+Readdesticon proc near
+
+ mov dx,offset cs:travelgraphic1
+ call loadintotemp
+
+ mov dx,offset cs:travelgraphic2
+ call loadintotemp2
+
+ mov dx,offset cs:icongraphics8
+ call loadintotemp3
+ ret
+
+ endp
+
+
+
+
+Readcitypic proc near
+
+ mov dx,offset cs:cityname
+ call loadintotemp
+ ret
+
+ endp
+
+
+
+
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/object.asm b/devtools/tasmrecover/dreamweb/object.asm
index 19265bb4ac..93710d3c23 100644
--- a/devtools/tasmrecover/dreamweb/object.asm
+++ b/devtools/tasmrecover/dreamweb/object.asm
@@ -1,2608 +1,2608 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-;---------------------------------------------------------Inventory printer----
-
-Fillryan proc near
- ; cx=what to search for
- mov es,buffers
- mov di,ryaninvlist
- call findallryan
- mov si,ryaninvlist
- mov al,ryanpage
- mov ah,0
- mov cx,20
- mul cx
- add si,ax
-
- mov di,inventx
- mov bx,inventy
-
- mov cx,2
-ryanloop2: push cx di bx
- mov cx,5
-ryanloop1: push cx di bx
- mov ax,[es:si]
- add si,2
- push si es
- call obtoinv
- pop es si
- pop bx di cx
- add di,itempicsize
- loop ryanloop1
- pop bx di cx
- add bx,itempicsize
- loop ryanloop2
-
- call showryanpage
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Fillopen proc near
-
- call deltextline
-
- call getopenedsize ;find out how many slots
- cmp ah,4 ;ah=slots, al=size holdable
- jc lessthanapage
- mov ah,4
-lessthanapage: mov al,1
-
- push ax
- mov es,buffers
- mov di,openinvlist
- call findallopen
- mov si,openinvlist
- mov di,inventx
- mov bx,inventy+96
- pop cx
-
-openloop1: push cx di bx
- mov ax,[es:si]
- add si,2
- push si es
- cmp ch,cl
- jc nextopenslot
- call obtoinv
-nextopenslot: pop es si
- pop bx di cx
- add di,itempicsize
- inc cl
- cmp cl,5
- jnz openloop1
-
- call undertextline
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Findallryan proc near
-
- push di
- mov cx,30
- mov ax,0ffffh
- rep stosw
- pop di
-
- mov cl,4
- mov ds,extras
- mov bx,exdata
- mov ch,0
-findryanloop: cmp [bx+2],cl
- jnz notinryaninv
- cmp byte ptr [bx+3],255
- jnz notinryaninv
- mov al,[bx+4]
- mov ah,0
- push di
- add di,ax
- add di,ax
- mov al,ch
- mov ah,4 ;means it is an exchanged object ie:not free or set
- stosw
- pop di
-notinryaninv: add bx,16
- inc ch
- cmp ch,numexobjects
- jnz findryanloop
- ret
-
- endp
-
-
-
-
-
-
-
-Findallopen proc near
-
- push di
- mov cx,16
- mov ax,0ffffh
- rep stosw
- pop di
-
- mov cl,openedob
- mov dl,openedtype
- mov ds,extras
- mov bx,exdata
- mov ch,0
-findopen1: cmp [bx+3],cl
- jnz findopen2
- cmp [bx+2],dl
- jnz findopen2
- cmp openedtype,4
- jz noloccheck
- mov al,[bx+5]
- cmp al,reallocation
- jnz findopen2
-noloccheck: mov al,[bx+4]
- mov ah,0
- push di
- add di,ax
- add di,ax
- mov al,ch
- mov ah,4
- stosw
- pop di
-findopen2: add bx,16
- inc ch
- cmp ch,numexobjects
- jnz findopen1
-
- mov cl,openedob
- mov dl,openedtype
- push dx
- mov ds,freedat
- pop dx
- mov bx,0
- mov ch,0
-findopen1a: cmp [bx+3],cl
- jnz findopen2a
- cmp [bx+2],dl
- jnz findopen2a
- mov al,[bx+4]
- mov ah,0
- push di
- add di,ax
- add di,ax
- mov al,ch
- mov ah,2 ; means it's in a free ob
- stosw
- pop di
-findopen2a: add bx,16
- inc ch
- cmp ch,80
- jnz findopen1a
- ret
-
- endp
-
-
-
-
-
-
-Obtoinv proc near
-
- push bx es si ax
-
- push ax di bx
- mov ds,icons1
- sub di,2
- sub bx,1
- mov al,10
- mov ah,0
- call showframe
- pop bx di ax
- cmp al,255
- jz finishfill
-
- push bx di ax
- mov ds,extras
- cmp ah,4
- jz isanextra
- mov ds,freeframes
-isanextra: mov cl,al
- add al,al
- add al,cl
- inc al
- mov ah,128
- add bx,19
- add di,18
- call showframe
- pop ax di bx
-
- push bx
- call getanyaddir
- call isitworn
- pop bx
- jnz finishfill
- mov ds,icons1 ;Print wearing logo
- sub di,3
- sub bx,2
- mov al,7
- mov ah,0
- call showframe
-
-finishfill: pop ax si es bx
- ret
-
- endp
-
-
-
-
-
-Isitworn proc near ;zero if yes
-
- mov al,[es:bx+12]
- cmp al,"W"-"A"
- jnz notworn
- mov al,[es:bx+13]
- cmp al,"E"-"A"
-notworn: ret
-
- endp
-
-
-
-Makeworn proc near
-
- mov byte ptr [es:bx+12],"W"-"A"
- mov byte ptr [es:bx+13],"E"-"A"
- ret
-
- endp
-
-
-
-
-
-
-;-------------------------------------------------------Examining an object----
-
-Examineob proc near
-
- mov pointermode,0
- mov timecount,0
-
-examineagain: mov inmaparea,0
- mov examagain,0
- mov openedob,255
- mov openedtype,255
- mov invopen,0
- mov al,commandtype
- mov objecttype,al
- mov itemframe,0
- mov pointerframe,0
-
- call createpanel
- call showpanel
- call showman
- call showexit
- call obicons
- call obpicture
- call describeob
- call undertextline
-
- mov commandtype,255
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
-
-waitexam: ;call delpointer
- call readmouse
- call showpointer
- call vsync
- call dumppointer
- call dumptextline
- call delpointer
-
- mov getback,0
- mov bx,offset cs:examlist
- cmp invopen,0
- jz notuseinv
- mov bx,offset cs:invlist1
- cmp invopen,1
- jz notuseinv
- mov bx,offset cs:withlist1
-notuseinv: call checkcoords
- cmp examagain,0
- jz norex
- jmp examineagain
-norex: cmp getback,0
- jz waitexam
-
- mov pickup,0
- cmp watchingtime,0
- jnz iswatching
- cmp newlocation,255
- jnz justgetback
-
-iswatching: call makemainscreen
- mov invopen,0
- mov openedob,255
- ret
-
-justgetback: mov invopen,0
- mov openedob,255
- ret
-
-examlist: dw 273,320,157,198,getbackfromob
- dw 260,300,0,44,useobject
- dw 210,254,0,44,selectopenob
- dw 144,176,64,96,setpickup
- dw 0,50,50,200,examinventory
- dw 0,320,0,200,blank
- dw 0ffffh
-
-invlist1: dw 273,320,157,198,getbackfromob
- dw 255,294,0,24,dropobject
- dw inventx+167,inventx+167+(18*3),inventy-18,inventy-2,incryanpage
- dw inventx
-openchangesize: dw inventx+(4*itempicsize)
- dw inventy+100,inventy+100+itempicsize,useopened
- dw inventx,inventx+(5*itempicsize)
- dw inventy,inventy+(2*itempicsize),intoinv
- dw 0,320,0,200,blank
- dw 0ffffh
-
-withlist1: dw 273,320,157,198,getbackfromob
- dw inventx+167,inventx+167+(18*3),inventy-18,inventy-2,incryanpage
- dw inventx,inventx+(5*itempicsize)
- dw inventy,inventy+(2*itempicsize),selectob
- dw 0,320,0,200,blank
- dw 0ffffh
-
- endp
-
-
-
-
-
-
-Makemainscreen proc near
-
- call createpanel
- mov newobs,1
- call drawfloor
- call spriteupdate
- call printsprites
- call reelsonscreen
- call showicon
- call getunderzoom
- call undertextline
- mov commandtype,255
- call animpointer
- call worktoscreenm
- mov commandtype,200
- mov manisoffscreen,0
- ret
-
- endp
-
-
-
-
-Getbackfromob proc near
-
- cmp pickup,1
- jnz notheldob
- call blank
- ret
-notheldob: call getback1
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Incryanpage proc near
-
- cmp commandtype,222
- jz alreadyincryan
- mov commandtype,222
- mov al,31
- call commandonly
-alreadyincryan: mov ax,mousebutton
- cmp ax,oldbutton
- jz noincryan
- and ax,1
- jnz doincryan
-noincryan: ret
-
-doincryan: mov ax,mousex
- sub ax,inventx+167
- mov ryanpage,-1
-findnewpage: inc ryanpage
- sub ax,18
- jnc findnewpage
- call delpointer
- call fillryan
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-
-
-
-Openinv proc near
-
- mov invopen,1
- mov al,61
- mov di,inventx
- mov bx,inventy-10
- mov dl,240
- call printmessage
- call fillryan
- mov commandtype,255
- ret
-
- endp
-
-
-
-
-
-
-
-Showryanpage proc near
-
- mov ds,icons1
- mov di,inventx+167
- mov bx,inventy-12
- mov al,12
- mov ah,0
- call showframe
-
- mov al,13
- add al,ryanpage
- push ax
- mov al,ryanpage
- mov ah,0
- mov cx,18
- mul cx
- mov ds,icons1
- mov di,inventx+167
- add di,ax
- mov bx,inventy-12
- pop ax
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Openob proc near
-
- mov al,openedob
- mov ah,openedtype
- mov di,offset cs:commandline
- call copyname
-
- mov di,inventx
- mov bx,inventy+86
- mov al,62
- mov dl,240
- call printmessage
-
- mov di,lastxpos
- add di,5
- mov bx,inventy+86
- push cs
- pop es
- mov si,offset cs:commandline
- mov dl,220
- mov al,0
- mov ah,0
- call printdirect
-
- call fillopen
- call getopenedsize
- mov al,ah
- mov ah,0
- mov cx,itempicsize
- mul cx
- add ax,inventx
- mov bx,offset cs:openchangesize
- mov [cs:bx],ax
- ret
-
- endp
-
-
-
-
-
-
-Obicons proc near
-
- mov al,command
- call getanyad
- cmp al,255
- jz cantopenit
-
- mov ds,icons2
- mov di,210
- mov bx,1
- mov al,4
- mov ah,0
- call showframe
-
-cantopenit: mov ds,icons2
- mov di,260
- mov bx,1
- mov al,1
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-Examicon proc near
-
- mov ds,icons2
- mov di,254
- mov bx,5
- mov al,3
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-Obpicture proc near
-
- mov al,command
- mov ah,objecttype
- cmp ah,1
- jz setframe
- cmp ah,4
- jz exframe
-
- mov ds,freeframes
- mov di,160
- mov bx,68
- mov cl,al
- add al,al
- add al,cl
- inc al
- mov ah,128
- call showframe
- ret
-
-setframe: ret
-
-exframe: mov ds,extras
- mov di,160
- mov bx,68
- mov cl,al
- add al,al
- add al,cl
- inc al
- mov ah,128
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Describeob proc near
-
- call getobtextstart
-
- mov di,33
- mov bx,92
- if foreign
- cmp objecttype,1
- jnz notsetd
- mov bx,82
-notsetd: endif
- mov dl,241
- mov ah,16
- mov charshift,91+91
- call printdirect
- mov charshift,0
- mov di,36
- mov bx,104
- if foreign
- cmp objecttype,1
- jnz notsetd2
- mov bx,94
-notsetd2: endif
- mov dl,241
- mov ah,0
- call printdirect
- push bx
- call obsthatdothings
- pop bx
- call additionaltext
- ret
-
-
- endp
-
-
-
-
-
-Additionaltext proc near
-
- add bx,10
- push bx
- mov al,command
- mov ah,objecttype
- mov cl,"C"
- mov ch,"U"
- mov dl,"P"
- mov dh,"E"
- call compare
- jz emptycup
- mov al,command
- mov ah,objecttype
- mov cl,"C"
- mov ch,"U"
- mov dl,"P"
- mov dh,"F"
- call compare
- jz fullcup
- pop bx
- ret
-emptycup: mov al,40
- call findpuztext
- pop bx
- mov di,36
- mov dl,241
- mov ah,0
- call printdirect
- ret
-fullcup: mov al,39
- call findpuztext
- pop bx
- mov di,36
- mov dl,241
- mov ah,0
- call printdirect
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Obsthatdothings proc near
-
- mov al,command
- mov ah,objecttype
- mov cl,"M"
- mov ch,"E"
- mov dl,"M"
- mov dh,"B"
- call compare
- jnz notlouiscard
- mov al,4
- call getlocation
- cmp al,1
- jz seencard
- mov al,4
- call setlocation
- call lookatcard
-seencard: ret
-notlouiscard: ret
-
- endp
-
-
-
-
-
-
-
-Getobtextstart proc near
-
- mov es,freedesc
- mov si,freetextdat
- mov cx,freetext
- cmp objecttype,2
- jz describe
- mov es,setdesc
- mov si,settextdat
- mov cx,settext
- cmp objecttype,1
- jz describe
- mov es,extras
- mov si,extextdat
- mov cx,extext
-
-describe: mov al,command
- mov ah,0
- add ax,ax
- add si,ax
- mov ax,[es:si]
- add ax,cx
- mov si,ax
- mov bx,ax
-tryagain: push si
- call findnextcolon
- mov al,[es:si]
- mov cx,si
- pop si
- cmp objecttype,1
- jnz cantmakeoneup
- cmp al,0
- jz findsometext
- cmp al,":"
- jz findsometext
-cantmakeoneup: ret
-
-findsometext: call searchforsame
- jmp tryagain
- ret
-
- endp
-
-
-
-
-
-
-Searchforsame proc near
-
- mov si,cx
-searchagain: inc si
- mov al,[es:bx]
-search: cmp [es:si],al
- jz gotstartletter
- inc cx
- inc si
- cmp si,8000 ;arbitrary give-up
- jc search ;counter.
- mov si,bx
- pop ax
- ret
-
-gotstartletter: push bx si
-keepchecking: inc si
- inc bx
- mov al,[es:bx]
- mov ah,[es:si]
- cmp al,":"
- jz foundmatch
- cmp al,0
- jz foundmatch
- cmp al,ah
- jz keepchecking
- pop si bx
- jmp searchagain
-
-foundmatch: pop si bx
- ret
-
- endp
-
-
-
-
-
-
-
-;-----------------------------------------------------------Using an object----
-
-
-
-
-
-Findnextcolon proc near
-
-isntcolon: mov al,[es:si]
- inc si
- cmp al,0
- jz endofcolon
- cmp al,":"
- jnz isntcolon
-endofcolon: ret
-
- endp
-
-
-;------------------------------------------------------Taking, dropping etc----
-
-
-
-
-
-
-Inventory proc near
-
- cmp mandead,1
- jz iswatchinv
- cmp watchingtime,0
- jz notwatchinv
-iswatchinv: call blank
- ret
-notwatchinv: cmp commandtype,239
- jz alreadyopinv
- mov commandtype,239
- mov al,32
- call commandonly
-alreadyopinv: mov ax,mousebutton
- cmp ax,oldbutton
- jz cantopinv
- and ax,1
- jnz doopeninv
-cantopinv: ret
-
-doopeninv: mov timecount,0
- mov pointermode,0
- mov inmaparea,0
- call animpointer
- call createpanel
- call showpanel
- call examicon
- call showman
- call showexit
- call undertextline
- mov pickup,0
- mov invopen,2
- call openinv
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
- mov openedob,255
- jmp waitexam ; very naughty!
-
- endp
-
-
-
-
-
-
-Setpickup proc near
-
- cmp objecttype,1
- jz cantpick
- cmp objecttype,3
- jz cantpick
- call getanyad
- mov al,[es:bx+2]
- cmp al,4
- jnz canpick
-cantpick: call blank
- ret
-
-canpick: cmp commandtype,209
- jz alreadysp
- mov commandtype,209
-
- mov bl,command
- mov bh,objecttype
- mov al,33
- call commandwithob
-alreadysp: mov ax,mousebutton
- cmp ax,1
- jnz nosetpick
- cmp ax,oldbutton
- jnz dosetpick
-nosetpick: ret
-
-dosetpick: call createpanel
- call showpanel
- call showman
- call showexit
- call examicon
- mov pickup,1
- mov invopen,2
- cmp objecttype,4
- jz pickupexob
-
- mov al,command
- mov itemframe,al
- mov openedob,255
- call transfertoex
- mov itemframe,al
- mov objecttype,4
- call geteitherad
- mov byte ptr [es:bx+2],20 ; means it is in transit
- mov byte ptr [es:bx+3],255
- call openinv
- call worktoscreenm
- ret
-
-pickupexob: mov al,command
- mov itemframe,al
- mov openedob,255
- call openinv
- call worktoscreenm
- ret
-
- endp
-
-
-
-
-
-Examinventory proc near
-
- cmp commandtype,249
- jz alreadyexinv
- mov commandtype,249
- mov al,32
- call commandonly
-alreadyexinv: mov ax,mousebutton
- and ax,1
- jnz doexinv
- ret
-
-doexinv: call createpanel
- call showpanel
- call showman
- call showexit
- call examicon
- mov pickup,0
- mov invopen,2
- call openinv
- call worktoscreenm
- ret
-
- endp
-
-
-
-
-
-Reexfrominv proc near
-
- call findinvpos
- mov ax,[es:bx]
- mov commandtype,ah
- mov command,al
- mov examagain,1
- mov pointermode,0
- ret
-
- endp
-
-
-
-
-
-
-
-Reexfromopen proc near
-
- ret
- call findopenpos
- mov ax,[es:bx]
- mov commandtype,ah
- mov command,al
- mov examagain,1
- mov pointermode,0
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Swapwithinv proc near
-
- mov al,itemframe
- mov ah,objecttype
- cmp ax,oldsubject
- jnz difsub7
- cmp commandtype,243
- jz alreadyswap1
- mov commandtype,243
-
-difsub7: mov oldsubject,ax
- mov bx,ax
- mov al,34
- call commandwithob
-alreadyswap1: mov ax,mousebutton
- cmp ax,oldbutton
- jz cantswap1
- and ax,1
- jnz doswap1
-cantswap1: ret
-
-doswap1: mov ah,objecttype
- mov al,itemframe
- push ax
-
- call findinvpos
- mov ax,[es:bx]
- mov itemframe,al
- mov objecttype,ah
- call geteitherad
- mov byte ptr [es:bx+2],20 ; means unplaced object
- mov byte ptr [es:bx+3],255
- mov bl,itemframe
- mov bh,objecttype
-
- pop ax
- mov objecttype,ah
- mov itemframe,al
- push bx
-
- call findinvpos ;NONE OF THIS IS NEEDED
- call delpointer ;ONLY EXTRAS CAN BE IN
- mov al,itemframe
- call geteitherad
- mov byte ptr [es:bx+2],4
- mov byte ptr [es:bx+3],255
- mov al,lastinvpos
- mov [es:bx+4],al
-
- pop ax
- mov objecttype,ah
- mov itemframe,al
- call fillryan
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Swapwithopen proc near
-
- mov al,itemframe
- mov ah,objecttype
- cmp ax,oldsubject
- jnz difsub8
- cmp commandtype,242
- jz alreadyswap2
- mov commandtype,242
-
-difsub8: mov oldsubject,ax
- mov bx,ax
- mov al,34
- call commandwithob
-alreadyswap2: mov ax,mousebutton
- cmp ax,oldbutton
- jz cantswap2
- and ax,1
- jnz doswap2
-cantswap2: ret
-
-doswap2: call geteitherad
- call isitworn
- jnz notwornswap
- call wornerror
- ret
-notwornswap: call delpointer
- mov al,itemframe
- cmp al,openedob
- jnz isntsame2
- mov al,objecttype
- cmp al,openedtype
- jnz isntsame2
- call errormessage1
- ret
-
-isntsame2: call checkobjectsize
- cmp al,0
- jz sizeok2
- ret
-
-sizeok2: mov ah,objecttype
- mov al,itemframe
- push ax
-
- call findopenpos
- mov ax,[es:bx]
- mov itemframe,al
- mov objecttype,ah
-
- cmp ah,4
- jnz makeswapex
- call geteitherad
- mov byte ptr [es:bx+2],20
- mov byte ptr [es:bx+3],255
- jmp actuallyswap
-
-makeswapex: call transfertoex
- mov itemframe,al
- mov objecttype,4
- call geteitherad
- mov byte ptr [es:bx+2],20
- mov byte ptr [es:bx+3],255
-
-actuallyswap: mov bl,itemframe
- mov bh,objecttype
- pop ax
- mov objecttype,ah
- mov itemframe,al
- push bx
-
- call findopenpos
- call geteitherad
- mov al,openedtype
- mov byte ptr [es:bx+2],al
- mov al,openedob
- mov byte ptr [es:bx+3],al
- mov al,lastinvpos
- mov [es:bx+4],al
- mov al,reallocation
- mov [es:bx+5],al
-
- pop ax
- mov objecttype,ah
- mov itemframe,al
- call fillopen
- call fillryan
- call undertextline
- call readmouse
- call useopened
- call showpointer
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Intoinv proc near
-
- cmp pickup,0
- jnz notout
- call outofinv
- ret
-
-notout: call findinvpos
- mov ax,[es:bx]
- cmp al,255
- jz canplace1
- call swapwithinv
- ret
-
-canplace1: mov al,itemframe
- mov ah,objecttype
- cmp ax,oldsubject
- jnz difsub1
- cmp commandtype,220
- jz alreadyplce
- mov commandtype,220
-
-difsub1: mov oldsubject,ax
- mov bx,ax
- mov al,35
- call commandwithob
-alreadyplce: mov ax,mousebutton
- cmp ax,oldbutton
- jz notletgo2
- and ax,1
- jnz doplace
-notletgo2: ret
-
-doplace: call delpointer
- mov al,itemframe
- call getexad
- mov byte ptr [es:bx+2],4
- mov byte ptr [es:bx+3],255
- mov al,lastinvpos
- mov [es:bx+4],al
-
- mov pickup,0
- call fillryan
- call readmouse
- call showpointer
- call outofinv
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-
-
-
-Deletetaken proc near ;gets rid of objects that were
- ;transfered to exlist ages ago
- mov es,freedat
- mov ah,reallocation
- mov ds,extras
- mov si,exdata
-
- mov cx,numexobjects
-takenloop: mov al,[si+11]
- cmp al,ah
- jnz notinhere
- mov bl,[si+1]
- mov bh,0
- add bx,bx
- add bx,bx
- add bx,bx
- add bx,bx
- mov byte ptr [es:bx+2],254 ; was 255
-
-notinhere: add si,16
- loop takenloop
-
- ret
-
- endp
-
-
-
-
-
-
-Outofinv proc near
-
- call findinvpos
- mov ax,[es:bx]
- cmp al,255
- jnz canpick2
- call blank
- ret
-
-canpick2: mov bx,mousebutton
- cmp bx,2
- jnz canpick2a
- call reexfrominv
- ret
-
-canpick2a: cmp ax,oldsubject
- jnz difsub3
- cmp commandtype,221
- jz alreadygrab
- mov commandtype,221
-
-difsub3: mov oldsubject,ax
- mov bx,ax
- mov al,36
- call commandwithob
-alreadygrab: mov ax,mousebutton
- cmp ax,oldbutton
- jz notletgo
- and ax,1
- jnz dograb
-notletgo: ret
-
-dograb: call delpointer
- mov pickup,1
- call findinvpos
- mov ax,[es:bx]
- mov itemframe,al
- mov objecttype,ah
- call getexad
- mov byte ptr [es:bx+2],20 ; means unplaced object
- mov byte ptr [es:bx+3],255
- call fillryan
- call readmouse
- call showpointer
- call intoinv
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-
-Getfreead proc near
-
- mov ah,0
- mov cl,4
- shl ax,cl
- mov bx,ax
- mov es,freedat
- ret
-
- endp
-
-
-
-
-
-
-
-
-Getexad proc near
-
- mov ah,0
- mov bx,16
- mul bx
- mov bx,ax
- mov es,extras
- add bx,exdata
- ret
-
- endp
-
-
-
-
-
-
-Geteitherad proc near
-
- cmp objecttype,4
- jz isinexlist
- mov al,itemframe
- call getfreead
- ret
-isinexlist: mov al,itemframe
- call getexad
- ret
-
- endp
-
-
-
-
-
-
-Getanyad proc near ;nearly same as above
- ;but uses command
- cmp objecttype,4
- jz isex
- cmp objecttype,2
- jz isfree
- mov al,command
- call getsetad
- mov ax,[es:bx+4]
- ret
-isfree: mov al,command
- call getfreead
- mov ax,[es:bx+7]
- ret
-isex: mov al,command
- call getexad
- mov ax,[es:bx+7]
- ret
-
- endp
-
-
-
-Getanyaddir proc near ;nearly same as above
- ;but uses ax
- cmp ah,4
- jz isex3
- cmp ah,2
- jz isfree3
- call getsetad
- ret
-isfree3: call getfreead
- ret
-isex3: call getexad
- ret
-
- endp
-
-
-
-
-
-
-Getopenedsize proc near ;nearly same as above again
- ;but finds ad of opened ob
- cmp openedtype,4
- jz isex2
- cmp openedtype,2
- jz isfree2
- mov al,openedob
- call getsetad
- mov ax,[es:bx+3]
- ret
-isfree2: mov al,openedob
- call getfreead
- mov ax,[es:bx+7]
- ret
-isex2: mov al,openedob
- call getexad
- mov ax,[es:bx+7]
- ret
-
- endp
-
-
-
-
-
-
-
-
-Getsetad proc near
-
- mov ah,0
- mov bx,64
- mul bx
- mov bx,ax
- mov es,setdat
- ret
-
- endp
-
-
-
-
-
-
-Findinvpos proc near
-
- mov cx,mousex
- sub cx,inventx
- mov bx,-1
-findinv1: inc bx
- sub cx,itempicsize
- jnc findinv1
-
- mov cx,mousey
- sub cx,inventy
- sub bx,5
-findinv2: add bx,5
- sub cx,itempicsize
- jnc findinv2
-
- mov al,ryanpage
- mov ah,0
- mov cx,10
- mul cx
- add bx,ax
-
- mov al,bl
- mov lastinvpos,al
- add bx,bx
-
- mov es,buffers
- add bx,ryaninvlist
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Findopenpos proc near
-
- mov cx,mousex
- sub cx,inventx
- mov bx,-1
-findopenp1: inc bx
- sub cx,itempicsize
- jnc findopenp1
-
- mov al,bl
- mov lastinvpos,al
-
- add bx,bx
- mov es,buffers
- add bx,openinvlist
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-;--------------------------------------------------------Dropping an object----
-
-Dropobject proc near
-
- cmp commandtype,223
- jz alreadydrop
- mov commandtype,223
- cmp pickup,0
- jz blank
-
- mov bl,itemframe
- mov bh,objecttype
- mov al,37
- call commandwithob
-alreadydrop: mov ax,mousebutton
- cmp ax,oldbutton
- jz nodrop
- and ax,1
- jnz dodrop
-nodrop: ret
-
-dodrop: call geteitherad
- call isitworn
- jnz nowornerror
- call wornerror
- ret
-nowornerror: cmp reallocation,47
- jz nodrop2
- mov cl,ryanx
- add cl,12
- mov ch,ryany
- add ch,12
- call checkone
- cmp cl,2
- jc nodroperror
-nodrop2: call droperror
- ret
-nodroperror: cmp mapxsize,64
- jnz notinlift
- cmp mapysize,64
- jnz notinlift
- call droperror
- ret
-notinlift: mov al,itemframe
- mov ah,4
- mov cl,"G"
- mov ch,"U"
- mov dl,"N"
- mov dh,"A"
- call compare
- jz cantdrop
- mov al,itemframe
- mov ah,4
- mov cl,"S"
- mov ch,"H"
- mov dl,"L"
- mov dh,"D"
- call compare
- jz cantdrop
- mov objecttype,4
- mov al,itemframe
- call getexad
- mov byte ptr [es:bx+2],0
- mov al,ryanx
- add al,4
- mov cl,4
- shr al,cl
- add al,mapx
- mov ah,ryany
- add ah,8
- mov cl,4
- shr ah,cl
- add ah,mapy
- mov byte ptr [es:bx+3],al
- mov byte ptr [es:bx+5],ah
- mov al,ryanx
- add al,4
- and al,15
- mov ah,ryany
- add ah,8
- and ah,15
- mov byte ptr [es:bx+4],al
- mov byte ptr [es:bx+6],ah
- mov pickup,0
- mov al,reallocation
- mov [es:bx],al
- ret
-
- endp
-
-
-
-
-Droperror proc near
-
- mov commandtype,255
- call delpointer
- mov di,76
- mov bx,21
- mov al,56
- mov dl,240
- call printmessage
- call worktoscreenm
- mov cx,50
- call hangonp
- call showpanel
- call showman
- call examicon
- mov commandtype,255
- call worktoscreenm
- ret
-
- endp
-
-
-
-
-Cantdrop proc near
-
- mov commandtype,255
- call delpointer
- mov di,76
- mov bx,21
- mov al,24
- mov dl,240
- call printmessage
- call worktoscreenm
- mov cx,50
- call hangonp
- call showpanel
- call showman
- call examicon
- mov commandtype,255
- call worktoscreenm
- ret
-
- endp
-
-
-
-Wornerror proc near
-
- mov commandtype,255
- call delpointer
- mov di,76
- mov bx,21
- mov al,57
- mov dl,240
- call printmessage
- call worktoscreenm
- mov cx,50
- call hangonp
- call showpanel
- call showman
- call examicon
- mov commandtype,255
- call worktoscreenm
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Removeobfrominv proc near
-
- cmp command,100
- jz obnotexist
- call getanyad
- mov di,bx
- mov cl,command
- mov ch,0
- call deleteexobject
- ;mov byte ptr [es:bx+2],0
-obnotexist: ret
-
- endp
-
-
-
-
-;---------------------------------------------------------Opening an object----
-
-Selectopenob proc near
-
- mov al,command
- call getanyad
- cmp al,255
- jnz canopenit1
- call blank
- ret
-
-canopenit1: cmp commandtype,224
- jz alreadyopob
- mov commandtype,224
-
- mov bl,command
- mov bh,objecttype
- mov al,38
- call commandwithob
-alreadyopob: mov ax,mousebutton
- cmp ax,oldbutton
- jz noopenob
- and ax,1
- jnz doopenob
-noopenob: ret
-
-doopenob: mov al,command
- mov openedob,al
- mov al,objecttype
- mov openedtype,al
-
- call createpanel
- call showpanel
- call showman
- call examicon
- call showexit
- call openinv
- call openob
- call undertextline
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Useopened proc near
-
- cmp openedob,255
- jz cannotuseopen
- cmp pickup,0
- jnz notout2
- call outofopen
- ret
-
-notout2: call findopenpos
- mov ax,[es:bx]
- cmp al,255
- jz canplace3
- call swapwithopen
-cannotuseopen: ret
-
-canplace3: cmp pickup,1
- jz intoopen
- call blank
- ret
-
-intoopen: mov al,itemframe
- mov ah,objecttype
- cmp ax,oldsubject
- jnz difsub2
- cmp commandtype,227
- jz alreadyplc2
- mov commandtype,227
-
-difsub2: mov oldsubject,ax
- mov bx,ax
- mov al,35
- call commandwithob
-alreadyplc2: mov ax,mousebutton
- cmp ax,oldbutton
- jz notletgo3
- cmp ax,1
- jz doplace2
-notletgo3: ret
-
-doplace2: call geteitherad
- call isitworn
- jnz notworntoopen
- call wornerror
- ret
-notworntoopen: call delpointer
- mov al,itemframe
- cmp al,openedob
- jnz isntsame
- mov al,objecttype
- cmp al,openedtype
- jnz isntsame
- call errormessage1
- ret
-
-isntsame: call checkobjectsize
- cmp al,0
- jz sizeok1
- ret
-
-sizeok1: mov pickup,0
- mov al,itemframe
- call geteitherad
- mov al,openedtype
- mov byte ptr [es:bx+2],al
- mov al,openedob
- mov byte ptr [es:bx+3],al
- mov al,lastinvpos
- mov [es:bx+4],al
- mov al,reallocation
- mov [es:bx+5],al
- call fillopen
- call undertextline
- call readmouse
- call useopened
- call showpointer
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-
-
-
-
-Errormessage1 proc near
-
- call delpointer
- mov di,76
- mov bx,21
- mov al,58
- mov dl,240
- call printmessage
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
- mov cx,50
- call hangonp
- call showpanel
- call showman
- call examicon
- call readmouse
- call useopened
- call showpointer
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-
-
-
-Errormessage2 proc near
-
- mov commandtype,255
- call delpointer
- mov di,76
- mov bx,21
- mov al,59
- mov dl,240
- call printmessage
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
- mov cx,50
- call hangonp
- call showpanel
- call showman
- call examicon
- call readmouse
- call useopened
- call showpointer
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Errormessage3 proc near
-
- call delpointer
- mov di,76
- mov bx,21
- mov al,60
- mov dl,240
- call printmessage
- call worktoscreenm
- mov cx,50
- call hangonp
- call showpanel
- call showman
- call examicon
- call readmouse
- call useopened
- call showpointer
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-Checkobjectsize proc near
-
- call getopenedsize
- push ax
- mov al,itemframe
- call geteitherad
- mov al,[es:bx+9]
- pop cx
-
- cmp al,255 ;gives a size of 6 if no
- jnz notunsized ;size was defined in the editor
- mov al,6 ;could be a bad idea
-notunsized:
-
-
- cmp al,100
- jnc specialcase
- cmp cl,100
- jc isntspecial
- call errormessage3
- jmp sizewrong
-isntspecial: cmp cl,al
- jnc sizeok
-specialcase: sub al,100
- cmp cl,100
- jnc bothspecial
- cmp cl,al
- jnc sizeok
- call errormessage2
- jmp sizewrong
-bothspecial: sub cl,100
- cmp al,cl
- jz sizeok
- call errormessage3
-sizewrong: mov al,1
- ret
-sizeok: mov al,0
- ret
-
- endp
-
-
-
-
-
-
-
-
-Outofopen proc near
-
- cmp openedob,255
- jz cantuseopen
- call findopenpos
- mov ax,[es:bx]
- cmp al,255
- jnz canpick4
-cantuseopen: call blank
- ret
-
-canpick4: cmp ax,oldsubject
- jnz difsub4
- cmp commandtype,228
- jz alreadygrb
- mov commandtype,228
-
-difsub4: mov oldsubject,ax
- mov bx,ax
- mov al,36
- call commandwithob
-alreadygrb: mov ax,mousebutton
- cmp ax,oldbutton
- jz notletgo4
- cmp ax,1
- jz dogrb
- cmp ax,2
- jnz notletgo4
- call reexfromopen
-notletgo4: ret
-
-dogrb: call delpointer
- mov pickup,1
- call findopenpos
- mov ax,[es:bx]
- mov itemframe,al
- mov objecttype,ah
-
- cmp ah,4
- jnz makeintoex
- call geteitherad
- mov byte ptr [es:bx+2],20 ; means unplaced object
- mov byte ptr [es:bx+3],255
- jmp actuallyout
-
-makeintoex: call transfertoex
- mov itemframe,al
- mov objecttype,4
- call geteitherad
- mov byte ptr [es:bx+2],20 ; means it is in transit
- mov byte ptr [es:bx+3],255
-
-actuallyout: call fillopen
- call undertextline
- call readmouse
- call useopened
- call showpointer
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-
-;All Extra object code - adding and removing plus purge routines -------------
-
-
-
-
-
-
-Transfertoex proc near
-
- call emergencypurge
-
- call getexpos
- mov al,expos
- push ax
-
- push di
- mov al,itemframe
- mov ah,0
- mov bx,16
- mul bx
- mov ds,freedat
- mov si,ax
- mov cx,8
- rep movsw
- pop di
-
- mov al,reallocation
- mov [es:di],al
- mov [es:di+11],al
- mov al,itemframe
- mov [es:di+1],al
- mov byte ptr [es:di+2],4
- mov byte ptr [es:di+3],255
- mov al,lastinvpos
- mov [es:di+4],al
-
- mov al,itemframe
- mov itemtotran,al
- call transfermap
- call transferinv
- call transfertext
-
- mov al,itemframe
- mov ah,0
- mov bx,16
- mul bx
- mov ds,freedat
- mov si,ax
- mov byte ptr [si+2],254 ; was 255
- call pickupconts
-
- pop ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Pickupconts proc near
-
- mov al,[si+7]
- cmp al,255
- jz notopenable
-
- mov al,itemframe
- mov ah,objecttype
- mov dl,expos
- ;dec dl
- mov es,freedat
- mov bx,0
- mov cx,0
-pickupcontloop: push cx es bx dx ax
-
- cmp byte ptr [es:bx+2],ah
- jnz notinsidethis
- cmp byte ptr [es:bx+3],al
- jnz notinsidethis
-
- mov itemtotran,cl
- call transfercontoex
-
-notinsidethis: pop ax dx bx es cx
- add bx,16
- inc cx
- cmp cx,80
- jnz pickupcontloop
-
-notopenable: ret
-
- endp
-
-
-
-
-
-
-
-Transfercontoex proc near
-
- push es bx
-
- push dx es bx
- call getexpos
- pop si ds
-
- push di
- mov cx,8
- rep movsw
- pop di
- pop dx
-
- mov al,reallocation
- mov [es:di],al
- mov [es:di+11],al
- mov al,itemtotran
- mov [es:di+1],al
- mov [es:di+3],dl
- mov byte ptr [es:di+2],4
-
- call transfermap
- call transferinv
- call transfertext
- ;inc expos
-
- pop si ds
- mov byte ptr [si+2],255
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Transfertext proc near
-
- mov es,extras
- mov al,expos
- mov ah,0
- add ax,ax
- mov bx,extextdat
- add bx,ax
- mov di,extextpos
- mov [es:bx],di
- add di,extext
-
- mov al,itemtotran
- mov ah,0
- add ax,ax
- mov ds,freedesc
- mov bx,freetextdat
- add bx,ax
- mov si,freetext
- mov ax,[bx]
- add si,ax
-
-moretext: lodsb
- stosb
- inc extextpos
- cmp al,0
- jnz moretext
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Getexpos proc near
-
-
- mov es,extras
- mov al,0
- mov di,exdata
-tryanotherex: cmp byte ptr [es:di+2],255
- jz foundnewex
- add di,16
- inc al
- cmp al,numexobjects
- jnz tryanotherex
-foundnewex: mov expos,al
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Purgealocation proc near
-
- push ax
- mov es,extras
- mov di,exdata
- pop bx
- mov cx,0
-purgeloc: cmp bl,[es:di+0]
- jnz dontpurge
- cmp byte ptr [es:di+2],0
- jnz dontpurge
- push di es bx cx
- call deleteexobject
- pop cx bx es di
-dontpurge: add di,16
- inc cx
- cmp cx,numexobjects
- jnz purgeloc
- ret
-
- endp
-
-
-
-
-
-Emergencypurge proc near
-
-checkpurgeagain: mov ax,exframepos
- add ax,4000
- cmp ax,exframeslen
- jc notnearframeend
- call purgeanitem
- jmp checkpurgeagain
-notnearframeend: mov ax,extextpos
- add ax,400
- cmp ax,extextlen
- jc notneartextend
- call purgeanitem
- jmp checkpurgeagain
-notneartextend: ret
-
- endp
-
-
-
-
-
-
-Purgeanitem proc near
-
- mov es,extras ;first time try and
- mov di,exdata ;find an object in a
- mov bl,reallocation ;location other than
- mov cx,0 ;the one the player is
-lookforpurge: mov al,[es:di+2] ;in
- cmp al,0
- jnz cantpurge
- cmp byte ptr [es:di+12],2
- jz iscup
- cmp byte ptr [es:di+12],255
- jnz cantpurge
-iscup: cmp byte ptr [es:di+11],bl
- jz cantpurge
- call deleteexobject
- ret
-cantpurge: add di,16
- inc cx
- cmp cx,numexobjects
- jnz lookforpurge
-
- mov di,exdata
- mov bl,reallocation
- mov cx,0
-lookforpurge2: mov al,[es:di+2]
- cmp al,0
- jnz cantpurge2
- cmp byte ptr [es:di+12],255
- jnz cantpurge2
- call deleteexobject
- ret
-cantpurge2: add di,16
- inc cx
- cmp cx,numexobjects
- jnz lookforpurge2
- ret
-
- endp
-
-
-
-
-
-Deleteexobject proc near ;es:di holds data ad
- ;cx holds number
- push cx cx cx cx
- mov al,255
- mov cx,16
- rep stosb
- pop ax
- mov cl,al
- add al,al
- add al,cl
- call deleteexframe
- pop ax
- mov cl,al
- add al,al
- add al,cl
- inc al
- call deleteexframe
- pop ax
- call deleteextext
-
- pop bx
- mov bh,bl
- mov bl,4
- mov di,exdata
- mov cx,0
-deleteconts: cmp [es:di+2],bx
- jnz notinsideex
- push bx cx di
- call deleteexobject ;Oooh missus!
- pop di cx bx ;Recursive code!
-notinsideex: add di,16
- inc cx
- cmp cx,numexobjects
- jnz deleteconts
- ret
-
- endp
-
-
-
-
-
-Deleteexframe proc near ;al holds frame to delete
-
- mov di,exframedata
- mov ah,0
- add ax,ax
- add di,ax
- add ax,ax
- add di,ax
- mov al,[es:di]
- mov ah,0
- mov cl,[es:di+1]
- mov ch,0
- mul cx ;ax holds size of this
- ;frame in bytes
- mov si,[es:di+2]
- push si
- add si,exframes
- mov cx,exframeslen
- sub cx,[es:di+2]
- mov di,si ;di/si hold start of frame
- add si,ax ;si holds end of frame
- push ax
- push es
- pop ds
- rep movsb
- pop bx ;bx holds size now
- sub exframepos,bx
- pop si ;si holds start of frame
- ;(offset only)
- mov cx,numexobjects*3
- mov di,exframedata
-shuffleadsdown: mov ax,[es:di+2]
- cmp ax,si
- jc beforethisone
- sub ax,bx
-beforethisone: mov [es:di+2],ax
- add di,6
- loop shuffleadsdown
- ret
-
- endp
-
-
-
-
-Deleteextext proc near
-
- mov di,extextdat
- mov ah,0
- add ax,ax
- add di,ax
- mov ax,[es:di]
- mov si,ax
- mov di,ax
- add si,extext
- add di,extext
- mov ax,0
-findlenextext: mov cl,[es:si]
- inc ax
- inc si
- cmp cl,0
- jnz findlenextext
-
- mov cx,extextlen
- mov bx,si
- sub bx,extext
- push bx ax
- sub cx,bx
- rep movsb
- pop bx
- sub extextpos,bx
-
- pop si
- mov cx,numexobjects
- mov di,extextdat
-shuffletextads: mov ax,[es:di]
- cmp ax,si
- jc beforethistext
- sub ax,bx
-beforethistext: mov [es:di],ax
- add di,2
- loop shuffletextads
- ret
-
- endp
-
-
-
-
-
+;---------------------------------------------------------Inventory printer----
+
+Fillryan proc near
+ ; cx=what to search for
+ mov es,buffers
+ mov di,ryaninvlist
+ call findallryan
+ mov si,ryaninvlist
+ mov al,ryanpage
+ mov ah,0
+ mov cx,20
+ mul cx
+ add si,ax
+
+ mov di,inventx
+ mov bx,inventy
+
+ mov cx,2
+ryanloop2: push cx di bx
+ mov cx,5
+ryanloop1: push cx di bx
+ mov ax,[es:si]
+ add si,2
+ push si es
+ call obtoinv
+ pop es si
+ pop bx di cx
+ add di,itempicsize
+ loop ryanloop1
+ pop bx di cx
+ add bx,itempicsize
+ loop ryanloop2
+
+ call showryanpage
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Fillopen proc near
+
+ call deltextline
+
+ call getopenedsize ;find out how many slots
+ cmp ah,4 ;ah=slots, al=size holdable
+ jc lessthanapage
+ mov ah,4
+lessthanapage: mov al,1
+
+ push ax
+ mov es,buffers
+ mov di,openinvlist
+ call findallopen
+ mov si,openinvlist
+ mov di,inventx
+ mov bx,inventy+96
+ pop cx
+
+openloop1: push cx di bx
+ mov ax,[es:si]
+ add si,2
+ push si es
+ cmp ch,cl
+ jc nextopenslot
+ call obtoinv
+nextopenslot: pop es si
+ pop bx di cx
+ add di,itempicsize
+ inc cl
+ cmp cl,5
+ jnz openloop1
+
+ call undertextline
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Findallryan proc near
+
+ push di
+ mov cx,30
+ mov ax,0ffffh
+ rep stosw
+ pop di
+
+ mov cl,4
+ mov ds,extras
+ mov bx,exdata
+ mov ch,0
+findryanloop: cmp [bx+2],cl
+ jnz notinryaninv
+ cmp byte ptr [bx+3],255
+ jnz notinryaninv
+ mov al,[bx+4]
+ mov ah,0
+ push di
+ add di,ax
+ add di,ax
+ mov al,ch
+ mov ah,4 ;means it is an exchanged object ie:not free or set
+ stosw
+ pop di
+notinryaninv: add bx,16
+ inc ch
+ cmp ch,numexobjects
+ jnz findryanloop
+ ret
+
+ endp
+
+
+
+
+
+
+
+Findallopen proc near
+
+ push di
+ mov cx,16
+ mov ax,0ffffh
+ rep stosw
+ pop di
+
+ mov cl,openedob
+ mov dl,openedtype
+ mov ds,extras
+ mov bx,exdata
+ mov ch,0
+findopen1: cmp [bx+3],cl
+ jnz findopen2
+ cmp [bx+2],dl
+ jnz findopen2
+ cmp openedtype,4
+ jz noloccheck
+ mov al,[bx+5]
+ cmp al,reallocation
+ jnz findopen2
+noloccheck: mov al,[bx+4]
+ mov ah,0
+ push di
+ add di,ax
+ add di,ax
+ mov al,ch
+ mov ah,4
+ stosw
+ pop di
+findopen2: add bx,16
+ inc ch
+ cmp ch,numexobjects
+ jnz findopen1
+
+ mov cl,openedob
+ mov dl,openedtype
+ push dx
+ mov ds,freedat
+ pop dx
+ mov bx,0
+ mov ch,0
+findopen1a: cmp [bx+3],cl
+ jnz findopen2a
+ cmp [bx+2],dl
+ jnz findopen2a
+ mov al,[bx+4]
+ mov ah,0
+ push di
+ add di,ax
+ add di,ax
+ mov al,ch
+ mov ah,2 ; means it's in a free ob
+ stosw
+ pop di
+findopen2a: add bx,16
+ inc ch
+ cmp ch,80
+ jnz findopen1a
+ ret
+
+ endp
+
+
+
+
+
+
+Obtoinv proc near
+
+ push bx es si ax
+
+ push ax di bx
+ mov ds,icons1
+ sub di,2
+ sub bx,1
+ mov al,10
+ mov ah,0
+ call showframe
+ pop bx di ax
+ cmp al,255
+ jz finishfill
+
+ push bx di ax
+ mov ds,extras
+ cmp ah,4
+ jz isanextra
+ mov ds,freeframes
+isanextra: mov cl,al
+ add al,al
+ add al,cl
+ inc al
+ mov ah,128
+ add bx,19
+ add di,18
+ call showframe
+ pop ax di bx
+
+ push bx
+ call getanyaddir
+ call isitworn
+ pop bx
+ jnz finishfill
+ mov ds,icons1 ;Print wearing logo
+ sub di,3
+ sub bx,2
+ mov al,7
+ mov ah,0
+ call showframe
+
+finishfill: pop ax si es bx
+ ret
+
+ endp
+
+
+
+
+
+Isitworn proc near ;zero if yes
+
+ mov al,[es:bx+12]
+ cmp al,"W"-"A"
+ jnz notworn
+ mov al,[es:bx+13]
+ cmp al,"E"-"A"
+notworn: ret
+
+ endp
+
+
+
+Makeworn proc near
+
+ mov byte ptr [es:bx+12],"W"-"A"
+ mov byte ptr [es:bx+13],"E"-"A"
+ ret
+
+ endp
+
+
+
+
+
+
+;-------------------------------------------------------Examining an object----
+
+Examineob proc near
+
+ mov pointermode,0
+ mov timecount,0
+
+examineagain: mov inmaparea,0
+ mov examagain,0
+ mov openedob,255
+ mov openedtype,255
+ mov invopen,0
+ mov al,commandtype
+ mov objecttype,al
+ mov itemframe,0
+ mov pointerframe,0
+
+ call createpanel
+ call showpanel
+ call showman
+ call showexit
+ call obicons
+ call obpicture
+ call describeob
+ call undertextline
+
+ mov commandtype,255
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+
+waitexam: ;call delpointer
+ call readmouse
+ call showpointer
+ call vsync
+ call dumppointer
+ call dumptextline
+ call delpointer
+
+ mov getback,0
+ mov bx,offset cs:examlist
+ cmp invopen,0
+ jz notuseinv
+ mov bx,offset cs:invlist1
+ cmp invopen,1
+ jz notuseinv
+ mov bx,offset cs:withlist1
+notuseinv: call checkcoords
+ cmp examagain,0
+ jz norex
+ jmp examineagain
+norex: cmp getback,0
+ jz waitexam
+
+ mov pickup,0
+ cmp watchingtime,0
+ jnz iswatching
+ cmp newlocation,255
+ jnz justgetback
+
+iswatching: call makemainscreen
+ mov invopen,0
+ mov openedob,255
+ ret
+
+justgetback: mov invopen,0
+ mov openedob,255
+ ret
+
+examlist: dw 273,320,157,198,getbackfromob
+ dw 260,300,0,44,useobject
+ dw 210,254,0,44,selectopenob
+ dw 144,176,64,96,setpickup
+ dw 0,50,50,200,examinventory
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+invlist1: dw 273,320,157,198,getbackfromob
+ dw 255,294,0,24,dropobject
+ dw inventx+167,inventx+167+(18*3),inventy-18,inventy-2,incryanpage
+ dw inventx
+openchangesize: dw inventx+(4*itempicsize)
+ dw inventy+100,inventy+100+itempicsize,useopened
+ dw inventx,inventx+(5*itempicsize)
+ dw inventy,inventy+(2*itempicsize),intoinv
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+withlist1: dw 273,320,157,198,getbackfromob
+ dw inventx+167,inventx+167+(18*3),inventy-18,inventy-2,incryanpage
+ dw inventx,inventx+(5*itempicsize)
+ dw inventy,inventy+(2*itempicsize),selectob
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+ endp
+
+
+
+
+
+
+Makemainscreen proc near
+
+ call createpanel
+ mov newobs,1
+ call drawfloor
+ call spriteupdate
+ call printsprites
+ call reelsonscreen
+ call showicon
+ call getunderzoom
+ call undertextline
+ mov commandtype,255
+ call animpointer
+ call worktoscreenm
+ mov commandtype,200
+ mov manisoffscreen,0
+ ret
+
+ endp
+
+
+
+
+Getbackfromob proc near
+
+ cmp pickup,1
+ jnz notheldob
+ call blank
+ ret
+notheldob: call getback1
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Incryanpage proc near
+
+ cmp commandtype,222
+ jz alreadyincryan
+ mov commandtype,222
+ mov al,31
+ call commandonly
+alreadyincryan: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz noincryan
+ and ax,1
+ jnz doincryan
+noincryan: ret
+
+doincryan: mov ax,mousex
+ sub ax,inventx+167
+ mov ryanpage,-1
+findnewpage: inc ryanpage
+ sub ax,18
+ jnc findnewpage
+ call delpointer
+ call fillryan
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+
+
+
+Openinv proc near
+
+ mov invopen,1
+ mov al,61
+ mov di,inventx
+ mov bx,inventy-10
+ mov dl,240
+ call printmessage
+ call fillryan
+ mov commandtype,255
+ ret
+
+ endp
+
+
+
+
+
+
+
+Showryanpage proc near
+
+ mov ds,icons1
+ mov di,inventx+167
+ mov bx,inventy-12
+ mov al,12
+ mov ah,0
+ call showframe
+
+ mov al,13
+ add al,ryanpage
+ push ax
+ mov al,ryanpage
+ mov ah,0
+ mov cx,18
+ mul cx
+ mov ds,icons1
+ mov di,inventx+167
+ add di,ax
+ mov bx,inventy-12
+ pop ax
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Openob proc near
+
+ mov al,openedob
+ mov ah,openedtype
+ mov di,offset cs:commandline
+ call copyname
+
+ mov di,inventx
+ mov bx,inventy+86
+ mov al,62
+ mov dl,240
+ call printmessage
+
+ mov di,lastxpos
+ add di,5
+ mov bx,inventy+86
+ push cs
+ pop es
+ mov si,offset cs:commandline
+ mov dl,220
+ mov al,0
+ mov ah,0
+ call printdirect
+
+ call fillopen
+ call getopenedsize
+ mov al,ah
+ mov ah,0
+ mov cx,itempicsize
+ mul cx
+ add ax,inventx
+ mov bx,offset cs:openchangesize
+ mov [cs:bx],ax
+ ret
+
+ endp
+
+
+
+
+
+
+Obicons proc near
+
+ mov al,command
+ call getanyad
+ cmp al,255
+ jz cantopenit
+
+ mov ds,icons2
+ mov di,210
+ mov bx,1
+ mov al,4
+ mov ah,0
+ call showframe
+
+cantopenit: mov ds,icons2
+ mov di,260
+ mov bx,1
+ mov al,1
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+Examicon proc near
+
+ mov ds,icons2
+ mov di,254
+ mov bx,5
+ mov al,3
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+Obpicture proc near
+
+ mov al,command
+ mov ah,objecttype
+ cmp ah,1
+ jz setframe
+ cmp ah,4
+ jz exframe
+
+ mov ds,freeframes
+ mov di,160
+ mov bx,68
+ mov cl,al
+ add al,al
+ add al,cl
+ inc al
+ mov ah,128
+ call showframe
+ ret
+
+setframe: ret
+
+exframe: mov ds,extras
+ mov di,160
+ mov bx,68
+ mov cl,al
+ add al,al
+ add al,cl
+ inc al
+ mov ah,128
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Describeob proc near
+
+ call getobtextstart
+
+ mov di,33
+ mov bx,92
+ if foreign
+ cmp objecttype,1
+ jnz notsetd
+ mov bx,82
+notsetd: endif
+ mov dl,241
+ mov ah,16
+ mov charshift,91+91
+ call printdirect
+ mov charshift,0
+ mov di,36
+ mov bx,104
+ if foreign
+ cmp objecttype,1
+ jnz notsetd2
+ mov bx,94
+notsetd2: endif
+ mov dl,241
+ mov ah,0
+ call printdirect
+ push bx
+ call obsthatdothings
+ pop bx
+ call additionaltext
+ ret
+
+
+ endp
+
+
+
+
+
+Additionaltext proc near
+
+ add bx,10
+ push bx
+ mov al,command
+ mov ah,objecttype
+ mov cl,"C"
+ mov ch,"U"
+ mov dl,"P"
+ mov dh,"E"
+ call compare
+ jz emptycup
+ mov al,command
+ mov ah,objecttype
+ mov cl,"C"
+ mov ch,"U"
+ mov dl,"P"
+ mov dh,"F"
+ call compare
+ jz fullcup
+ pop bx
+ ret
+emptycup: mov al,40
+ call findpuztext
+ pop bx
+ mov di,36
+ mov dl,241
+ mov ah,0
+ call printdirect
+ ret
+fullcup: mov al,39
+ call findpuztext
+ pop bx
+ mov di,36
+ mov dl,241
+ mov ah,0
+ call printdirect
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Obsthatdothings proc near
+
+ mov al,command
+ mov ah,objecttype
+ mov cl,"M"
+ mov ch,"E"
+ mov dl,"M"
+ mov dh,"B"
+ call compare
+ jnz notlouiscard
+ mov al,4
+ call getlocation
+ cmp al,1
+ jz seencard
+ mov al,4
+ call setlocation
+ call lookatcard
+seencard: ret
+notlouiscard: ret
+
+ endp
+
+
+
+
+
+
+
+Getobtextstart proc near
+
+ mov es,freedesc
+ mov si,freetextdat
+ mov cx,freetext
+ cmp objecttype,2
+ jz describe
+ mov es,setdesc
+ mov si,settextdat
+ mov cx,settext
+ cmp objecttype,1
+ jz describe
+ mov es,extras
+ mov si,extextdat
+ mov cx,extext
+
+describe: mov al,command
+ mov ah,0
+ add ax,ax
+ add si,ax
+ mov ax,[es:si]
+ add ax,cx
+ mov si,ax
+ mov bx,ax
+tryagain: push si
+ call findnextcolon
+ mov al,[es:si]
+ mov cx,si
+ pop si
+ cmp objecttype,1
+ jnz cantmakeoneup
+ cmp al,0
+ jz findsometext
+ cmp al,":"
+ jz findsometext
+cantmakeoneup: ret
+
+findsometext: call searchforsame
+ jmp tryagain
+ ret
+
+ endp
+
+
+
+
+
+
+Searchforsame proc near
+
+ mov si,cx
+searchagain: inc si
+ mov al,[es:bx]
+search: cmp [es:si],al
+ jz gotstartletter
+ inc cx
+ inc si
+ cmp si,8000 ;arbitrary give-up
+ jc search ;counter.
+ mov si,bx
+ pop ax
+ ret
+
+gotstartletter: push bx si
+keepchecking: inc si
+ inc bx
+ mov al,[es:bx]
+ mov ah,[es:si]
+ cmp al,":"
+ jz foundmatch
+ cmp al,0
+ jz foundmatch
+ cmp al,ah
+ jz keepchecking
+ pop si bx
+ jmp searchagain
+
+foundmatch: pop si bx
+ ret
+
+ endp
+
+
+
+
+
+
+
+;-----------------------------------------------------------Using an object----
+
+
+
+
+
+Findnextcolon proc near
+
+isntcolon: mov al,[es:si]
+ inc si
+ cmp al,0
+ jz endofcolon
+ cmp al,":"
+ jnz isntcolon
+endofcolon: ret
+
+ endp
+
+
+;------------------------------------------------------Taking, dropping etc----
+
+
+
+
+
+
+Inventory proc near
+
+ cmp mandead,1
+ jz iswatchinv
+ cmp watchingtime,0
+ jz notwatchinv
+iswatchinv: call blank
+ ret
+notwatchinv: cmp commandtype,239
+ jz alreadyopinv
+ mov commandtype,239
+ mov al,32
+ call commandonly
+alreadyopinv: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz cantopinv
+ and ax,1
+ jnz doopeninv
+cantopinv: ret
+
+doopeninv: mov timecount,0
+ mov pointermode,0
+ mov inmaparea,0
+ call animpointer
+ call createpanel
+ call showpanel
+ call examicon
+ call showman
+ call showexit
+ call undertextline
+ mov pickup,0
+ mov invopen,2
+ call openinv
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+ mov openedob,255
+ jmp waitexam ; very naughty!
+
+ endp
+
+
+
+
+
+
+Setpickup proc near
+
+ cmp objecttype,1
+ jz cantpick
+ cmp objecttype,3
+ jz cantpick
+ call getanyad
+ mov al,[es:bx+2]
+ cmp al,4
+ jnz canpick
+cantpick: call blank
+ ret
+
+canpick: cmp commandtype,209
+ jz alreadysp
+ mov commandtype,209
+
+ mov bl,command
+ mov bh,objecttype
+ mov al,33
+ call commandwithob
+alreadysp: mov ax,mousebutton
+ cmp ax,1
+ jnz nosetpick
+ cmp ax,oldbutton
+ jnz dosetpick
+nosetpick: ret
+
+dosetpick: call createpanel
+ call showpanel
+ call showman
+ call showexit
+ call examicon
+ mov pickup,1
+ mov invopen,2
+ cmp objecttype,4
+ jz pickupexob
+
+ mov al,command
+ mov itemframe,al
+ mov openedob,255
+ call transfertoex
+ mov itemframe,al
+ mov objecttype,4
+ call geteitherad
+ mov byte ptr [es:bx+2],20 ; means it is in transit
+ mov byte ptr [es:bx+3],255
+ call openinv
+ call worktoscreenm
+ ret
+
+pickupexob: mov al,command
+ mov itemframe,al
+ mov openedob,255
+ call openinv
+ call worktoscreenm
+ ret
+
+ endp
+
+
+
+
+
+Examinventory proc near
+
+ cmp commandtype,249
+ jz alreadyexinv
+ mov commandtype,249
+ mov al,32
+ call commandonly
+alreadyexinv: mov ax,mousebutton
+ and ax,1
+ jnz doexinv
+ ret
+
+doexinv: call createpanel
+ call showpanel
+ call showman
+ call showexit
+ call examicon
+ mov pickup,0
+ mov invopen,2
+ call openinv
+ call worktoscreenm
+ ret
+
+ endp
+
+
+
+
+
+Reexfrominv proc near
+
+ call findinvpos
+ mov ax,[es:bx]
+ mov commandtype,ah
+ mov command,al
+ mov examagain,1
+ mov pointermode,0
+ ret
+
+ endp
+
+
+
+
+
+
+
+Reexfromopen proc near
+
+ ret
+ call findopenpos
+ mov ax,[es:bx]
+ mov commandtype,ah
+ mov command,al
+ mov examagain,1
+ mov pointermode,0
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Swapwithinv proc near
+
+ mov al,itemframe
+ mov ah,objecttype
+ cmp ax,oldsubject
+ jnz difsub7
+ cmp commandtype,243
+ jz alreadyswap1
+ mov commandtype,243
+
+difsub7: mov oldsubject,ax
+ mov bx,ax
+ mov al,34
+ call commandwithob
+alreadyswap1: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz cantswap1
+ and ax,1
+ jnz doswap1
+cantswap1: ret
+
+doswap1: mov ah,objecttype
+ mov al,itemframe
+ push ax
+
+ call findinvpos
+ mov ax,[es:bx]
+ mov itemframe,al
+ mov objecttype,ah
+ call geteitherad
+ mov byte ptr [es:bx+2],20 ; means unplaced object
+ mov byte ptr [es:bx+3],255
+ mov bl,itemframe
+ mov bh,objecttype
+
+ pop ax
+ mov objecttype,ah
+ mov itemframe,al
+ push bx
+
+ call findinvpos ;NONE OF THIS IS NEEDED
+ call delpointer ;ONLY EXTRAS CAN BE IN
+ mov al,itemframe
+ call geteitherad
+ mov byte ptr [es:bx+2],4
+ mov byte ptr [es:bx+3],255
+ mov al,lastinvpos
+ mov [es:bx+4],al
+
+ pop ax
+ mov objecttype,ah
+ mov itemframe,al
+ call fillryan
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Swapwithopen proc near
+
+ mov al,itemframe
+ mov ah,objecttype
+ cmp ax,oldsubject
+ jnz difsub8
+ cmp commandtype,242
+ jz alreadyswap2
+ mov commandtype,242
+
+difsub8: mov oldsubject,ax
+ mov bx,ax
+ mov al,34
+ call commandwithob
+alreadyswap2: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz cantswap2
+ and ax,1
+ jnz doswap2
+cantswap2: ret
+
+doswap2: call geteitherad
+ call isitworn
+ jnz notwornswap
+ call wornerror
+ ret
+notwornswap: call delpointer
+ mov al,itemframe
+ cmp al,openedob
+ jnz isntsame2
+ mov al,objecttype
+ cmp al,openedtype
+ jnz isntsame2
+ call errormessage1
+ ret
+
+isntsame2: call checkobjectsize
+ cmp al,0
+ jz sizeok2
+ ret
+
+sizeok2: mov ah,objecttype
+ mov al,itemframe
+ push ax
+
+ call findopenpos
+ mov ax,[es:bx]
+ mov itemframe,al
+ mov objecttype,ah
+
+ cmp ah,4
+ jnz makeswapex
+ call geteitherad
+ mov byte ptr [es:bx+2],20
+ mov byte ptr [es:bx+3],255
+ jmp actuallyswap
+
+makeswapex: call transfertoex
+ mov itemframe,al
+ mov objecttype,4
+ call geteitherad
+ mov byte ptr [es:bx+2],20
+ mov byte ptr [es:bx+3],255
+
+actuallyswap: mov bl,itemframe
+ mov bh,objecttype
+ pop ax
+ mov objecttype,ah
+ mov itemframe,al
+ push bx
+
+ call findopenpos
+ call geteitherad
+ mov al,openedtype
+ mov byte ptr [es:bx+2],al
+ mov al,openedob
+ mov byte ptr [es:bx+3],al
+ mov al,lastinvpos
+ mov [es:bx+4],al
+ mov al,reallocation
+ mov [es:bx+5],al
+
+ pop ax
+ mov objecttype,ah
+ mov itemframe,al
+ call fillopen
+ call fillryan
+ call undertextline
+ call readmouse
+ call useopened
+ call showpointer
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Intoinv proc near
+
+ cmp pickup,0
+ jnz notout
+ call outofinv
+ ret
+
+notout: call findinvpos
+ mov ax,[es:bx]
+ cmp al,255
+ jz canplace1
+ call swapwithinv
+ ret
+
+canplace1: mov al,itemframe
+ mov ah,objecttype
+ cmp ax,oldsubject
+ jnz difsub1
+ cmp commandtype,220
+ jz alreadyplce
+ mov commandtype,220
+
+difsub1: mov oldsubject,ax
+ mov bx,ax
+ mov al,35
+ call commandwithob
+alreadyplce: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz notletgo2
+ and ax,1
+ jnz doplace
+notletgo2: ret
+
+doplace: call delpointer
+ mov al,itemframe
+ call getexad
+ mov byte ptr [es:bx+2],4
+ mov byte ptr [es:bx+3],255
+ mov al,lastinvpos
+ mov [es:bx+4],al
+
+ mov pickup,0
+ call fillryan
+ call readmouse
+ call showpointer
+ call outofinv
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+
+
+
+Deletetaken proc near ;gets rid of objects that were
+ ;transfered to exlist ages ago
+ mov es,freedat
+ mov ah,reallocation
+ mov ds,extras
+ mov si,exdata
+
+ mov cx,numexobjects
+takenloop: mov al,[si+11]
+ cmp al,ah
+ jnz notinhere
+ mov bl,[si+1]
+ mov bh,0
+ add bx,bx
+ add bx,bx
+ add bx,bx
+ add bx,bx
+ mov byte ptr [es:bx+2],254 ; was 255
+
+notinhere: add si,16
+ loop takenloop
+
+ ret
+
+ endp
+
+
+
+
+
+
+Outofinv proc near
+
+ call findinvpos
+ mov ax,[es:bx]
+ cmp al,255
+ jnz canpick2
+ call blank
+ ret
+
+canpick2: mov bx,mousebutton
+ cmp bx,2
+ jnz canpick2a
+ call reexfrominv
+ ret
+
+canpick2a: cmp ax,oldsubject
+ jnz difsub3
+ cmp commandtype,221
+ jz alreadygrab
+ mov commandtype,221
+
+difsub3: mov oldsubject,ax
+ mov bx,ax
+ mov al,36
+ call commandwithob
+alreadygrab: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz notletgo
+ and ax,1
+ jnz dograb
+notletgo: ret
+
+dograb: call delpointer
+ mov pickup,1
+ call findinvpos
+ mov ax,[es:bx]
+ mov itemframe,al
+ mov objecttype,ah
+ call getexad
+ mov byte ptr [es:bx+2],20 ; means unplaced object
+ mov byte ptr [es:bx+3],255
+ call fillryan
+ call readmouse
+ call showpointer
+ call intoinv
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+
+Getfreead proc near
+
+ mov ah,0
+ mov cl,4
+ shl ax,cl
+ mov bx,ax
+ mov es,freedat
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Getexad proc near
+
+ mov ah,0
+ mov bx,16
+ mul bx
+ mov bx,ax
+ mov es,extras
+ add bx,exdata
+ ret
+
+ endp
+
+
+
+
+
+
+Geteitherad proc near
+
+ cmp objecttype,4
+ jz isinexlist
+ mov al,itemframe
+ call getfreead
+ ret
+isinexlist: mov al,itemframe
+ call getexad
+ ret
+
+ endp
+
+
+
+
+
+
+Getanyad proc near ;nearly same as above
+ ;but uses command
+ cmp objecttype,4
+ jz isex
+ cmp objecttype,2
+ jz isfree
+ mov al,command
+ call getsetad
+ mov ax,[es:bx+4]
+ ret
+isfree: mov al,command
+ call getfreead
+ mov ax,[es:bx+7]
+ ret
+isex: mov al,command
+ call getexad
+ mov ax,[es:bx+7]
+ ret
+
+ endp
+
+
+
+Getanyaddir proc near ;nearly same as above
+ ;but uses ax
+ cmp ah,4
+ jz isex3
+ cmp ah,2
+ jz isfree3
+ call getsetad
+ ret
+isfree3: call getfreead
+ ret
+isex3: call getexad
+ ret
+
+ endp
+
+
+
+
+
+
+Getopenedsize proc near ;nearly same as above again
+ ;but finds ad of opened ob
+ cmp openedtype,4
+ jz isex2
+ cmp openedtype,2
+ jz isfree2
+ mov al,openedob
+ call getsetad
+ mov ax,[es:bx+3]
+ ret
+isfree2: mov al,openedob
+ call getfreead
+ mov ax,[es:bx+7]
+ ret
+isex2: mov al,openedob
+ call getexad
+ mov ax,[es:bx+7]
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Getsetad proc near
+
+ mov ah,0
+ mov bx,64
+ mul bx
+ mov bx,ax
+ mov es,setdat
+ ret
+
+ endp
+
+
+
+
+
+
+Findinvpos proc near
+
+ mov cx,mousex
+ sub cx,inventx
+ mov bx,-1
+findinv1: inc bx
+ sub cx,itempicsize
+ jnc findinv1
+
+ mov cx,mousey
+ sub cx,inventy
+ sub bx,5
+findinv2: add bx,5
+ sub cx,itempicsize
+ jnc findinv2
+
+ mov al,ryanpage
+ mov ah,0
+ mov cx,10
+ mul cx
+ add bx,ax
+
+ mov al,bl
+ mov lastinvpos,al
+ add bx,bx
+
+ mov es,buffers
+ add bx,ryaninvlist
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Findopenpos proc near
+
+ mov cx,mousex
+ sub cx,inventx
+ mov bx,-1
+findopenp1: inc bx
+ sub cx,itempicsize
+ jnc findopenp1
+
+ mov al,bl
+ mov lastinvpos,al
+
+ add bx,bx
+ mov es,buffers
+ add bx,openinvlist
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+;--------------------------------------------------------Dropping an object----
+
+Dropobject proc near
+
+ cmp commandtype,223
+ jz alreadydrop
+ mov commandtype,223
+ cmp pickup,0
+ jz blank
+
+ mov bl,itemframe
+ mov bh,objecttype
+ mov al,37
+ call commandwithob
+alreadydrop: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz nodrop
+ and ax,1
+ jnz dodrop
+nodrop: ret
+
+dodrop: call geteitherad
+ call isitworn
+ jnz nowornerror
+ call wornerror
+ ret
+nowornerror: cmp reallocation,47
+ jz nodrop2
+ mov cl,ryanx
+ add cl,12
+ mov ch,ryany
+ add ch,12
+ call checkone
+ cmp cl,2
+ jc nodroperror
+nodrop2: call droperror
+ ret
+nodroperror: cmp mapxsize,64
+ jnz notinlift
+ cmp mapysize,64
+ jnz notinlift
+ call droperror
+ ret
+notinlift: mov al,itemframe
+ mov ah,4
+ mov cl,"G"
+ mov ch,"U"
+ mov dl,"N"
+ mov dh,"A"
+ call compare
+ jz cantdrop
+ mov al,itemframe
+ mov ah,4
+ mov cl,"S"
+ mov ch,"H"
+ mov dl,"L"
+ mov dh,"D"
+ call compare
+ jz cantdrop
+ mov objecttype,4
+ mov al,itemframe
+ call getexad
+ mov byte ptr [es:bx+2],0
+ mov al,ryanx
+ add al,4
+ mov cl,4
+ shr al,cl
+ add al,mapx
+ mov ah,ryany
+ add ah,8
+ mov cl,4
+ shr ah,cl
+ add ah,mapy
+ mov byte ptr [es:bx+3],al
+ mov byte ptr [es:bx+5],ah
+ mov al,ryanx
+ add al,4
+ and al,15
+ mov ah,ryany
+ add ah,8
+ and ah,15
+ mov byte ptr [es:bx+4],al
+ mov byte ptr [es:bx+6],ah
+ mov pickup,0
+ mov al,reallocation
+ mov [es:bx],al
+ ret
+
+ endp
+
+
+
+
+Droperror proc near
+
+ mov commandtype,255
+ call delpointer
+ mov di,76
+ mov bx,21
+ mov al,56
+ mov dl,240
+ call printmessage
+ call worktoscreenm
+ mov cx,50
+ call hangonp
+ call showpanel
+ call showman
+ call examicon
+ mov commandtype,255
+ call worktoscreenm
+ ret
+
+ endp
+
+
+
+
+Cantdrop proc near
+
+ mov commandtype,255
+ call delpointer
+ mov di,76
+ mov bx,21
+ mov al,24
+ mov dl,240
+ call printmessage
+ call worktoscreenm
+ mov cx,50
+ call hangonp
+ call showpanel
+ call showman
+ call examicon
+ mov commandtype,255
+ call worktoscreenm
+ ret
+
+ endp
+
+
+
+Wornerror proc near
+
+ mov commandtype,255
+ call delpointer
+ mov di,76
+ mov bx,21
+ mov al,57
+ mov dl,240
+ call printmessage
+ call worktoscreenm
+ mov cx,50
+ call hangonp
+ call showpanel
+ call showman
+ call examicon
+ mov commandtype,255
+ call worktoscreenm
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Removeobfrominv proc near
+
+ cmp command,100
+ jz obnotexist
+ call getanyad
+ mov di,bx
+ mov cl,command
+ mov ch,0
+ call deleteexobject
+ ;mov byte ptr [es:bx+2],0
+obnotexist: ret
+
+ endp
+
+
+
+
+;---------------------------------------------------------Opening an object----
+
+Selectopenob proc near
+
+ mov al,command
+ call getanyad
+ cmp al,255
+ jnz canopenit1
+ call blank
+ ret
+
+canopenit1: cmp commandtype,224
+ jz alreadyopob
+ mov commandtype,224
+
+ mov bl,command
+ mov bh,objecttype
+ mov al,38
+ call commandwithob
+alreadyopob: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz noopenob
+ and ax,1
+ jnz doopenob
+noopenob: ret
+
+doopenob: mov al,command
+ mov openedob,al
+ mov al,objecttype
+ mov openedtype,al
+
+ call createpanel
+ call showpanel
+ call showman
+ call examicon
+ call showexit
+ call openinv
+ call openob
+ call undertextline
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Useopened proc near
+
+ cmp openedob,255
+ jz cannotuseopen
+ cmp pickup,0
+ jnz notout2
+ call outofopen
+ ret
+
+notout2: call findopenpos
+ mov ax,[es:bx]
+ cmp al,255
+ jz canplace3
+ call swapwithopen
+cannotuseopen: ret
+
+canplace3: cmp pickup,1
+ jz intoopen
+ call blank
+ ret
+
+intoopen: mov al,itemframe
+ mov ah,objecttype
+ cmp ax,oldsubject
+ jnz difsub2
+ cmp commandtype,227
+ jz alreadyplc2
+ mov commandtype,227
+
+difsub2: mov oldsubject,ax
+ mov bx,ax
+ mov al,35
+ call commandwithob
+alreadyplc2: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz notletgo3
+ cmp ax,1
+ jz doplace2
+notletgo3: ret
+
+doplace2: call geteitherad
+ call isitworn
+ jnz notworntoopen
+ call wornerror
+ ret
+notworntoopen: call delpointer
+ mov al,itemframe
+ cmp al,openedob
+ jnz isntsame
+ mov al,objecttype
+ cmp al,openedtype
+ jnz isntsame
+ call errormessage1
+ ret
+
+isntsame: call checkobjectsize
+ cmp al,0
+ jz sizeok1
+ ret
+
+sizeok1: mov pickup,0
+ mov al,itemframe
+ call geteitherad
+ mov al,openedtype
+ mov byte ptr [es:bx+2],al
+ mov al,openedob
+ mov byte ptr [es:bx+3],al
+ mov al,lastinvpos
+ mov [es:bx+4],al
+ mov al,reallocation
+ mov [es:bx+5],al
+ call fillopen
+ call undertextline
+ call readmouse
+ call useopened
+ call showpointer
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Errormessage1 proc near
+
+ call delpointer
+ mov di,76
+ mov bx,21
+ mov al,58
+ mov dl,240
+ call printmessage
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+ mov cx,50
+ call hangonp
+ call showpanel
+ call showman
+ call examicon
+ call readmouse
+ call useopened
+ call showpointer
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+
+
+
+Errormessage2 proc near
+
+ mov commandtype,255
+ call delpointer
+ mov di,76
+ mov bx,21
+ mov al,59
+ mov dl,240
+ call printmessage
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+ mov cx,50
+ call hangonp
+ call showpanel
+ call showman
+ call examicon
+ call readmouse
+ call useopened
+ call showpointer
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Errormessage3 proc near
+
+ call delpointer
+ mov di,76
+ mov bx,21
+ mov al,60
+ mov dl,240
+ call printmessage
+ call worktoscreenm
+ mov cx,50
+ call hangonp
+ call showpanel
+ call showman
+ call examicon
+ call readmouse
+ call useopened
+ call showpointer
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+Checkobjectsize proc near
+
+ call getopenedsize
+ push ax
+ mov al,itemframe
+ call geteitherad
+ mov al,[es:bx+9]
+ pop cx
+
+ cmp al,255 ;gives a size of 6 if no
+ jnz notunsized ;size was defined in the editor
+ mov al,6 ;could be a bad idea
+notunsized:
+
+
+ cmp al,100
+ jnc specialcase
+ cmp cl,100
+ jc isntspecial
+ call errormessage3
+ jmp sizewrong
+isntspecial: cmp cl,al
+ jnc sizeok
+specialcase: sub al,100
+ cmp cl,100
+ jnc bothspecial
+ cmp cl,al
+ jnc sizeok
+ call errormessage2
+ jmp sizewrong
+bothspecial: sub cl,100
+ cmp al,cl
+ jz sizeok
+ call errormessage3
+sizewrong: mov al,1
+ ret
+sizeok: mov al,0
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Outofopen proc near
+
+ cmp openedob,255
+ jz cantuseopen
+ call findopenpos
+ mov ax,[es:bx]
+ cmp al,255
+ jnz canpick4
+cantuseopen: call blank
+ ret
+
+canpick4: cmp ax,oldsubject
+ jnz difsub4
+ cmp commandtype,228
+ jz alreadygrb
+ mov commandtype,228
+
+difsub4: mov oldsubject,ax
+ mov bx,ax
+ mov al,36
+ call commandwithob
+alreadygrb: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz notletgo4
+ cmp ax,1
+ jz dogrb
+ cmp ax,2
+ jnz notletgo4
+ call reexfromopen
+notletgo4: ret
+
+dogrb: call delpointer
+ mov pickup,1
+ call findopenpos
+ mov ax,[es:bx]
+ mov itemframe,al
+ mov objecttype,ah
+
+ cmp ah,4
+ jnz makeintoex
+ call geteitherad
+ mov byte ptr [es:bx+2],20 ; means unplaced object
+ mov byte ptr [es:bx+3],255
+ jmp actuallyout
+
+makeintoex: call transfertoex
+ mov itemframe,al
+ mov objecttype,4
+ call geteitherad
+ mov byte ptr [es:bx+2],20 ; means it is in transit
+ mov byte ptr [es:bx+3],255
+
+actuallyout: call fillopen
+ call undertextline
+ call readmouse
+ call useopened
+ call showpointer
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+
+;All Extra object code - adding and removing plus purge routines -------------
+
+
+
+
+
+
+Transfertoex proc near
+
+ call emergencypurge
+
+ call getexpos
+ mov al,expos
+ push ax
+
+ push di
+ mov al,itemframe
+ mov ah,0
+ mov bx,16
+ mul bx
+ mov ds,freedat
+ mov si,ax
+ mov cx,8
+ rep movsw
+ pop di
+
+ mov al,reallocation
+ mov [es:di],al
+ mov [es:di+11],al
+ mov al,itemframe
+ mov [es:di+1],al
+ mov byte ptr [es:di+2],4
+ mov byte ptr [es:di+3],255
+ mov al,lastinvpos
+ mov [es:di+4],al
+
+ mov al,itemframe
+ mov itemtotran,al
+ call transfermap
+ call transferinv
+ call transfertext
+
+ mov al,itemframe
+ mov ah,0
+ mov bx,16
+ mul bx
+ mov ds,freedat
+ mov si,ax
+ mov byte ptr [si+2],254 ; was 255
+ call pickupconts
+
+ pop ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Pickupconts proc near
+
+ mov al,[si+7]
+ cmp al,255
+ jz notopenable
+
+ mov al,itemframe
+ mov ah,objecttype
+ mov dl,expos
+ ;dec dl
+ mov es,freedat
+ mov bx,0
+ mov cx,0
+pickupcontloop: push cx es bx dx ax
+
+ cmp byte ptr [es:bx+2],ah
+ jnz notinsidethis
+ cmp byte ptr [es:bx+3],al
+ jnz notinsidethis
+
+ mov itemtotran,cl
+ call transfercontoex
+
+notinsidethis: pop ax dx bx es cx
+ add bx,16
+ inc cx
+ cmp cx,80
+ jnz pickupcontloop
+
+notopenable: ret
+
+ endp
+
+
+
+
+
+
+
+Transfercontoex proc near
+
+ push es bx
+
+ push dx es bx
+ call getexpos
+ pop si ds
+
+ push di
+ mov cx,8
+ rep movsw
+ pop di
+ pop dx
+
+ mov al,reallocation
+ mov [es:di],al
+ mov [es:di+11],al
+ mov al,itemtotran
+ mov [es:di+1],al
+ mov [es:di+3],dl
+ mov byte ptr [es:di+2],4
+
+ call transfermap
+ call transferinv
+ call transfertext
+ ;inc expos
+
+ pop si ds
+ mov byte ptr [si+2],255
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Transfertext proc near
+
+ mov es,extras
+ mov al,expos
+ mov ah,0
+ add ax,ax
+ mov bx,extextdat
+ add bx,ax
+ mov di,extextpos
+ mov [es:bx],di
+ add di,extext
+
+ mov al,itemtotran
+ mov ah,0
+ add ax,ax
+ mov ds,freedesc
+ mov bx,freetextdat
+ add bx,ax
+ mov si,freetext
+ mov ax,[bx]
+ add si,ax
+
+moretext: lodsb
+ stosb
+ inc extextpos
+ cmp al,0
+ jnz moretext
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Getexpos proc near
+
+
+ mov es,extras
+ mov al,0
+ mov di,exdata
+tryanotherex: cmp byte ptr [es:di+2],255
+ jz foundnewex
+ add di,16
+ inc al
+ cmp al,numexobjects
+ jnz tryanotherex
+foundnewex: mov expos,al
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Purgealocation proc near
+
+ push ax
+ mov es,extras
+ mov di,exdata
+ pop bx
+ mov cx,0
+purgeloc: cmp bl,[es:di+0]
+ jnz dontpurge
+ cmp byte ptr [es:di+2],0
+ jnz dontpurge
+ push di es bx cx
+ call deleteexobject
+ pop cx bx es di
+dontpurge: add di,16
+ inc cx
+ cmp cx,numexobjects
+ jnz purgeloc
+ ret
+
+ endp
+
+
+
+
+
+Emergencypurge proc near
+
+checkpurgeagain: mov ax,exframepos
+ add ax,4000
+ cmp ax,exframeslen
+ jc notnearframeend
+ call purgeanitem
+ jmp checkpurgeagain
+notnearframeend: mov ax,extextpos
+ add ax,400
+ cmp ax,extextlen
+ jc notneartextend
+ call purgeanitem
+ jmp checkpurgeagain
+notneartextend: ret
+
+ endp
+
+
+
+
+
+
+Purgeanitem proc near
+
+ mov es,extras ;first time try and
+ mov di,exdata ;find an object in a
+ mov bl,reallocation ;location other than
+ mov cx,0 ;the one the player is
+lookforpurge: mov al,[es:di+2] ;in
+ cmp al,0
+ jnz cantpurge
+ cmp byte ptr [es:di+12],2
+ jz iscup
+ cmp byte ptr [es:di+12],255
+ jnz cantpurge
+iscup: cmp byte ptr [es:di+11],bl
+ jz cantpurge
+ call deleteexobject
+ ret
+cantpurge: add di,16
+ inc cx
+ cmp cx,numexobjects
+ jnz lookforpurge
+
+ mov di,exdata
+ mov bl,reallocation
+ mov cx,0
+lookforpurge2: mov al,[es:di+2]
+ cmp al,0
+ jnz cantpurge2
+ cmp byte ptr [es:di+12],255
+ jnz cantpurge2
+ call deleteexobject
+ ret
+cantpurge2: add di,16
+ inc cx
+ cmp cx,numexobjects
+ jnz lookforpurge2
+ ret
+
+ endp
+
+
+
+
+
+Deleteexobject proc near ;es:di holds data ad
+ ;cx holds number
+ push cx cx cx cx
+ mov al,255
+ mov cx,16
+ rep stosb
+ pop ax
+ mov cl,al
+ add al,al
+ add al,cl
+ call deleteexframe
+ pop ax
+ mov cl,al
+ add al,al
+ add al,cl
+ inc al
+ call deleteexframe
+ pop ax
+ call deleteextext
+
+ pop bx
+ mov bh,bl
+ mov bl,4
+ mov di,exdata
+ mov cx,0
+deleteconts: cmp [es:di+2],bx
+ jnz notinsideex
+ push bx cx di
+ call deleteexobject ;Oooh missus!
+ pop di cx bx ;Recursive code!
+notinsideex: add di,16
+ inc cx
+ cmp cx,numexobjects
+ jnz deleteconts
+ ret
+
+ endp
+
+
+
+
+
+Deleteexframe proc near ;al holds frame to delete
+
+ mov di,exframedata
+ mov ah,0
+ add ax,ax
+ add di,ax
+ add ax,ax
+ add di,ax
+ mov al,[es:di]
+ mov ah,0
+ mov cl,[es:di+1]
+ mov ch,0
+ mul cx ;ax holds size of this
+ ;frame in bytes
+ mov si,[es:di+2]
+ push si
+ add si,exframes
+ mov cx,exframeslen
+ sub cx,[es:di+2]
+ mov di,si ;di/si hold start of frame
+ add si,ax ;si holds end of frame
+ push ax
+ push es
+ pop ds
+ rep movsb
+ pop bx ;bx holds size now
+ sub exframepos,bx
+ pop si ;si holds start of frame
+ ;(offset only)
+ mov cx,numexobjects*3
+ mov di,exframedata
+shuffleadsdown: mov ax,[es:di+2]
+ cmp ax,si
+ jc beforethisone
+ sub ax,bx
+beforethisone: mov [es:di+2],ax
+ add di,6
+ loop shuffleadsdown
+ ret
+
+ endp
+
+
+
+
+Deleteextext proc near
+
+ mov di,extextdat
+ mov ah,0
+ add ax,ax
+ add di,ax
+ mov ax,[es:di]
+ mov si,ax
+ mov di,ax
+ add si,extext
+ add di,extext
+ mov ax,0
+findlenextext: mov cl,[es:si]
+ inc ax
+ inc si
+ cmp cl,0
+ jnz findlenextext
+
+ mov cx,extextlen
+ mov bx,si
+ sub bx,extext
+ push bx ax
+ sub cx,bx
+ rep movsb
+ pop bx
+ sub extextpos,bx
+
+ pop si
+ mov cx,numexobjects
+ mov di,extextdat
+shuffletextads: mov ax,[es:di]
+ cmp ax,si
+ jc beforethistext
+ sub ax,bx
+beforethistext: mov [es:di],ax
+ add di,2
+ loop shuffletextads
+ ret
+
+ endp
+
+
+
+
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/print.asm b/devtools/tasmrecover/dreamweb/print.asm
index 2dbf616efc..e1c2d451c9 100644
--- a/devtools/tasmrecover/dreamweb/print.asm
+++ b/devtools/tasmrecover/dreamweb/print.asm
@@ -1,591 +1,591 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-Printchar proc near
-
- cmp al,255
- jz ignoreit
- push si bx di
- if foreign
- sub bx,3
- endif
- push ax
- sub al,32 ;"A"
- mov ah,0
- add ax,charshift
- call showframe
- pop ax di bx si
- cmp kerning,0
- jnz nokern
- call kernchars
-nokern: push cx
- mov ch,0
- add di,cx
- pop cx
- ;dec di
-ignoreit: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Kernchars proc near
-
- ;sub al,13
- cmp al,"a"
- jz iskern
- cmp al,"u"
- jz iskern
- ret
-iskern: cmp ah,"n"
- jz kernit
- cmp ah,"t"
- jz kernit
- cmp ah,"r"
- jz kernit
- cmp ah,"i"
- jz kernit
- cmp ah,"l"
- jz kernit
- ret
-kernit: dec cl
- ret
-
- endp
-
-
-
-
-
-
-;------------------------------------------------Proportional text printing----
-
-
-;Memprint proc near
-;
-; call usecharset1
-;
-; push ax bx cx dx es ds si di
-; call deltextline
-; pop di si ds es dx cx bx ax
-;
-; pop si
-; push cs
-; pop es
-; inc si
-; mov ds,currentset
-; mov di,textaddressx
-; mov bx,textaddressy
-; mov dl,textlen
-; mov al,0
-; mov ah,0
-; call printdirect
-; push si
-
-; mov newtextline,1
-; ret
-
-; endp
-
-
-
-
-
-
-;------------------------------------------------Proportional text printing----
-
-;Print proc near
-;
-; pop si
-; mov bx,[cs:si+2]
-; mov di,[cs:si+0]
-; mov dl,[cs:si+4]
-; add si,6
-; mov ds,currentset
-;
-;printloop2: push bx di dx
-; push es cs
-; pop es
-; call getnumber
-; pop es
-; mov ch,0
-;printloop1: mov ax,[cs:si]
-; inc si
-; cmp al,0
-; jz finishprint
-; push cx es
-; call modifychar
-; call printchar
-; pop es cx
-; loop printloop1
-; pop dx di bx
-; add bx,linespacing
-; jmp printloop2
-
-;finishprint: pop dx di bx
- ; push si
- ; ret
-
- ; endp
-
-
-
-
-
-
-
-
-
-Printslow proc near
-
- mov pointerframe,1
- mov pointermode,3
- mov ds,charset1
-printloopslow6: push bx di dx
- call getnumber
-
- mov ch,0
-printloopslow5: push cx si es
- mov ax,[es:si]
- push bx cx es si ds
- if foreign
- call modifychar
- endif
- call printboth
- pop ds si es cx bx
- mov ax,[es:si+1]
- inc si
- cmp al,0
- jz finishslow
- cmp al,":"
- jz finishslow
- cmp cl,1
- jz afterslow
- push di ds bx cx es si
- if foreign
- call modifychar
- endif
- mov charshift,91
- call printboth
- mov charshift,0
- pop si es cx bx ds di
- call waitframes
- cmp ax,0
- jz keepgoing
- cmp ax,oldbutton
- jnz finishslow2
-keepgoing: call waitframes
-noslow: cmp ax,0
- jz afterslow
- cmp ax,oldbutton
- jnz finishslow2 ;used to finish early
-afterslow: pop es si cx
- inc si
- loop printloopslow5
-
- pop dx di bx
- add bx,10
- jmp printloopslow6
-
-finishslow: pop es si cx dx di bx
- mov al,0
- ret
-
-finishslow2: pop es si cx dx di bx
- mov al,1
- ret
-
- endp
-
-
-
-Waitframes proc near
-
- push di bx es si ds
- call readmouse
- call showpointer
- call vsync
- call dumppointer
- call delpointer
- mov ax,mousebutton
- pop ds si es bx di
- ret
-
- endp
-
-
-
-
-Printboth proc near
-
- push ax cx bx
- push di
- call printchar
- pop ax
- push di
- mov di,ax
- call multidump
- pop di
- pop bx cx ax
- ret
-
- endp
-
-
-
-
-
-
-Printdirect proc near
-
- mov lastxpos,di
- mov ds,currentset
-printloop6: push bx di dx
- call getnumber
- mov ch,0
-printloop5: mov ax,[es:si]
- inc si
- cmp al,0
- jz finishdirct
- cmp al,":"
- jz finishdirct
- push cx es
- if foreign
- call modifychar
- endif
- call printchar
- mov lastxpos,di
- pop es cx
- loop printloop5
- pop dx di bx
- add bx,linespacing
- jmp printloop6
-
-finishdirct: pop dx di bx
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Monprint proc near
-
- mov kerning,1
- mov si,bx
- mov dl,166
- mov di,monadx
- mov bx,monady
- mov ds,tempcharset
-
-printloop8: push bx di dx
- call getnumber
- mov ch,0
-printloop7: mov al,[es:si]
- inc si
-
- cmp al,":"
- jz finishmon2
- cmp al,0
- jz finishmon
- cmp al,34
- jz finishmon
- cmp al,"="
- jz finishmon
- cmp al,"%"
- jnz nottrigger
- mov ah,[es:si]
- inc si
- inc si
- jmp finishmon
-nottrigger: push cx es
- if foreign
- call modifychar
- endif
- call printchar
- mov curslocx,di
- mov curslocy,bx
- mov maintimer,1
- call printcurs
-
- call vsync
- push si dx ds es bx di
- call lockmon
- pop di bx es ds dx si
- call delcurs
- pop es cx
- loop printloop7
-
-finishmon2: pop dx di bx
- call scrollmonitor
- mov curslocx,di
- jmp printloop8
-
-finishmon: pop dx di bx
- cmp al,"%"
- jnz nottrigger2
- mov lasttrigger,ah
-nottrigger2: mov curslocx,di
- call scrollmonitor
- mov bx,si
- mov kerning,0
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Getnumber proc near
-
- mov cx,0
- push si bx di ds es
- mov di,si
-
-wordloop: push cx dx
- call getnextword
- pop dx cx
- cmp al,1
- jz endoftext
- mov al,cl
- mov ah,0
- push bx
- mov bh,0
- add ax,bx
- pop bx
- sub ax,10
- mov dh,0
- cmp ax,dx
- jnc gotoverend
- add cl,bl
- add ch,bh
- jmp wordloop
-
-gotoverend: mov al,dl
- and al,1
- jz notcentre
- push cx
- mov al,dl
- and al,11111110b
- mov ah,0
- mov ch,0
- sub ax,cx
- add ax,20
- shr ax,1
- pop cx
- pop es ds di bx si
- add di,ax
- mov cl,ch
- ret
-notcentre: pop es ds di bx si
- mov cl,ch
- ret
-
-
-
-endoftext: mov al,cl
- mov ah,0
- push bx
- mov bh,0
- add ax,bx
- pop bx
- sub ax,10
- mov dh,0
- cmp ax,dx
- jnc gotoverend2
- add cl,bl
- add ch,bh
-
-gotoverend2: mov al,dl
- and al,1
- jz notcent2
- push cx
- mov al,dl
- and al,11111110b
- add al,2
- mov ah,0
- mov ch,0
- add ax,20
- sub ax,cx
- shr ax,1
- pop cx
- pop es ds di bx si
- add di,ax
- mov cl,ch
- ret
-notcent2: pop es ds di bx si
- mov cl,ch
- ret
-
- endp
-
-
-
-
-
-Getnextword proc near
-
- mov bx,0
-getloop: mov ax,[es:di]
- inc di
- inc bh
- cmp al,":"
- jz endall
- cmp al,0
- jz endall
- cmp al,32
- jz endword
- if foreign
- call modifychar
- endif
- cmp al,255
- jz getloop
- push ax
- sub al,32 ;"A"
- mov ah,0
- add ax,charshift
- add ax,ax
- mov si,ax
- add ax,ax
- add si,ax
- mov cl,[si+0]
- pop ax
- call kernchars
- add bl,cl
- ;dec bl
- jmp getloop
-
-endword: add bl,6
- mov al,0
- ret
-
-endall: add bl,6
- mov al,1
- ret
-
- endp
-
-
-
-
-
- if german
-
-Modifychar proc near
-
- cmp al,128
- jc nomod
- cmp al,129
- jnz not129
- mov al,"Z"+3
- ret
-not129: cmp al,132
- jnz not132
- mov al,"Z"+1
- ret
-not132: cmp al,142
- jnz not142
- mov al,"Z"+4
- ret
-not142: cmp al,154
- jnz not154
- mov al,"Z"+6
- ret
-not154: cmp al,225
- jnz not225
- mov al,"A"-1
- ret
-not225: cmp al,153
- jnz not153
- mov al,"Z"+5
- ret
-not153: cmp al,148
- jnz not148
- mov al,"Z"+2
- ret
-not148: ret
-
-nomod: ret
-
- endp
-
- endif
-
-
-
-
- if spanish
-
-Modifychar proc near
-
- cmp al,128
- jc nomod
- cmp al,160
- jnz not160
- mov al,"Z"+1
- ret
-not160: cmp al,130
- jnz not130
- mov al,"Z"+2
- ret
-not130: cmp al,161
- jnz not161
- mov al,"Z"+3
- ret
-not161: cmp al,162
- jnz not162
- mov al,"Z"+4
- ret
-not162: cmp al,163
- jnz not163
- mov al,"Z"+5
- ret
-not163: cmp al,164
- jnz not164
- mov al,"Z"+6
- ret
-not164: cmp al,165
- jnz not165
- mov al,","-1
- ret
-not165: cmp al,168
- jnz not168
- mov al,"A"-1
- ret
-not168: cmp al,173
- jnz not173
- mov al,"A"-4
- ret
-not173: cmp al,129
- jnz not129
- mov al,"A"-5
-not129: ret
-
-nomod: ret
-
- endp
-
- endif
+Printchar proc near
+
+ cmp al,255
+ jz ignoreit
+ push si bx di
+ if foreign
+ sub bx,3
+ endif
+ push ax
+ sub al,32 ;"A"
+ mov ah,0
+ add ax,charshift
+ call showframe
+ pop ax di bx si
+ cmp kerning,0
+ jnz nokern
+ call kernchars
+nokern: push cx
+ mov ch,0
+ add di,cx
+ pop cx
+ ;dec di
+ignoreit: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Kernchars proc near
+
+ ;sub al,13
+ cmp al,"a"
+ jz iskern
+ cmp al,"u"
+ jz iskern
+ ret
+iskern: cmp ah,"n"
+ jz kernit
+ cmp ah,"t"
+ jz kernit
+ cmp ah,"r"
+ jz kernit
+ cmp ah,"i"
+ jz kernit
+ cmp ah,"l"
+ jz kernit
+ ret
+kernit: dec cl
+ ret
+
+ endp
+
+
+
+
+
+
+;------------------------------------------------Proportional text printing----
+
+
+;Memprint proc near
+;
+; call usecharset1
+;
+; push ax bx cx dx es ds si di
+; call deltextline
+; pop di si ds es dx cx bx ax
+;
+; pop si
+; push cs
+; pop es
+; inc si
+; mov ds,currentset
+; mov di,textaddressx
+; mov bx,textaddressy
+; mov dl,textlen
+; mov al,0
+; mov ah,0
+; call printdirect
+; push si
+
+; mov newtextline,1
+; ret
+
+; endp
+
+
+
+
+
+
+;------------------------------------------------Proportional text printing----
+
+;Print proc near
+;
+; pop si
+; mov bx,[cs:si+2]
+; mov di,[cs:si+0]
+; mov dl,[cs:si+4]
+; add si,6
+; mov ds,currentset
+;
+;printloop2: push bx di dx
+; push es cs
+; pop es
+; call getnumber
+; pop es
+; mov ch,0
+;printloop1: mov ax,[cs:si]
+; inc si
+; cmp al,0
+; jz finishprint
+; push cx es
+; call modifychar
+; call printchar
+; pop es cx
+; loop printloop1
+; pop dx di bx
+; add bx,linespacing
+; jmp printloop2
+
+;finishprint: pop dx di bx
+ ; push si
+ ; ret
+
+ ; endp
+
+
+
+
+
+
+
+
+
+Printslow proc near
+
+ mov pointerframe,1
+ mov pointermode,3
+ mov ds,charset1
+printloopslow6: push bx di dx
+ call getnumber
+
+ mov ch,0
+printloopslow5: push cx si es
+ mov ax,[es:si]
+ push bx cx es si ds
+ if foreign
+ call modifychar
+ endif
+ call printboth
+ pop ds si es cx bx
+ mov ax,[es:si+1]
+ inc si
+ cmp al,0
+ jz finishslow
+ cmp al,":"
+ jz finishslow
+ cmp cl,1
+ jz afterslow
+ push di ds bx cx es si
+ if foreign
+ call modifychar
+ endif
+ mov charshift,91
+ call printboth
+ mov charshift,0
+ pop si es cx bx ds di
+ call waitframes
+ cmp ax,0
+ jz keepgoing
+ cmp ax,oldbutton
+ jnz finishslow2
+keepgoing: call waitframes
+noslow: cmp ax,0
+ jz afterslow
+ cmp ax,oldbutton
+ jnz finishslow2 ;used to finish early
+afterslow: pop es si cx
+ inc si
+ loop printloopslow5
+
+ pop dx di bx
+ add bx,10
+ jmp printloopslow6
+
+finishslow: pop es si cx dx di bx
+ mov al,0
+ ret
+
+finishslow2: pop es si cx dx di bx
+ mov al,1
+ ret
+
+ endp
+
+
+
+Waitframes proc near
+
+ push di bx es si ds
+ call readmouse
+ call showpointer
+ call vsync
+ call dumppointer
+ call delpointer
+ mov ax,mousebutton
+ pop ds si es bx di
+ ret
+
+ endp
+
+
+
+
+Printboth proc near
+
+ push ax cx bx
+ push di
+ call printchar
+ pop ax
+ push di
+ mov di,ax
+ call multidump
+ pop di
+ pop bx cx ax
+ ret
+
+ endp
+
+
+
+
+
+
+Printdirect proc near
+
+ mov lastxpos,di
+ mov ds,currentset
+printloop6: push bx di dx
+ call getnumber
+ mov ch,0
+printloop5: mov ax,[es:si]
+ inc si
+ cmp al,0
+ jz finishdirct
+ cmp al,":"
+ jz finishdirct
+ push cx es
+ if foreign
+ call modifychar
+ endif
+ call printchar
+ mov lastxpos,di
+ pop es cx
+ loop printloop5
+ pop dx di bx
+ add bx,linespacing
+ jmp printloop6
+
+finishdirct: pop dx di bx
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Monprint proc near
+
+ mov kerning,1
+ mov si,bx
+ mov dl,166
+ mov di,monadx
+ mov bx,monady
+ mov ds,tempcharset
+
+printloop8: push bx di dx
+ call getnumber
+ mov ch,0
+printloop7: mov al,[es:si]
+ inc si
+
+ cmp al,":"
+ jz finishmon2
+ cmp al,0
+ jz finishmon
+ cmp al,34
+ jz finishmon
+ cmp al,"="
+ jz finishmon
+ cmp al,"%"
+ jnz nottrigger
+ mov ah,[es:si]
+ inc si
+ inc si
+ jmp finishmon
+nottrigger: push cx es
+ if foreign
+ call modifychar
+ endif
+ call printchar
+ mov curslocx,di
+ mov curslocy,bx
+ mov maintimer,1
+ call printcurs
+
+ call vsync
+ push si dx ds es bx di
+ call lockmon
+ pop di bx es ds dx si
+ call delcurs
+ pop es cx
+ loop printloop7
+
+finishmon2: pop dx di bx
+ call scrollmonitor
+ mov curslocx,di
+ jmp printloop8
+
+finishmon: pop dx di bx
+ cmp al,"%"
+ jnz nottrigger2
+ mov lasttrigger,ah
+nottrigger2: mov curslocx,di
+ call scrollmonitor
+ mov bx,si
+ mov kerning,0
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Getnumber proc near
+
+ mov cx,0
+ push si bx di ds es
+ mov di,si
+
+wordloop: push cx dx
+ call getnextword
+ pop dx cx
+ cmp al,1
+ jz endoftext
+ mov al,cl
+ mov ah,0
+ push bx
+ mov bh,0
+ add ax,bx
+ pop bx
+ sub ax,10
+ mov dh,0
+ cmp ax,dx
+ jnc gotoverend
+ add cl,bl
+ add ch,bh
+ jmp wordloop
+
+gotoverend: mov al,dl
+ and al,1
+ jz notcentre
+ push cx
+ mov al,dl
+ and al,11111110b
+ mov ah,0
+ mov ch,0
+ sub ax,cx
+ add ax,20
+ shr ax,1
+ pop cx
+ pop es ds di bx si
+ add di,ax
+ mov cl,ch
+ ret
+notcentre: pop es ds di bx si
+ mov cl,ch
+ ret
+
+
+
+endoftext: mov al,cl
+ mov ah,0
+ push bx
+ mov bh,0
+ add ax,bx
+ pop bx
+ sub ax,10
+ mov dh,0
+ cmp ax,dx
+ jnc gotoverend2
+ add cl,bl
+ add ch,bh
+
+gotoverend2: mov al,dl
+ and al,1
+ jz notcent2
+ push cx
+ mov al,dl
+ and al,11111110b
+ add al,2
+ mov ah,0
+ mov ch,0
+ add ax,20
+ sub ax,cx
+ shr ax,1
+ pop cx
+ pop es ds di bx si
+ add di,ax
+ mov cl,ch
+ ret
+notcent2: pop es ds di bx si
+ mov cl,ch
+ ret
+
+ endp
+
+
+
+
+
+Getnextword proc near
+
+ mov bx,0
+getloop: mov ax,[es:di]
+ inc di
+ inc bh
+ cmp al,":"
+ jz endall
+ cmp al,0
+ jz endall
+ cmp al,32
+ jz endword
+ if foreign
+ call modifychar
+ endif
+ cmp al,255
+ jz getloop
+ push ax
+ sub al,32 ;"A"
+ mov ah,0
+ add ax,charshift
+ add ax,ax
+ mov si,ax
+ add ax,ax
+ add si,ax
+ mov cl,[si+0]
+ pop ax
+ call kernchars
+ add bl,cl
+ ;dec bl
+ jmp getloop
+
+endword: add bl,6
+ mov al,0
+ ret
+
+endall: add bl,6
+ mov al,1
+ ret
+
+ endp
+
+
+
+
+
+ if german
+
+Modifychar proc near
+
+ cmp al,128
+ jc nomod
+ cmp al,129
+ jnz not129
+ mov al,"Z"+3
+ ret
+not129: cmp al,132
+ jnz not132
+ mov al,"Z"+1
+ ret
+not132: cmp al,142
+ jnz not142
+ mov al,"Z"+4
+ ret
+not142: cmp al,154
+ jnz not154
+ mov al,"Z"+6
+ ret
+not154: cmp al,225
+ jnz not225
+ mov al,"A"-1
+ ret
+not225: cmp al,153
+ jnz not153
+ mov al,"Z"+5
+ ret
+not153: cmp al,148
+ jnz not148
+ mov al,"Z"+2
+ ret
+not148: ret
+
+nomod: ret
+
+ endp
+
+ endif
+
+
+
+
+ if spanish
+
+Modifychar proc near
+
+ cmp al,128
+ jc nomod
+ cmp al,160
+ jnz not160
+ mov al,"Z"+1
+ ret
+not160: cmp al,130
+ jnz not130
+ mov al,"Z"+2
+ ret
+not130: cmp al,161
+ jnz not161
+ mov al,"Z"+3
+ ret
+not161: cmp al,162
+ jnz not162
+ mov al,"Z"+4
+ ret
+not162: cmp al,163
+ jnz not163
+ mov al,"Z"+5
+ ret
+not163: cmp al,164
+ jnz not164
+ mov al,"Z"+6
+ ret
+not164: cmp al,165
+ jnz not165
+ mov al,","-1
+ ret
+not165: cmp al,168
+ jnz not168
+ mov al,"A"-1
+ ret
+not168: cmp al,173
+ jnz not173
+ mov al,"A"-4
+ ret
+not173: cmp al,129
+ jnz not129
+ mov al,"A"-5
+not129: ret
+
+nomod: ret
+
+ endp
+
+ endif
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/saveload.asm b/devtools/tasmrecover/dreamweb/saveload.asm
index a814c50bd6..f10d87149d 100644
--- a/devtools/tasmrecover/dreamweb/saveload.asm
+++ b/devtools/tasmrecover/dreamweb/saveload.asm
@@ -1,1495 +1,1495 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-
-
-Zoomonoff proc near
-
- cmp watchingtime,0
- jnz blank
- cmp pointermode,2
- jz blank
- cmp commandtype,222
- jz alreadyonoff
- mov commandtype,222
- mov al,39
- call commandonly
-alreadyonoff: mov ax,mousebutton
- cmp ax,oldbutton
- jz nozoomonoff
- and ax,1
- jnz dozoomonoff
-nozoomonoff: ret
-
-dozoomonoff: mov al,zoomon
- xor al,1
- mov zoomon,al
-
- call createpanel
- mov newobs,0
- call drawfloor
- call printsprites
- call reelsonscreen
- call showicon
- call getunderzoom
- call undertextline
- mov al,39
- call commandonly
- call readmouse
- call worktoscreenm
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-Saveload proc near
-
- if demo
- call dosreturn
- ret
- else
- cmp watchingtime,0
- jnz blank
- cmp pointermode,2
- jz blank
- cmp commandtype,253
- jz alreadyops
- mov commandtype,253
- mov al,43
- call commandonly
-alreadyops: mov ax,mousebutton
- cmp ax,oldbutton
- jz noops
- and ax,1
- jz noops
- call dosaveload
-noops: ret
- endif
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Dosaveload proc near
-
- mov pointerframe,0
- mov textaddressx,70
- mov textaddressy,182-8
- mov textlen,181
- mov manisoffscreen,1
- call clearwork
- call createpanel2
- call undertextline
- call getridofall ;reels
- call loadsavebox
- call showopbox
- call showmainops
- call worktoscreen ;2
- jmp donefirstops
-
-restartops: call showopbox
- call showmainops
- call worktoscreenm
-donefirstops: mov getback,0
-waitops: call readmouse
- call showpointer
- call vsync
- call dumppointer
- call dumptextline
- call delpointer
- mov bx,offset cs:opslist
- call checkcoords
- cmp getback,0
- jz waitops
- cmp getback,2
- jz restartops
- mov textaddressx,13
- mov textaddressy,182
- mov textlen,240
- cmp getback,4
- jz justret
- call getridoftemp
- call restoreall ;reels
- call redrawmainscrn
- call worktoscreenm
- mov commandtype,200
-justret: mov manisoffscreen,0
- ret
-
-opslist: dw opsx+59,opsx+114,opsy+30,opsy+76,getbackfromops
- dw opsx+10,opsx+77,opsy+10,opsy+59,dosreturn
- dw opsx+128,opsx+190,opsy+16,opsy+100,discops
- dw 0,320,0,200,blank
- dw 0ffffh
-
-
- endp
-
-
-
-Getbackfromops proc near
-
- cmp mandead,2
- jz opsblock1
- call getback1
- ret
-opsblock1: call blank
- ret
-
- endp
-
-
-
-
-
-Showmainops proc near
-
- mov ds,tempgraphics
- mov di,opsx+10
- mov bx,opsy+10
- mov al,8
- mov ah,0
- call showframe
- mov ds,tempgraphics
- mov di,opsx+59
- mov bx,opsy+30
- mov al,7
- mov ah,0
- call showframe
- mov ds,tempgraphics
- mov di,opsx+128+4
- mov bx,opsy+12
- mov al,1
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-Showdiscops proc near
-
- mov ds,tempgraphics
- mov di,opsx+128+4
- mov bx,opsy+12
- mov al,1
- mov ah,0
- call showframe
- mov ds,tempgraphics
- mov di,opsx+10
- mov bx,opsy+10
- mov al,9
- mov ah,0
- call showframe
- mov ds,tempgraphics
- mov di,opsx+59
- mov bx,opsy+30
- mov al,10
- mov ah,0
- call showframe
- mov ds,tempgraphics
- mov di,opsx+176+2
- mov bx,opsy+60-4
- mov al,5
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-Loadsavebox proc near
-
- mov dx,offset cs:icongraphics8
- call loadintotemp
- ret
-
- endp
-
-
-
-
-
-
-
-
-Loadgame proc near
-
- cmp commandtype,246
- jz alreadyload
- mov commandtype,246
- mov al,41
- call commandonly
-alreadyload: mov ax,mousebutton
- cmp ax,oldbutton
- jz noload
- cmp ax,1
- jz doload
-noload: ret
-
-doload: mov loadingorsave,1
- call showopbox
- call showloadops
- mov currentslot,0
- call showslots
- call shownames
- mov pointerframe,0
- call worktoscreenm
- call namestoold
- mov getback,0
-
-loadops: call delpointer
- call readmouse
- call showpointer
- call vsync
- call dumppointer
- call dumptextline
-
- mov bx,offset cs:loadlist
- call checkcoords
- cmp getback,0
- jz loadops
- cmp getback,2
- jz quitloaded
- call getridoftemp
- ;call clearnoreels
- mov dx,seg madeuproomdat
- mov es,dx
- mov bx,offset es:madeuproomdat
- call startloading
- call loadroomssample
- mov roomloaded,1
- mov newlocation,255
- call clearsprites
- call initman
- call initrain
- mov textaddressx,13
- mov textaddressy,182
- mov textlen,240
- call startup
- call worktoscreen
- mov getback,4
-quitloaded: ret
-
-loadlist: dw opsx+176,opsx+192,opsy+60,opsy+76,getbacktoops
- dw opsx+128,opsx+190,opsy+12,opsy+100,actualload
- dw opsx+2,opsx+92,opsy+4,opsy+81,selectslot
- dw 0,320,0,200,blank
- dw 0ffffh
-
- endp
-
-
-
-
-
-
-
-Getbacktoops proc near
-
- cmp commandtype,201
- jz alreadygetops
- mov commandtype,201
- mov al,42
- call commandonly
-alreadygetops: mov ax,mousebutton
- cmp ax,oldbutton
- jz nogetbackops
- and ax,1
- jnz dogetbackops
-nogetbackops: ret
-
-dogetbackops: call oldtonames
- mov getback,2
- ret
-
- endp
-
-
-
-
-
-
-
-Discops proc near
-
- cmp commandtype,249
- jz alreadydiscops
- mov commandtype,249
- mov al,43
- call commandonly
-alreadydiscops: mov ax,mousebutton
- cmp ax,oldbutton
- jz nodiscops
- and ax,1
- jnz dodiscops
-nodiscops: ret
-dodiscops: call scanfornames
- mov loadingorsave,2
- call showopbox
- call showdiscops
- mov currentslot,0
- call worktoscreenm
-
- mov getback,0
-discopsloop: call delpointer
- call readmouse
- call showpointer
- call vsync
- call dumppointer
- call dumptextline
- mov bx,offset cs:discopslist
- call checkcoords
- cmp getback,0
- jz discopsloop
- ret
-
-discopslist: dw opsx+59,opsx+114,opsy+30,opsy+76,loadgame
- dw opsx+10,opsx+79,opsy+10,opsy+59,savegame
- dw opsx+176,opsx+192,opsy+60,opsy+76,getbacktoops
- dw 0,320,0,200,blank
- dw 0ffffh
-
- endp
-
-
-
-
-
-
-
-
-Savegame proc near
-
- cmp mandead,2
- jnz cansaveok
- call blank
- ret
-
-cansaveok: cmp commandtype,247
- jz alreadysave
- mov commandtype,247
- mov al,44
- call commandonly
-alreadysave: mov ax,mousebutton
- and ax,1
- jnz dosave
- ret
-dosave: mov loadingorsave,2
- call showopbox
- call showsaveops
- mov currentslot,0
- call showslots
- call shownames
- call worktoscreenm
-
- call namestoold
- mov bufferin,0
- mov bufferout,0
-
- mov getback,0
-
-saveops: call delpointer
- call checkinput
- call readmouse
- call showpointer
- call vsync
- call dumppointer
- call dumptextline
-
- mov bx,offset cs:savelist
- call checkcoords
- cmp getback,0
- jz saveops
- ret
-
-savelist: dw opsx+176,opsx+192,opsy+60,opsy+76,getbacktoops
- dw opsx+128,opsx+190,opsy+12,opsy+100,actualsave
- dw opsx+2,opsx+92,opsy+4,opsy+81,selectslot
- dw 0,320,0,200,blank
- dw 0ffffh
-
- endp
-
-
-
-
-
-Actualsave proc near
-
- cmp commandtype,222
- jz alreadyactsave
- mov commandtype,222
- mov al,44
- call commandonly
-alreadyactsave: mov ax,mousebutton
- and ax,1
- jz noactsave
-
- mov dx,seg savenames
- mov ds,dx
- mov si,offset savenames
- mov al,currentslot
- mov ah,0
- mov cx,17
- mul cx
- add si,ax
- inc si
- cmp byte ptr [si],0
- jz noactsave
-
- mov al,location
- mov ah,0
- mov cx,32
- mul cx
- push cs
- pop ds
- mov si,offset cs:roomdata
- add si,ax
-
- mov di,offset cs:madeuproomdat
- mov bx,di
- push cs
- pop es
- mov cx,16
- rep movsw
-
- mov al,roomssample
- mov [es:bx+13],al
- mov al,mapx
- mov [es:bx+15],al
- mov al,mapy
- mov [es:bx+16],al
- mov al,liftflag
- mov [es:bx+20],al
- mov al,manspath
- mov [es:bx+21],al
- mov al,facing
- mov [es:bx+22],al
- mov al,255
- mov [es:bx+27],al
- call saveposition
- call getridoftemp
- call restoreall ;reels
- mov textaddressx,13
- mov textaddressy,182
- mov textlen,240
- call redrawmainscrn
- call worktoscreenm
- mov getback,4
-noactsave: ret
-
- endp
-
-
-
-
-Actualload proc near
-
- cmp commandtype,221
- jz alreadyactload
- mov commandtype,221
- mov al,41
- call commandonly
-alreadyactload: mov ax,mousebutton
- cmp ax,oldbutton
- jz notactload
- cmp ax,1
- jnz notactload
-
- mov dx,seg savenames
- mov ds,dx
- mov si,offset savenames
- mov al,currentslot
- mov ah,0
- mov cx,17
- mul cx
- add si,ax
- inc si
- cmp byte ptr [si],0
- jz notactload
- call loadposition
- mov getback,1
-notactload: ret
-
- endp
-
-
-
-
-Selectslot2 proc near
-
- cmp mousebutton,0
- jz noselslot2
- mov loadingorsave,2
-noselslot2: call selectslot
- ret
-
- endp
-
-
-
-
-
-Checkinput proc near
-
- cmp loadingorsave,3
- jz nokeypress
- call readkey
- mov al,currentkey
- cmp al,0
- jz nokeypress
- cmp al,13
- jnz notret
- mov loadingorsave,3
- jmp afterkey
-notret: cmp al,8
- jnz nodel2
- cmp cursorpos,0
- jz nokeypress
- call getnamepos
- dec cursorpos
- mov byte ptr [es:bx],0
- mov byte ptr [es:bx+1],1
- jmp afterkey
-nodel2: ;cmp al,32
- ;jz spacepress
- ;cmp al,"A"
- ;jc nokeypress
- ;cmp al,"Z"+1
- ;jnc nokeypress
-spacepress: cmp cursorpos,14
- jz nokeypress
- call getnamepos
- inc cursorpos
- mov al,currentkey
- mov [es:bx+1],al
- mov byte ptr [es:bx+2],0
- mov byte ptr [es:bx+3],1
- jmp afterkey
-
-nokeypress: ret
-
-afterkey: call showopbox
- call shownames
- call showslots
- call showsaveops
- call worktoscreenm
- ret
-
- endp
-
-
-
-
-
-Getnamepos proc near
-
- mov al,currentslot
- mov ah,0
- mov cx,17
- mul cx
- mov dx,seg savenames
- mov es,dx
- mov bx,offset es:savenames
- add bx,ax
- mov al,cursorpos
- mov ah,0
- add bx,ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-Showopbox proc near
-
- mov ds,tempgraphics
- mov di,opsx
- mov bx,opsy
- mov al,0
- mov ah,0
- call showframe
-
- mov ds,tempgraphics
- mov di,opsx
- mov bx,opsy+55
- mov al,4
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-
-Showloadops proc near
-
- mov ds,tempgraphics
- mov di,opsx+128+4
- mov bx,opsy+12
- mov al,1
- mov ah,0
- call showframe
- mov ds,tempgraphics
- mov di,opsx+176+2
- mov bx,opsy+60-4
- mov al,5
- mov ah,0
- call showframe
-
- mov di,opsx+104
- mov bx,opsy+14
- mov al,55
- mov dl,101
- call printmessage
- ret
-
- endp
-
-
-
-
-Showsaveops proc near
-
- mov ds,tempgraphics
- mov di,opsx+128+4
- mov bx,opsy+12
- mov al,1
- mov ah,0
- call showframe
- mov ds,tempgraphics
- mov di,opsx+176+2
- mov bx,opsy+60-4
- mov al,5
- mov ah,0
- call showframe
-
- mov di,opsx+104
- mov bx,opsy+14
- mov al,54
- mov dl,101
- call printmessage
- ret
-
- endp
-
-
-
-
-
-Selectslot proc near
-
- cmp commandtype,244
- jz alreadysel
- mov commandtype,244
- mov al,45
- call commandonly
-alreadysel: mov ax,mousebutton
- cmp ax,1
- jnz noselslot
- cmp ax,oldbutton
- jz noselslot
-
- cmp loadingorsave,3
- jnz notnocurs
- dec loadingorsave
-notnocurs: call oldtonames
- mov ax,mousey
- sub ax,opsy+4
- mov cl,-1
-getslotnum: inc cl
- sub ax,11
- jnc getslotnum
- mov currentslot,cl
- call delpointer
- call showopbox
- call showslots
- call shownames
- cmp loadingorsave,1
- jz isloadmode
- call showsaveops
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
- ret
-isloadmode: call showloadops
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
- ret
-
-noselslot: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Showslots proc near
-
- mov di,opsx+7
- mov bx,opsy+8
- mov al,2
- mov ds,tempgraphics
- mov ah,0
- call showframe
-
- mov di,opsx+10
- mov bx,opsy+11
- mov cl,0
-slotloop: push cx di bx
-
- cmp cl,currentslot
- jnz nomatchslot
- mov al,3
- mov ds,tempgraphics
- mov ah,0
- call showframe
-
-nomatchslot: pop bx di cx
- add bx,10
- inc cl
- cmp cl,7
- jnz slotloop
- ret
-
- endp
-
-
-
-
-
-Shownames proc near
-
- mov dx,seg savenames
- mov es,dx
- mov si,offset es:savenames+1
- mov di,opsx+21
- mov bx,opsy+10
- mov cl,0
-
-shownameloop: push cx di es bx si
- mov al,4
- cmp cl,currentslot
- jnz nomatchslot2
-
- cmp loadingorsave,2
- jnz loadmode
-
- mov dx,si
- mov cx,15
- add si,15
-zerostill: dec si
- dec cl
- cmp byte ptr [es:si],1
- jnz foundcharacter
- jmp zerostill
-foundcharacter: mov cursorpos,cl
- mov byte ptr [es:si],"/"
- mov byte ptr [es:si+1],0
- push si
- mov si,dx
- mov dl,200
- mov ah,0
- call printdirect
- pop si
- mov byte ptr [es:si],0
- mov byte ptr [es:si+1],1
- jmp afterprintname
-
-loadmode: mov al,0
- mov dl,200
- mov ah,0
- mov charshift,91
- call printdirect
- mov charshift,0
- jmp afterprintname
-
-nomatchslot2: mov dl,200
- mov ah,0
- call printdirect
-
-afterprintname: pop si bx es di cx
- add si,17
- add bx,10
- inc cl
- cmp cl,7
- jnz shownameloop
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Dosreturn proc near
-
- cmp commandtype,250
- jz alreadydos
- mov commandtype,250
- mov al,46
- call commandonly
-alreadydos: mov ax,mousebutton
- and ax,1
- jz nodos
-
-quickquit2: call soundend
- call removeemm
-
-quickquit: if recording
- call saverec
- mov bx,rechandle
- mov ah,3eh
- int 21h
- endif
- if playback
- mov bx,rechandle
- mov ah,3eh
- int 21h
- endif
-
- call resetkeyboard
- mov bl,31h
- mov al,0
- mov ah,12h
- int 10h
- call vsync
-
- mov ah,0
- mov al,3
- int 10h
- call error
- mov ax,4c00h
- int 21h
- ret
-
- endp
-
-
-
-Error proc near
-
- cmp gameerror,1
- jz error1
- cmp gameerror,2
- jz error2
- cmp gameerror,3
- jz error3
- cmp gameerror,4
- jz error4
- cmp gameerror,5
- jz error5
- cmp gameerror,6
- jz error6
- cmp gameerror,7
- jz error7
- cmp gameerror,8
- jz error8
- ret
-
-error1: mov dx,offset cs:gameerror1
- jmp generalerror
-
-error2: mov ax,soundbaseadd
- sub ax,200h
- mov cl,4
- shr ax,cl
- add al,"0"
- mov bx,offset cs:error2patch
- mov [cs:bx+1],al
- mov dx,offset cs:gameerror2
- call generalerror
- mov dx,offset cs:gameinfo
- jmp generalerror
-
-error3: mov dx,offset cs:gameerror3
- jmp generalerror
-
-error4: mov dx,offset cs:gameerror4
- jmp generalerror
-
-error5: mov dx,offset cs:gameerror5
- jmp generalerror
-
-error6: mov al,soundint
- add al,"0"
- mov bx,offset cs:error6patch
- mov [cs:bx],al
- mov dx,offset cs:gameerror6
- call generalerror
- mov dx,offset cs:gameinfo
- jmp generalerror
-
-error7: mov dx,offset cs:gameerror7
- jmp generalerror
-
-error8: mov dx,offset cs:gameerror8
- jmp generalerror
-
-generalerror: mov ah,9h
- push cs
- pop ds
- int 21h
- ret
-
-nodos: ret
-
-gameerror1: db 13,10,13,10
- db "Dreamweb has an Error:",13,10
- db "Unable to allocate Expanded Memory."
- db 13,10,13,10
- db 24h
-gameerror2: db 13,10,13,10
- db "Dreamweb has an Error:",13,10
- db "Sound Blaster card not found at address "
-error2patch: db "220 Hex."
- db 13,10,13,10
- db 24h
-gameerror3: db 13,10,13,10
- db "Dreamweb has an Error:",13,10
- db "Out of Base Memory."
- db 13,10,13,10
- db 24h
-gameerror4: db 13,10,13,10
- db "Dreamweb has an Error:",13,10
- db "Memory Deallocation problem."
- db 13,10,13,10
- db 24h
-gameerror5: db 13,10,13,10
- db "Dreamweb has an Error:",13,10
- db "At least 590K of base memory is required."
- db 13,10,13,10
- db 24h
-gameerror6: db 13,10,13,10
- db "Dreamweb has an Error:",13,10
- db "Sound Blaster not found on interupt "
-error6patch: db "0"
- db 13,10,13,10
- db 24h
-gameerror7: db 13,10,13,10
- db "Dreamweb has an Error:",13,10
- db "Unable to select EMM page."
- db 13,10,13,10
- db 24h
-gameerror8: db 13,10,13,10
- db "Dreamweb has an Error:",13,10
- db "File not found.c"
-error8patch: db 13,10,13,10
- db 24h
-
-gameinfo: db "Dreamweb looks for Sound Blaster information in",13,10
- db "the BLASTER environment variable (in your AUTOEXEC.BAT)",13,10
- db 13,10,"If this is not found then IRQ 7, DMA channel 1 and base",13,10
- db "address 220h are assumed.",13,10,13,10
-
- db "To alter any or all of these settings you can specify them",13,10
- db "on the command line. For example:",13,10,13,10
- db "Type DREAMWEB I7 A220 D1 to run Dreamweb on IRQ 7, DMA",13,10
- db " channel 1 and base address 220h"
- db 13,10
- db " DREAMWEB I5 to run Dreamweb on IRQ 5 and",13,10
- db " default address of 220h, DMA 1",13,10
- db 13,10
- db 24h
-
-endgametext1: db 13,10,13,10
- db "Try the Dreamweb CD in your stereo....",13,10
- db 13,10,13,10
- db 24h
-
- endp
-
-
-
-
-
-
-
-
-Namestoold proc near
-
- push cs
- pop ds
- mov si,offset cs:savenames
- mov di,zoomspace
- mov es,buffers
- mov cx,17*4
- rep movsb
- ret
-
- endp
-
-
-
-Oldtonames proc near
-
- push cs
- pop es
- mov di,offset cs:savenames
- mov si,zoomspace
- mov ds,buffers
- mov cx,17*4
- rep movsb
- ret
-
- endp
-
-
-
+
+
+Zoomonoff proc near
+
+ cmp watchingtime,0
+ jnz blank
+ cmp pointermode,2
+ jz blank
+ cmp commandtype,222
+ jz alreadyonoff
+ mov commandtype,222
+ mov al,39
+ call commandonly
+alreadyonoff: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz nozoomonoff
+ and ax,1
+ jnz dozoomonoff
+nozoomonoff: ret
+
+dozoomonoff: mov al,zoomon
+ xor al,1
+ mov zoomon,al
+
+ call createpanel
+ mov newobs,0
+ call drawfloor
+ call printsprites
+ call reelsonscreen
+ call showicon
+ call getunderzoom
+ call undertextline
+ mov al,39
+ call commandonly
+ call readmouse
+ call worktoscreenm
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+Saveload proc near
+
+ if demo
+ call dosreturn
+ ret
+ else
+ cmp watchingtime,0
+ jnz blank
+ cmp pointermode,2
+ jz blank
+ cmp commandtype,253
+ jz alreadyops
+ mov commandtype,253
+ mov al,43
+ call commandonly
+alreadyops: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz noops
+ and ax,1
+ jz noops
+ call dosaveload
+noops: ret
+ endif
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Dosaveload proc near
+
+ mov pointerframe,0
+ mov textaddressx,70
+ mov textaddressy,182-8
+ mov textlen,181
+ mov manisoffscreen,1
+ call clearwork
+ call createpanel2
+ call undertextline
+ call getridofall ;reels
+ call loadsavebox
+ call showopbox
+ call showmainops
+ call worktoscreen ;2
+ jmp donefirstops
+
+restartops: call showopbox
+ call showmainops
+ call worktoscreenm
+donefirstops: mov getback,0
+waitops: call readmouse
+ call showpointer
+ call vsync
+ call dumppointer
+ call dumptextline
+ call delpointer
+ mov bx,offset cs:opslist
+ call checkcoords
+ cmp getback,0
+ jz waitops
+ cmp getback,2
+ jz restartops
+ mov textaddressx,13
+ mov textaddressy,182
+ mov textlen,240
+ cmp getback,4
+ jz justret
+ call getridoftemp
+ call restoreall ;reels
+ call redrawmainscrn
+ call worktoscreenm
+ mov commandtype,200
+justret: mov manisoffscreen,0
+ ret
+
+opslist: dw opsx+59,opsx+114,opsy+30,opsy+76,getbackfromops
+ dw opsx+10,opsx+77,opsy+10,opsy+59,dosreturn
+ dw opsx+128,opsx+190,opsy+16,opsy+100,discops
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+
+ endp
+
+
+
+Getbackfromops proc near
+
+ cmp mandead,2
+ jz opsblock1
+ call getback1
+ ret
+opsblock1: call blank
+ ret
+
+ endp
+
+
+
+
+
+Showmainops proc near
+
+ mov ds,tempgraphics
+ mov di,opsx+10
+ mov bx,opsy+10
+ mov al,8
+ mov ah,0
+ call showframe
+ mov ds,tempgraphics
+ mov di,opsx+59
+ mov bx,opsy+30
+ mov al,7
+ mov ah,0
+ call showframe
+ mov ds,tempgraphics
+ mov di,opsx+128+4
+ mov bx,opsy+12
+ mov al,1
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+Showdiscops proc near
+
+ mov ds,tempgraphics
+ mov di,opsx+128+4
+ mov bx,opsy+12
+ mov al,1
+ mov ah,0
+ call showframe
+ mov ds,tempgraphics
+ mov di,opsx+10
+ mov bx,opsy+10
+ mov al,9
+ mov ah,0
+ call showframe
+ mov ds,tempgraphics
+ mov di,opsx+59
+ mov bx,opsy+30
+ mov al,10
+ mov ah,0
+ call showframe
+ mov ds,tempgraphics
+ mov di,opsx+176+2
+ mov bx,opsy+60-4
+ mov al,5
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+Loadsavebox proc near
+
+ mov dx,offset cs:icongraphics8
+ call loadintotemp
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Loadgame proc near
+
+ cmp commandtype,246
+ jz alreadyload
+ mov commandtype,246
+ mov al,41
+ call commandonly
+alreadyload: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz noload
+ cmp ax,1
+ jz doload
+noload: ret
+
+doload: mov loadingorsave,1
+ call showopbox
+ call showloadops
+ mov currentslot,0
+ call showslots
+ call shownames
+ mov pointerframe,0
+ call worktoscreenm
+ call namestoold
+ mov getback,0
+
+loadops: call delpointer
+ call readmouse
+ call showpointer
+ call vsync
+ call dumppointer
+ call dumptextline
+
+ mov bx,offset cs:loadlist
+ call checkcoords
+ cmp getback,0
+ jz loadops
+ cmp getback,2
+ jz quitloaded
+ call getridoftemp
+ ;call clearnoreels
+ mov dx,seg madeuproomdat
+ mov es,dx
+ mov bx,offset es:madeuproomdat
+ call startloading
+ call loadroomssample
+ mov roomloaded,1
+ mov newlocation,255
+ call clearsprites
+ call initman
+ call initrain
+ mov textaddressx,13
+ mov textaddressy,182
+ mov textlen,240
+ call startup
+ call worktoscreen
+ mov getback,4
+quitloaded: ret
+
+loadlist: dw opsx+176,opsx+192,opsy+60,opsy+76,getbacktoops
+ dw opsx+128,opsx+190,opsy+12,opsy+100,actualload
+ dw opsx+2,opsx+92,opsy+4,opsy+81,selectslot
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+ endp
+
+
+
+
+
+
+
+Getbacktoops proc near
+
+ cmp commandtype,201
+ jz alreadygetops
+ mov commandtype,201
+ mov al,42
+ call commandonly
+alreadygetops: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz nogetbackops
+ and ax,1
+ jnz dogetbackops
+nogetbackops: ret
+
+dogetbackops: call oldtonames
+ mov getback,2
+ ret
+
+ endp
+
+
+
+
+
+
+
+Discops proc near
+
+ cmp commandtype,249
+ jz alreadydiscops
+ mov commandtype,249
+ mov al,43
+ call commandonly
+alreadydiscops: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz nodiscops
+ and ax,1
+ jnz dodiscops
+nodiscops: ret
+dodiscops: call scanfornames
+ mov loadingorsave,2
+ call showopbox
+ call showdiscops
+ mov currentslot,0
+ call worktoscreenm
+
+ mov getback,0
+discopsloop: call delpointer
+ call readmouse
+ call showpointer
+ call vsync
+ call dumppointer
+ call dumptextline
+ mov bx,offset cs:discopslist
+ call checkcoords
+ cmp getback,0
+ jz discopsloop
+ ret
+
+discopslist: dw opsx+59,opsx+114,opsy+30,opsy+76,loadgame
+ dw opsx+10,opsx+79,opsy+10,opsy+59,savegame
+ dw opsx+176,opsx+192,opsy+60,opsy+76,getbacktoops
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+ endp
+
+
+
+
+
+
+
+
+Savegame proc near
+
+ cmp mandead,2
+ jnz cansaveok
+ call blank
+ ret
+
+cansaveok: cmp commandtype,247
+ jz alreadysave
+ mov commandtype,247
+ mov al,44
+ call commandonly
+alreadysave: mov ax,mousebutton
+ and ax,1
+ jnz dosave
+ ret
+dosave: mov loadingorsave,2
+ call showopbox
+ call showsaveops
+ mov currentslot,0
+ call showslots
+ call shownames
+ call worktoscreenm
+
+ call namestoold
+ mov bufferin,0
+ mov bufferout,0
+
+ mov getback,0
+
+saveops: call delpointer
+ call checkinput
+ call readmouse
+ call showpointer
+ call vsync
+ call dumppointer
+ call dumptextline
+
+ mov bx,offset cs:savelist
+ call checkcoords
+ cmp getback,0
+ jz saveops
+ ret
+
+savelist: dw opsx+176,opsx+192,opsy+60,opsy+76,getbacktoops
+ dw opsx+128,opsx+190,opsy+12,opsy+100,actualsave
+ dw opsx+2,opsx+92,opsy+4,opsy+81,selectslot
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+ endp
+
+
+
+
+
+Actualsave proc near
+
+ cmp commandtype,222
+ jz alreadyactsave
+ mov commandtype,222
+ mov al,44
+ call commandonly
+alreadyactsave: mov ax,mousebutton
+ and ax,1
+ jz noactsave
+
+ mov dx,seg savenames
+ mov ds,dx
+ mov si,offset savenames
+ mov al,currentslot
+ mov ah,0
+ mov cx,17
+ mul cx
+ add si,ax
+ inc si
+ cmp byte ptr [si],0
+ jz noactsave
+
+ mov al,location
+ mov ah,0
+ mov cx,32
+ mul cx
+ push cs
+ pop ds
+ mov si,offset cs:roomdata
+ add si,ax
+
+ mov di,offset cs:madeuproomdat
+ mov bx,di
+ push cs
+ pop es
+ mov cx,16
+ rep movsw
+
+ mov al,roomssample
+ mov [es:bx+13],al
+ mov al,mapx
+ mov [es:bx+15],al
+ mov al,mapy
+ mov [es:bx+16],al
+ mov al,liftflag
+ mov [es:bx+20],al
+ mov al,manspath
+ mov [es:bx+21],al
+ mov al,facing
+ mov [es:bx+22],al
+ mov al,255
+ mov [es:bx+27],al
+ call saveposition
+ call getridoftemp
+ call restoreall ;reels
+ mov textaddressx,13
+ mov textaddressy,182
+ mov textlen,240
+ call redrawmainscrn
+ call worktoscreenm
+ mov getback,4
+noactsave: ret
+
+ endp
+
+
+
+
+Actualload proc near
+
+ cmp commandtype,221
+ jz alreadyactload
+ mov commandtype,221
+ mov al,41
+ call commandonly
+alreadyactload: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz notactload
+ cmp ax,1
+ jnz notactload
+
+ mov dx,seg savenames
+ mov ds,dx
+ mov si,offset savenames
+ mov al,currentslot
+ mov ah,0
+ mov cx,17
+ mul cx
+ add si,ax
+ inc si
+ cmp byte ptr [si],0
+ jz notactload
+ call loadposition
+ mov getback,1
+notactload: ret
+
+ endp
+
+
+
+
+Selectslot2 proc near
+
+ cmp mousebutton,0
+ jz noselslot2
+ mov loadingorsave,2
+noselslot2: call selectslot
+ ret
+
+ endp
+
+
+
+
+
+Checkinput proc near
+
+ cmp loadingorsave,3
+ jz nokeypress
+ call readkey
+ mov al,currentkey
+ cmp al,0
+ jz nokeypress
+ cmp al,13
+ jnz notret
+ mov loadingorsave,3
+ jmp afterkey
+notret: cmp al,8
+ jnz nodel2
+ cmp cursorpos,0
+ jz nokeypress
+ call getnamepos
+ dec cursorpos
+ mov byte ptr [es:bx],0
+ mov byte ptr [es:bx+1],1
+ jmp afterkey
+nodel2: ;cmp al,32
+ ;jz spacepress
+ ;cmp al,"A"
+ ;jc nokeypress
+ ;cmp al,"Z"+1
+ ;jnc nokeypress
+spacepress: cmp cursorpos,14
+ jz nokeypress
+ call getnamepos
+ inc cursorpos
+ mov al,currentkey
+ mov [es:bx+1],al
+ mov byte ptr [es:bx+2],0
+ mov byte ptr [es:bx+3],1
+ jmp afterkey
+
+nokeypress: ret
+
+afterkey: call showopbox
+ call shownames
+ call showslots
+ call showsaveops
+ call worktoscreenm
+ ret
+
+ endp
+
+
+
+
+
+Getnamepos proc near
+
+ mov al,currentslot
+ mov ah,0
+ mov cx,17
+ mul cx
+ mov dx,seg savenames
+ mov es,dx
+ mov bx,offset es:savenames
+ add bx,ax
+ mov al,cursorpos
+ mov ah,0
+ add bx,ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Showopbox proc near
+
+ mov ds,tempgraphics
+ mov di,opsx
+ mov bx,opsy
+ mov al,0
+ mov ah,0
+ call showframe
+
+ mov ds,tempgraphics
+ mov di,opsx
+ mov bx,opsy+55
+ mov al,4
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Showloadops proc near
+
+ mov ds,tempgraphics
+ mov di,opsx+128+4
+ mov bx,opsy+12
+ mov al,1
+ mov ah,0
+ call showframe
+ mov ds,tempgraphics
+ mov di,opsx+176+2
+ mov bx,opsy+60-4
+ mov al,5
+ mov ah,0
+ call showframe
+
+ mov di,opsx+104
+ mov bx,opsy+14
+ mov al,55
+ mov dl,101
+ call printmessage
+ ret
+
+ endp
+
+
+
+
+Showsaveops proc near
+
+ mov ds,tempgraphics
+ mov di,opsx+128+4
+ mov bx,opsy+12
+ mov al,1
+ mov ah,0
+ call showframe
+ mov ds,tempgraphics
+ mov di,opsx+176+2
+ mov bx,opsy+60-4
+ mov al,5
+ mov ah,0
+ call showframe
+
+ mov di,opsx+104
+ mov bx,opsy+14
+ mov al,54
+ mov dl,101
+ call printmessage
+ ret
+
+ endp
+
+
+
+
+
+Selectslot proc near
+
+ cmp commandtype,244
+ jz alreadysel
+ mov commandtype,244
+ mov al,45
+ call commandonly
+alreadysel: mov ax,mousebutton
+ cmp ax,1
+ jnz noselslot
+ cmp ax,oldbutton
+ jz noselslot
+
+ cmp loadingorsave,3
+ jnz notnocurs
+ dec loadingorsave
+notnocurs: call oldtonames
+ mov ax,mousey
+ sub ax,opsy+4
+ mov cl,-1
+getslotnum: inc cl
+ sub ax,11
+ jnc getslotnum
+ mov currentslot,cl
+ call delpointer
+ call showopbox
+ call showslots
+ call shownames
+ cmp loadingorsave,1
+ jz isloadmode
+ call showsaveops
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+ ret
+isloadmode: call showloadops
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+ ret
+
+noselslot: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Showslots proc near
+
+ mov di,opsx+7
+ mov bx,opsy+8
+ mov al,2
+ mov ds,tempgraphics
+ mov ah,0
+ call showframe
+
+ mov di,opsx+10
+ mov bx,opsy+11
+ mov cl,0
+slotloop: push cx di bx
+
+ cmp cl,currentslot
+ jnz nomatchslot
+ mov al,3
+ mov ds,tempgraphics
+ mov ah,0
+ call showframe
+
+nomatchslot: pop bx di cx
+ add bx,10
+ inc cl
+ cmp cl,7
+ jnz slotloop
+ ret
+
+ endp
+
+
+
+
+
+Shownames proc near
+
+ mov dx,seg savenames
+ mov es,dx
+ mov si,offset es:savenames+1
+ mov di,opsx+21
+ mov bx,opsy+10
+ mov cl,0
+
+shownameloop: push cx di es bx si
+ mov al,4
+ cmp cl,currentslot
+ jnz nomatchslot2
+
+ cmp loadingorsave,2
+ jnz loadmode
+
+ mov dx,si
+ mov cx,15
+ add si,15
+zerostill: dec si
+ dec cl
+ cmp byte ptr [es:si],1
+ jnz foundcharacter
+ jmp zerostill
+foundcharacter: mov cursorpos,cl
+ mov byte ptr [es:si],"/"
+ mov byte ptr [es:si+1],0
+ push si
+ mov si,dx
+ mov dl,200
+ mov ah,0
+ call printdirect
+ pop si
+ mov byte ptr [es:si],0
+ mov byte ptr [es:si+1],1
+ jmp afterprintname
+
+loadmode: mov al,0
+ mov dl,200
+ mov ah,0
+ mov charshift,91
+ call printdirect
+ mov charshift,0
+ jmp afterprintname
+
+nomatchslot2: mov dl,200
+ mov ah,0
+ call printdirect
+
+afterprintname: pop si bx es di cx
+ add si,17
+ add bx,10
+ inc cl
+ cmp cl,7
+ jnz shownameloop
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Dosreturn proc near
+
+ cmp commandtype,250
+ jz alreadydos
+ mov commandtype,250
+ mov al,46
+ call commandonly
+alreadydos: mov ax,mousebutton
+ and ax,1
+ jz nodos
+
+quickquit2: call soundend
+ call removeemm
+
+quickquit: if recording
+ call saverec
+ mov bx,rechandle
+ mov ah,3eh
+ int 21h
+ endif
+ if playback
+ mov bx,rechandle
+ mov ah,3eh
+ int 21h
+ endif
+
+ call resetkeyboard
+ mov bl,31h
+ mov al,0
+ mov ah,12h
+ int 10h
+ call vsync
+
+ mov ah,0
+ mov al,3
+ int 10h
+ call error
+ mov ax,4c00h
+ int 21h
+ ret
+
+ endp
+
+
+
+Error proc near
+
+ cmp gameerror,1
+ jz error1
+ cmp gameerror,2
+ jz error2
+ cmp gameerror,3
+ jz error3
+ cmp gameerror,4
+ jz error4
+ cmp gameerror,5
+ jz error5
+ cmp gameerror,6
+ jz error6
+ cmp gameerror,7
+ jz error7
+ cmp gameerror,8
+ jz error8
+ ret
+
+error1: mov dx,offset cs:gameerror1
+ jmp generalerror
+
+error2: mov ax,soundbaseadd
+ sub ax,200h
+ mov cl,4
+ shr ax,cl
+ add al,"0"
+ mov bx,offset cs:error2patch
+ mov [cs:bx+1],al
+ mov dx,offset cs:gameerror2
+ call generalerror
+ mov dx,offset cs:gameinfo
+ jmp generalerror
+
+error3: mov dx,offset cs:gameerror3
+ jmp generalerror
+
+error4: mov dx,offset cs:gameerror4
+ jmp generalerror
+
+error5: mov dx,offset cs:gameerror5
+ jmp generalerror
+
+error6: mov al,soundint
+ add al,"0"
+ mov bx,offset cs:error6patch
+ mov [cs:bx],al
+ mov dx,offset cs:gameerror6
+ call generalerror
+ mov dx,offset cs:gameinfo
+ jmp generalerror
+
+error7: mov dx,offset cs:gameerror7
+ jmp generalerror
+
+error8: mov dx,offset cs:gameerror8
+ jmp generalerror
+
+generalerror: mov ah,9h
+ push cs
+ pop ds
+ int 21h
+ ret
+
+nodos: ret
+
+gameerror1: db 13,10,13,10
+ db "Dreamweb has an Error:",13,10
+ db "Unable to allocate Expanded Memory."
+ db 13,10,13,10
+ db 24h
+gameerror2: db 13,10,13,10
+ db "Dreamweb has an Error:",13,10
+ db "Sound Blaster card not found at address "
+error2patch: db "220 Hex."
+ db 13,10,13,10
+ db 24h
+gameerror3: db 13,10,13,10
+ db "Dreamweb has an Error:",13,10
+ db "Out of Base Memory."
+ db 13,10,13,10
+ db 24h
+gameerror4: db 13,10,13,10
+ db "Dreamweb has an Error:",13,10
+ db "Memory Deallocation problem."
+ db 13,10,13,10
+ db 24h
+gameerror5: db 13,10,13,10
+ db "Dreamweb has an Error:",13,10
+ db "At least 590K of base memory is required."
+ db 13,10,13,10
+ db 24h
+gameerror6: db 13,10,13,10
+ db "Dreamweb has an Error:",13,10
+ db "Sound Blaster not found on interupt "
+error6patch: db "0"
+ db 13,10,13,10
+ db 24h
+gameerror7: db 13,10,13,10
+ db "Dreamweb has an Error:",13,10
+ db "Unable to select EMM page."
+ db 13,10,13,10
+ db 24h
+gameerror8: db 13,10,13,10
+ db "Dreamweb has an Error:",13,10
+ db "File not found.c"
+error8patch: db 13,10,13,10
+ db 24h
+
+gameinfo: db "Dreamweb looks for Sound Blaster information in",13,10
+ db "the BLASTER environment variable (in your AUTOEXEC.BAT)",13,10
+ db 13,10,"If this is not found then IRQ 7, DMA channel 1 and base",13,10
+ db "address 220h are assumed.",13,10,13,10
+
+ db "To alter any or all of these settings you can specify them",13,10
+ db "on the command line. For example:",13,10,13,10
+ db "Type DREAMWEB I7 A220 D1 to run Dreamweb on IRQ 7, DMA",13,10
+ db " channel 1 and base address 220h"
+ db 13,10
+ db " DREAMWEB I5 to run Dreamweb on IRQ 5 and",13,10
+ db " default address of 220h, DMA 1",13,10
+ db 13,10
+ db 24h
+
+endgametext1: db 13,10,13,10
+ db "Try the Dreamweb CD in your stereo....",13,10
+ db 13,10,13,10
+ db 24h
+
+ endp
+
+
+
+
+
+
+
+
+Namestoold proc near
+
+ push cs
+ pop ds
+ mov si,offset cs:savenames
+ mov di,zoomspace
+ mov es,buffers
+ mov cx,17*4
+ rep movsb
+ ret
+
+ endp
+
+
+
+Oldtonames proc near
+
+ push cs
+ pop es
+ mov di,offset cs:savenames
+ mov si,zoomspace
+ mov ds,buffers
+ mov cx,17*4
+ rep movsb
+ ret
+
+ endp
+
+
+
Savefilewrite proc near
- mov bx,handle
- mov ah,40h
- int 21h
+ mov bx,handle
+ mov ah,40h
+ int 21h
ret
endp
-
+
Savefileread proc near
- mov bx,handle
- mov ah,3fh
- int 21h
+ mov bx,handle
+ mov ah,3fh
+ int 21h
ret
endp
-
-Saveposition proc near
-
- call makeheader
-
- mov al,currentslot
- mov ah,0
- push ax
- mov cx,13
- mul cx
- mov dx,seg savefiles
- mov ds,dx
- mov dx,offset savefiles
- add dx,ax
- call openforsave
-
- mov dx,seg fileheader
- mov ds,dx
- mov dx,offset fileheader
- mov cx,headerlen
+
+Saveposition proc near
+
+ call makeheader
+
+ mov al,currentslot
+ mov ah,0
+ push ax
+ mov cx,13
+ mul cx
+ mov dx,seg savefiles
+ mov ds,dx
+ mov dx,offset savefiles
+ add dx,ax
+ call openforsave
+
+ mov dx,seg fileheader
+ mov ds,dx
+ mov dx,offset fileheader
+ mov cx,headerlen
call savefilewrite
- mov dx,seg fileheader
- mov es,dx
- mov di,offset es:filedata
-
- pop ax
- mov cx,17
- mul cx
- mov dx,seg savenames
- mov ds,dx
- mov dx,offset savenames
- add dx,ax
- call saveseg
-
- mov dx,seg startvars
- mov ds,dx
- mov dx,offset startvars
- call saveseg
-
- mov ds,extras
- mov dx,exframedata
- call saveseg
-
- mov ds,buffers
- mov dx,listofchanges
- call saveseg
-
- mov dx,seg madeuproomdat
- mov ds,dx
- mov dx,offset madeuproomdat
- call saveseg
-
- mov dx,seg reelroutines
- mov ds,dx
- mov dx,offset reelroutines
- call saveseg
-
-fquit: call closefile
- ret
-
- endp
-
-
-
-
-
-
-Loadposition proc near
-
- mov timecount,0
- call clearchanges
-
- mov al,currentslot
- mov ah,0
- push ax
- mov cx,13
- mul cx
- mov dx,seg savefiles
- mov ds,dx
- mov dx,offset savefiles
- add dx,ax
- if cd
- call openfilefromc
- else
- call openfile
- endif
-
- push cs
- pop ds
- mov dx,offset cs:fileheader
- mov cx,headerlen
+ mov dx,seg fileheader
+ mov es,dx
+ mov di,offset es:filedata
+
+ pop ax
+ mov cx,17
+ mul cx
+ mov dx,seg savenames
+ mov ds,dx
+ mov dx,offset savenames
+ add dx,ax
+ call saveseg
+
+ mov dx,seg startvars
+ mov ds,dx
+ mov dx,offset startvars
+ call saveseg
+
+ mov ds,extras
+ mov dx,exframedata
+ call saveseg
+
+ mov ds,buffers
+ mov dx,listofchanges
+ call saveseg
+
+ mov dx,seg madeuproomdat
+ mov ds,dx
+ mov dx,offset madeuproomdat
+ call saveseg
+
+ mov dx,seg reelroutines
+ mov ds,dx
+ mov dx,offset reelroutines
+ call saveseg
+
+fquit: call closefile
+ ret
+
+ endp
+
+
+
+
+
+
+Loadposition proc near
+
+ mov timecount,0
+ call clearchanges
+
+ mov al,currentslot
+ mov ah,0
+ push ax
+ mov cx,13
+ mul cx
+ mov dx,seg savefiles
+ mov ds,dx
+ mov dx,offset savefiles
+ add dx,ax
+ if cd
+ call openfilefromc
+ else
+ call openfile
+ endif
+
+ push cs
+ pop ds
+ mov dx,offset cs:fileheader
+ mov cx,headerlen
call savefileread
- push cs
- pop es
- mov di,offset cs:filedata
-
- pop ax
- mov cx,17
- mul cx
- mov dx,seg savenames
- mov ds,dx
- mov dx,offset savenames
- add dx,ax
- call loadseg
-
- mov dx,seg startvars
- mov ds,dx
- mov dx,offset startvars
- call loadseg
-
- mov ds,extras
- mov dx,exframedata
- call loadseg
-
- mov ds,buffers
- mov dx,listofchanges
- call loadseg
-
- mov dx,seg madeuproomdat
- mov ds,dx
- mov dx,offset madeuproomdat
- call loadseg
-
- push cs
- pop ds
- mov dx,offset cs:reelroutines
- call loadseg
-
- call closefile
- ret
-
- endp
-
-
-
-
-
-Loadseg proc near
-
- mov bx,handle
- mov ax,[es:di]
- add di,2
- push di
- push es
- mov cx,ax
- mov ah,3fh
- int 21h
- pop es
- pop di
- ret
-
- endp
-
-
-
-
-
-Makeheader proc near
-
- mov dx,seg fileheader
- mov es,dx
- mov di,offset es:filedata
- mov ax,17
- call storeit
- mov ax,lengthofvars
- call storeit
- mov ax,lengthofextra
- call storeit
- mov ax,numchanges*4
- call storeit
- mov ax,48
- call storeit
- mov ax,lenofreelrouts
- call storeit
- ret
-
- endp
-
-
-
-
-
-Storeit proc near
-
- cmp ax,0
- jnz isntblank
- inc ax
-isntblank: stosw
- ret
-
- endp
-
-
-
-
-Saveseg proc near
-
- mov cx,[es:di]
- add di,2
- push di es
- mov bx,handle
- mov ah,40h
- int 21h
- pop es di
- ret
-
- endp
-
-
-
-Findlen proc near
-
- dec bx
- add bx,ax
-nextone: cmp cl,[bx]
- jnz foundlen
- dec bx
- dec ax
- cmp ax,0
- jnz nextone
-foundlen: ret
-
- endp
-
-
-
-
-
-Scanfornames proc near
-
- mov dx,seg savenames
- mov es,dx
- mov di,offset es:savenames
- mov dx,seg savefiles
- mov ds,dx
- mov dx,offset savefiles
- mov cx,7
-scanloop: push es ds di dx cx
-
- if cd
- call openfilefromc
- else
- call openfilenocheck
- endif
- jc notexist
- pop cx
- inc ch
- push cx
- push di es
- mov dx,seg fileheader
- mov ds,dx
- mov dx,offset fileheader
- mov cx,headerlen
+ push cs
+ pop es
+ mov di,offset cs:filedata
+
+ pop ax
+ mov cx,17
+ mul cx
+ mov dx,seg savenames
+ mov ds,dx
+ mov dx,offset savenames
+ add dx,ax
+ call loadseg
+
+ mov dx,seg startvars
+ mov ds,dx
+ mov dx,offset startvars
+ call loadseg
+
+ mov ds,extras
+ mov dx,exframedata
+ call loadseg
+
+ mov ds,buffers
+ mov dx,listofchanges
+ call loadseg
+
+ mov dx,seg madeuproomdat
+ mov ds,dx
+ mov dx,offset madeuproomdat
+ call loadseg
+
+ push cs
+ pop ds
+ mov dx,offset cs:reelroutines
+ call loadseg
+
+ call closefile
+ ret
+
+ endp
+
+
+
+
+
+Loadseg proc near
+
+ mov bx,handle
+ mov ax,[es:di]
+ add di,2
+ push di
+ push es
+ mov cx,ax
+ mov ah,3fh
+ int 21h
+ pop es
+ pop di
+ ret
+
+ endp
+
+
+
+
+
+Makeheader proc near
+
+ mov dx,seg fileheader
+ mov es,dx
+ mov di,offset es:filedata
+ mov ax,17
+ call storeit
+ mov ax,lengthofvars
+ call storeit
+ mov ax,lengthofextra
+ call storeit
+ mov ax,numchanges*4
+ call storeit
+ mov ax,48
+ call storeit
+ mov ax,lenofreelrouts
+ call storeit
+ ret
+
+ endp
+
+
+
+
+
+Storeit proc near
+
+ cmp ax,0
+ jnz isntblank
+ inc ax
+isntblank: stosw
+ ret
+
+ endp
+
+
+
+
+Saveseg proc near
+
+ mov cx,[es:di]
+ add di,2
+ push di es
+ mov bx,handle
+ mov ah,40h
+ int 21h
+ pop es di
+ ret
+
+ endp
+
+
+
+Findlen proc near
+
+ dec bx
+ add bx,ax
+nextone: cmp cl,[bx]
+ jnz foundlen
+ dec bx
+ dec ax
+ cmp ax,0
+ jnz nextone
+foundlen: ret
+
+ endp
+
+
+
+
+
+Scanfornames proc near
+
+ mov dx,seg savenames
+ mov es,dx
+ mov di,offset es:savenames
+ mov dx,seg savefiles
+ mov ds,dx
+ mov dx,offset savefiles
+ mov cx,7
+scanloop: push es ds di dx cx
+
+ if cd
+ call openfilefromc
+ else
+ call openfilenocheck
+ endif
+ jc notexist
+ pop cx
+ inc ch
+ push cx
+ push di es
+ mov dx,seg fileheader
+ mov ds,dx
+ mov dx,offset fileheader
+ mov cx,headerlen
call savefileread
- mov dx,seg fileheader
- mov es,dx
- mov di,offset es:filedata
- pop ds dx
- call loadseg
- mov bx,handle
- call closefile
-
-notexist: pop cx dx di ds es
- add dx,13
- add di,17
- dec cl
- jnz scanloop
- mov al,ch
- ret
-
- endp
-
-
-
-
-
-Decide proc near
-
- call setmode
- call loadpalfromiff
- call clearpalette
- mov pointermode,0
- mov watchingtime,0
- mov pointerframe,0
- mov textaddressx,70
- mov textaddressy,182-8
- mov textlen,181
- mov manisoffscreen,1
- call loadsavebox
- call showdecisions
- call worktoscreen
- call fadescreenup
- mov getback,0
-
-waitdecide: call readmouse
- call showpointer
- call vsync
- call dumppointer
- call dumptextline
- call delpointer
- mov bx,offset cs:decidelist
- call checkcoords
- cmp getback,0
- jz waitdecide
- cmp getback,4
- jz hasloadedroom
- call getridoftemp
-hasloadedroom: mov textaddressx,13
- mov textaddressy,182
- mov textlen,240
- ret
-
-decidelist: dw opsx+69,opsx+124,opsy+30,opsy+76,newgame
- dw opsx+20,opsx+87,opsy+10,opsy+59,dosreturn
- dw opsx+123,opsx+190,opsy+10,opsy+59,loadold
- dw 0,320,0,200,blank
- dw 0ffffh
-
- endp
-
-
-
-
-
-
-Showdecisions proc near
-
- call createpanel2
- call showopbox
- mov ds,tempgraphics
- mov di,opsx+17
- mov bx,opsy+13
- mov al,6
- mov ah,0
- call showframe
- call undertextline
- ret
-
- endp
-
-
-
-
-
-Newgame proc near
-
- cmp commandtype,251
- jz alreadynewgame
- mov commandtype,251
- mov al,47
- call commandonly
-alreadynewgame: mov ax,mousebutton
- cmp ax,1
- jnz nonewgame
- mov getback,3
-nonewgame: ret
-
- endp
-
-
-
-
-
-
-
-Loadold proc near
-
- cmp commandtype,252
- jz alreadyloadold
- mov commandtype,252
- mov al,48
- call commandonly
-alreadyloadold: mov ax,mousebutton
- and ax,1
- jz noloadold
- call doload
- cmp getback,4
- jz noloadold
- call showdecisions
- call worktoscreenm
- mov getback,0
-noloadold: ret
-
- endp
-
-
-
-
+ mov dx,seg fileheader
+ mov es,dx
+ mov di,offset es:filedata
+ pop ds dx
+ call loadseg
+ mov bx,handle
+ call closefile
+
+notexist: pop cx dx di ds es
+ add dx,13
+ add di,17
+ dec cl
+ jnz scanloop
+ mov al,ch
+ ret
+
+ endp
+
+
+
+
+
+Decide proc near
+
+ call setmode
+ call loadpalfromiff
+ call clearpalette
+ mov pointermode,0
+ mov watchingtime,0
+ mov pointerframe,0
+ mov textaddressx,70
+ mov textaddressy,182-8
+ mov textlen,181
+ mov manisoffscreen,1
+ call loadsavebox
+ call showdecisions
+ call worktoscreen
+ call fadescreenup
+ mov getback,0
+
+waitdecide: call readmouse
+ call showpointer
+ call vsync
+ call dumppointer
+ call dumptextline
+ call delpointer
+ mov bx,offset cs:decidelist
+ call checkcoords
+ cmp getback,0
+ jz waitdecide
+ cmp getback,4
+ jz hasloadedroom
+ call getridoftemp
+hasloadedroom: mov textaddressx,13
+ mov textaddressy,182
+ mov textlen,240
+ ret
+
+decidelist: dw opsx+69,opsx+124,opsy+30,opsy+76,newgame
+ dw opsx+20,opsx+87,opsy+10,opsy+59,dosreturn
+ dw opsx+123,opsx+190,opsy+10,opsy+59,loadold
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+ endp
+
+
+
+
+
+
+Showdecisions proc near
+
+ call createpanel2
+ call showopbox
+ mov ds,tempgraphics
+ mov di,opsx+17
+ mov bx,opsy+13
+ mov al,6
+ mov ah,0
+ call showframe
+ call undertextline
+ ret
+
+ endp
+
+
+
+
+
+Newgame proc near
+
+ cmp commandtype,251
+ jz alreadynewgame
+ mov commandtype,251
+ mov al,47
+ call commandonly
+alreadynewgame: mov ax,mousebutton
+ cmp ax,1
+ jnz nonewgame
+ mov getback,3
+nonewgame: ret
+
+ endp
+
+
+
+
+
+
+
+Loadold proc near
+
+ cmp commandtype,252
+ jz alreadyloadold
+ mov commandtype,252
+ mov al,48
+ call commandonly
+alreadyloadold: mov ax,mousebutton
+ and ax,1
+ jz noloadold
+ call doload
+ cmp getback,4
+ jz noloadold
+ call showdecisions
+ call worktoscreenm
+ mov getback,0
+noloadold: ret
+
+ endp
+
+
+
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/sblaster.asm b/devtools/tasmrecover/dreamweb/sblaster.asm
index 113bdd9548..9eb9afc08f 100644
--- a/devtools/tasmrecover/dreamweb/sblaster.asm
+++ b/devtools/tasmrecover/dreamweb/sblaster.asm
@@ -1,1293 +1,1293 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-; Creative Reality Sound Blaster Drivers . (C) 1994 Creative Reality
-
-; Very sparsly commented.
-
-
-
-;These drivers are not stand alone. We had them as an integral part of the
-;game.
-;
-;Put interupt no. into SOUNDINT, base address (eg 220h) into SOUNDBASEADD.
-;If interupt is 255 then no card is assumed.
-;
-;Call soundstartup at beginning of program to test card and initialise.
-;
-;This code assumes that EMS has been initialised
-;Emm page frame is in variable EMMPAGEFRAME. Handle is in EMMHANDLE.
-;
-;Call loadsample with a filename in CS:DX (ie. in the code somewhere)
-;
-;To play a sample call playchannel0 or playchannel1 with sound no. in al.
-;
-;Call endsample to restore interupts and halt sound.
-;
-;
-
-
-
-
-;------------------------------------------- Initial sound set up and end ---
-
-Loadspeech proc near
-
- cmp soundint,255
- jz dontbother8
-
- call cancelch1
-
- mov speechloaded,0
- call createname
-
- mov speechlength,0
- mov dx,offset cs:speechfilename
- call openfilenocheck
- jc dontbother8
-
- mov bx,speechemmpage
-
-moreloadspeech: push dx bx
-
- push es di bx
- mov al,2
- mov dx,emmhandle
- mov ah,44h
- int 67h
- cmp ah,0
- jnz emmerror
- mov ds,emmpageframe
- pop bx di es
- inc bx
- push es di
- mov al,3
- mov dx,emmhandle
- mov ah,44h
- int 67h
- cmp ah,0
- jnz emmerror
- mov ds,emmpageframe
- mov es,emmpageframe
- mov di,8000h
- mov cx,4000h
- mov ax,0
- rep stosw
- pop di es
-
- mov cx,8000h
- mov dx,8000h
- call readfromfile
- mov cl,11
- shr ax,cl
- add speechlength,ax
- pop bx dx
- add bx,2
- cmp ax,0
- jnz moreloadspeech
- call closefile
-
- mov es,sounddata2
- mov di,50*6
- mov ax,speechemmpage
- mov [es:di],al
- mov ax,0
- mov [es:di+1],ax
- mov ax,speechlength
- mov [es:di+3],ax
- mov speechloaded,1
-dontbother8: ret
-
-speechfilename: db "SPEECH\"
-speechfile: db "R24C0005.RAW",0
-
- endp
-
-
-
-Createname proc near
-
- push ax
- mov di,offset cs:speechfile
- mov byte ptr [cs:di+0],dl ;"R"
- mov [cs:di+3],cl
-
- mov al,dh ;reallocation
- mov ah,"0"-1
-findten: inc ah
- sub al,10
- jnc findten
- mov [cs:di+1],ah
- add al,10+"0"
- mov [cs:di+2],al
- pop ax
-
- mov cl,"0"-1
-thousandsc: inc cl
- sub ax,1000
- jnc thousandsc
- add ax,1000
- mov [cs:di+4],cl
- mov cl,"0"-1
-hundredsc: inc cl
- sub ax,100
- jnc hundredsc
- add ax,100
- mov [cs:di+5],cl
- mov cl,"0"-1
-tensc: inc cl
- sub ax,10
- jnc tensc
- add ax,10
- mov [cs:di+6],cl
- add al,"0"
- mov [cs:di+7],al
- ret
-
- endp
-
-
-
-
-
-
-Loadsample proc near
-
- cmp soundint,255
- jz dontbother
-
- call openfile
- call readheader
- mov bx,[es:di]
- push es di bx
- mov ds,sounddata
- pop cx
- mov dx,0
- call readfromfile
- pop di es
-
- add di,2
- mov bx,0
- mov dx,[es:di]
- add dx,1
- shr dx,1
-
- mov soundemmpage,0
-
-moreload: push dx bx
-
- push es di bx
- mov al,2
- mov dx,emmhandle
- mov ah,44h
- int 67h
- cmp ah,0
- jnz emmerror
- mov ds,emmpageframe
- pop bx di es
- inc bx
- push es di
- mov al,3
- mov dx,emmhandle
- mov ah,44h
- int 67h
- cmp ah,0
- jnz emmerror
- mov ds,emmpageframe
- pop di es
-
- mov cx,8000h
- mov dx,8000h
- call readfromfile
- pop bx dx
- add bx,2
- add soundemmpage,2
- dec dx
- jnz moreload
- ;inc soundemmpage
- call closefile
-dontbother: ret
-
-emmerror: mov gameerror,7
- jmp quickquit2
-
- endp
-
-
-
-
-
-
-Loadsecondsample proc near
-
- cmp soundint,255
- jz dontbother9
-
- cmp ch0playing,12
- jc ch0oksecond
- cmp ch0playing,255
- jz ch0oksecond
- call cancelch0
- ;mov cx,100
- ;call hangon
- jmp ch0oksecond
-justcancel: call cancelch0
-ch0oksecond: cmp ch1playing,12
- jc ch1oksecond
- call cancelch1
-
-ch1oksecond: call openfile
- call readheader
- mov bx,[es:di]
- push es di bx
- mov ds,sounddata2
- pop cx
- mov dx,0
- call readfromfile
-
- mov cx,100
- mov di,0
- mov es,sounddata2
- mov bx,soundemmpage
-adjustemmpage: mov al,[es:di]
- add al,bl
- mov [es:di],al
- add di,6
- loop adjustemmpage
-
- pop di es
-
- add di,2
- mov bx,soundemmpage
- mov speechemmpage,bx
- mov dx,[es:di]
- add dx,1
- shr dx,1
-
-moreload2: push dx bx
-
- push es di bx
- mov al,2
- mov dx,emmhandle
- mov ah,44h
- int 67h
- cmp ah,0
- jnz emmerror2
- mov ds,emmpageframe
- pop bx di es
- inc bx
- push es di
- mov al,3
- mov dx,emmhandle
- mov ah,44h
- int 67h
- cmp ah,0
- jnz emmerror2
- mov ds,emmpageframe
- pop di es
-
- mov cx,8000h
- mov dx,8000h
- call readfromfile
- pop bx dx
- add bx,2
- add speechemmpage,2
- dec dx
- jnz moreload2
- call closefile
-dontbother9: ret
-
-emmerror2: mov gameerror,7
- jmp quickquit2
-
- endp
-
-
-
-
-
-
-Soundstartup proc near
-
- cmp soundint,255
- jz dontbother2
-
- mov dx,soundbaseadd
- add dx,0eh
- mov DSP_status,dx
- mov dx,soundbaseadd
- add dx,0ch
- mov DSP_write,dx
-
- mov al,1
- mov dx,soundbaseadd
- add dx,0006h
- out dx,al
- push ax ax ax ax ax ax ax ax
- pop ax ax ax ax ax ax ax ax
- mov al,0
- out dx,al
-
- mov dx,DSP_status
- mov cx,2000
-waitinit: in al,dx
- and al,128
- jz waitinit
- mov dx,soundbaseadd
- add dx,000ah
- in al,dx
- cmp al,0aah
- jz dspready
- loop waitinit
- mov gameerror,2
- jmp quickquit
-
-dspready: call trysoundalloc
-
- cli
- mov ah,40h ;set sample rate
- call out22c
- mov ah,210 ;of 22050Hz
- call out22c
- sti
-
- call checksoundint
-
- mov ah,35h
- mov al,soundint
- add al,8
- int 21h
- mov oldsoundintseg,es ; Save es:bx to temp memory
- mov oldsoundintadd,bx
- push cs
- pop ds
- mov dx,offset cs:dmaend
- mov ah,25h
- mov al,soundint
- add al,8
- int 21h ; Set to new
-
- call enablesoundint
-
- mov al,sounddmachannel
- xor ah,ah
- mov bx,offset cs:dmaaddresses
- add bx,ax
- mov al,[cs:bx]
- mov dmaaddress,al
-
- mov ah,0d1h ;speaker on
- call out22c
- mov ah,0d0h
- call out22c
-
-dontbother2: ret
-
-dmaaddresses db 87h,83h,81h,82h
-
- endp
-
-
-
-
-
-Trysoundalloc proc near
-
- cmp needsoundbuff,1
- jz gotsoundbuff
- inc soundtimes
- mov bx,(16384+2048)/16
- call allocatemem
- mov soundbuffer,ax
- push ax
- mov al,ah
- mov cl,4
- shr al,cl
- mov soundbufferpage,al
- pop ax
- mov cl,4
- shl ax,cl
- mov soundbufferad,ax
- cmp ax,0b7ffh
- jnc soundfail
-
- mov es,soundbuffer
- mov di,0
- mov cx,16384/2
- mov ax,7f7fh
- rep stosw
- mov needsoundbuff,1
- ret
-
-soundfail: mov es,soundbuffer
- call deallocatemem
-gotsoundbuff: ret
-
- endp
-
-
-
-
-
-
-Setsoundoff proc near
-
- cmp soundint,255
- jz dontbother28
- mov soundbufferwrite,0
- cli
- call setupPIT
- mov soundbufferwrite,4096
- call startdmablock
- sti
-dontbother28: ret
-
- endp
-
-
-
-
-
-
-Checksoundint proc near
-
- mov ah,0d3h ;speaker off
- call out22c
-
- mov testresult,0
- mov ah,35h
- mov al,soundint
- add al,8
- int 21h
- mov oldsoundintseg,es
- mov oldsoundintadd,bx
- push cs
- pop ds
- mov dx,offset cs:interupttest
- mov ah,25h
- mov al,soundint
- add al,8
- int 21h
-
- call enablesoundint
-
- mov ah,0f2h
- call out22c
-
- mov cx,20
- call hangon
-
- call disablesoundint
-
- mov dx,oldsoundintseg
- mov ds,dx
- mov dx,oldsoundintadd ;Restore old interupt vector
- mov ah,25h
- mov al,soundint
- add al,8
- int 21h
-
- cmp testresult,1
- jz interuptworked
- mov gameerror,6 ;interupt wrong
- jmp quickquit ;exit to DOS with error
-
-interuptworked: ret
-
- endp
-
-
-
-
-
-Enablesoundint proc near
-
- mov dx,21h ; Enable int?
- in al,dx
- mov currentirq,al
- mov ah,11111110b
- mov cl,soundint
- rol ah,cl
- and al,ah
- out dx,al
- ret
-
- endp
-
-
-
-
-
-Disablesoundint proc near
-
- mov al,soundint
- mov dx,21h
- mov al,currentirq
- out dx,al
- ret
-
- endp
-
-
-
-
-Interupttest proc near
-
- cli
- push ax dx
- mov testresult,1
- mov dx,DSP_status
- in al,dx
- mov al,20h
- out 20h,al
- pop dx ax
- iret
-
- endp
-
-
-
-
-
-Soundend proc near
-
- cmp soundint,255
- jz dontbother3
-
- call getridofPIT
-
- mov ah,0d0h
- call out22c
-
- call disablesoundint
-
- mov ds,oldsoundintseg ;for keys
- mov dx,oldsoundintadd ;Restore old interupt vector
- mov ah,25h
- mov al,soundint
- add al,8
- int 21h
-
-dontbother3: ret
-
- endp
-
-
-
-
-
-Out22c proc near
-
- mov dx,DSP_write
-notclear: in al,dx
- or al,al
- js notclear
- mov al,ah
- out dx,al
- ret
-
- endp
-
-
-
-
-
-;---------------------------------------------------------------------------
-
-
-
-
-Playchannel0 proc near ;al=sound no
- ;ah=times to repeat
- cmp soundint,255
- jz dontbother4
-
- push es ds bx cx di si
-
- mov ch0playing,al
- mov es,sounddata
- cmp al,12
- jc notsecondbank
- mov es,sounddata2
- sub al,12
-notsecondbank: mov ch0repeat,ah
- mov ah,0
- add ax,ax
- mov bx,ax
- add ax,ax
- add bx,ax
-
- mov al,[es:bx]
- mov ah,0
- mov ch0emmpage,ax
- mov ax,[es:bx+1]
- mov ch0offset,ax
- mov ax,[es:bx+3]
- mov ch0blockstocopy,ax
-
- cmp ch0repeat,0
- jz nosetloop
- mov ax,ch0emmpage
- mov ch0oldemmpage,ax
- mov ax,ch0offset
- mov ch0oldoffset,ax
- mov ax,ch0blockstocopy
- mov ch0oldblockstocopy,ax
-
-nosetloop: pop si di cx bx ds es
-
-dontbother4: ret
-
- endp
-
-
-
-
-
-
-
-Playchannel1 proc near ;al=sound no
-
- cmp soundint,255
- jz dontbother5
- cmp ch1playing,7
- jz dontbother5
- push es ds bx cx di si
-
- mov ch1playing,al
- mov es,sounddata
- cmp al,12
- jc notsecondbank1
- mov es,sounddata2
- sub al,12
-notsecondbank1: mov ah,0
- add ax,ax
- mov bx,ax
- add ax,ax
- add bx,ax
-
- mov al,[es:bx]
- mov ah,0
- mov ch1emmpage,ax
- mov ax,[es:bx+1]
- mov ch1offset,ax
- mov ax,[es:bx+3]
- mov ch1blockstocopy,ax
-
- pop si di cx bx ds es
-
-dontbother5: ret
-
- endp
-
-
-
-
-
-
-
-
-Makenextblock proc near
-
- call volumeadjust
-
- call loopchannel0
- cmp ch1blockstocopy,0
- jz mightbeonlych0
- cmp ch0blockstocopy,0
- jz mightbeonlych1
-
- dec ch0blockstocopy
- dec ch1blockstocopy
- call bothchannels
- ret
-
-mightbeonlych1: mov ch0playing,255
- cmp ch1blockstocopy,0
- jz notch1only
- dec ch1blockstocopy
- call channel1only
-notch1only: ret
-
-mightbeonlych0: mov ch1playing,255
- cmp ch0blockstocopy,0
- jz notch0only
- dec ch0blockstocopy
- call channel0only
- ret
-notch0only: mov es,soundbuffer
- mov di,soundbufferwrite
- mov cx,1024
- mov ax,7f7fh
- rep stosw
- and di,16384-1
- mov soundbufferwrite,di
- ret
-
- endp
-
-
-
-
-Volumeadjust proc near
-
- mov al,volumedirection
- cmp al,0
- jz volok
- mov al,volume
- cmp al,volumeto
- jz volfinish
- add volumecount,64
- jnz volok
- mov al,volume
- add al,volumedirection
- mov volume,al
- ret
-volfinish: mov volumedirection,0
-volok: ret
-
- endp
-
-
-
-Loopchannel0 proc near
-
- cmp ch0blockstocopy,0
- jnz notloop
- cmp ch0repeat,0
- jz notloop
- cmp ch0repeat,255
- jz endlessloop
- dec ch0repeat
-endlessloop: mov ax,ch0oldemmpage
- mov ch0emmpage,ax
- mov ax,ch0oldoffset
- mov ch0offset,ax
- mov ax,ch0blockstocopy
- add ax,ch0oldblockstocopy
- mov ch0blockstocopy,ax
- ret
-notloop: ret
-
- endp
-
-
-
-
-
-
-
-Cancelch0 proc near
-
- mov ch0repeat,0
- mov ch0blockstocopy,0
- mov ch0playing,255
- ret
-
- endp
-
-
-
-Cancelch1 proc near
-
- mov ch1blockstocopy,0
- mov ch1playing,255
- ret
-
- endp
-
-
-
-
-Channel0only proc near
-
- call saveems
- mov al,0
- mov bx,ch0emmpage
- mov dx,emmhandle
- mov ah,44h
- int 67h
-
- mov es,soundbuffer
- mov ds,emmpageframe
- mov di,soundbufferwrite
- mov si,ch0offset
-
- call channel0tran
- call restoreems
-
- and di,16384-1
- mov soundbufferwrite,di
- and si,16384-1
- mov ch0offset,si
- cmp si,0
- jnz notch0endofpage0
- inc ch0emmpage
-notch0endofpage0: ret
-
- endp
-
-
-
-
-Channel1only proc near
-
- call saveems
- mov al,1
- mov bx,ch1emmpage
- mov dx,emmhandle
- mov ah,44h
- int 67h
-
- mov es,soundbuffer
- mov ds,emmpageframe
- mov di,soundbufferwrite
- mov si,ch1offset
- add si,16384
-
- mov cx,1024
- rep movsw
- call restoreems
-
- and di,16384-1
- mov soundbufferwrite,di
- and si,16384-1
- mov ch1offset,si
- cmp si,0
- jnz notch1endofpage1
- inc ch1emmpage
-notch1endofpage1: ret
-
- endp
-
-
-
-
-
-Channel0tran proc near
-
- cmp volume,0
- jnz lowvolumetran
- mov cx,1024
- rep movsw
- ret
-
-lowvolumetran: mov cx,1024
- mov bh,volume
- mov bl,0
- add bx,16384-256
-volloop: lodsw
- mov bl,al
- mov al,[es:bx]
- mov bl,ah
- mov ah,[es:bx]
- stosw
- loop volloop
- ret
-
-
- endp
-
-
-
-
-
-
-
-
-Bothchannels proc near ;rather slow routine
- ;to mix two channels
-
- call saveems
- mov al,0
- mov bx,ch0emmpage
- mov dx,emmhandle
- mov ah,44h
- int 67h
- mov al,1
- mov bx,ch1emmpage
- mov dx,emmhandle
- mov ah,44h
- int 67h
-
- mov es,soundbuffer
- mov ds,emmpageframe
- mov di,soundbufferwrite
- mov si,ch0offset
- mov bx,ch1offset
- add bx,16384
- mov cx,2048
- mov dh,128
- mov dl,255
-
- call domix
- call restoreems
-
- and di,16384-1
- mov soundbufferwrite,di
-
- mov si,ch0offset
- add si,2048
- and si,16384-1
- mov ch0offset,si
- cmp si,0
- jnz notbothendofpage0
- inc ch0emmpage
-notbothendofpage0: mov si,ch1offset
- add si,2048
- and si,16384-1
- mov ch1offset,si
- cmp si,0
- jnz notbothendofpage1
- inc ch1emmpage
-notbothendofpage1: ret
-
- endp
-
-
-
-Saveems proc near
-
- mov ah,4eh
- mov al,0
- mov es,soundbuffer
- mov di,16384+2048-256
- int 67h
- ret
-
- endp
-
-
-Restoreems proc near
-
- push si di
- mov ah,4eh
- mov al,1
- mov ds,soundbuffer
- mov si,16384+2048-256
- int 67h
- pop di si
- ret
-
- endp
-
-
-
-Domix proc near
-
- cmp volume,0
- jnz lowvolumemix
-
-slow: lodsb
- mov ah,[bx]
- inc bx
- cmp al,dh
- jnc toplot
-
-botlot: cmp ah,dh
- jnc nodistort
- add al,ah
- js botok
- xor al,al
- stosb
- loop slow
- jmp doneit
-botok: xor al,dh
- stosb
- loop slow
- jmp doneit
-
-toplot: cmp ah,dh
- jc nodistort
- add al,ah
- jns topok
- mov al,dl
- stosb
- loop slow
- jmp doneit
-topok: xor al,dh
- stosb
- loop slow
- jmp doneit
-
-nodistort: add al,ah
- xor al,dh
- stosb
- loop slow
- jmp doneit
-
-
-lowvolumemix: lodsb
- push bx
- mov bh,volume
- add bh,63
- mov bl,al
- mov al,[es:bx]
- pop bx
-
- mov ah,[bx]
- inc bx
- cmp al,dh
- jnc toplotv
-
-botlotv: cmp ah,dh
- jnc nodistortv
- add al,ah
- js botokv
- xor al,al
- stosb
- loop lowvolumemix
- jmp doneit
-botokv: xor al,dh
- stosb
- loop lowvolumemix
- jmp doneit
-
-toplotv: cmp ah,dh
- jc nodistortv
- add al,ah
- jns topokv
- mov al,dl
- stosb
- loop lowvolumemix
- jmp doneit
-topokv: xor al,dh
- stosb
- loop lowvolumemix
- jmp doneit
-
-nodistortv: add al,ah
- xor al,dh
- stosb
- loop lowvolumemix
-doneit: ret
-
-
- endp
-
-
-
-
-
-
-
-Dmaend proc near
-
- cli
- push ax cx dx
- call startdmablock
- mov dx,DSP_status
- in al,dx
- mov al,20h
- out 20h,al
- pop dx cx ax
- iret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Startdmablock proc near
-
- mov al,sounddmachannel ;cx=length
- or al,4 ;bx=offset
- out 0ah,al
- xor al,al
- out 0ch,al
-
- mov al,48h
- or al,sounddmachannel
- out 0bh,al
-
- mov cx,soundbufferad
- xor dh,dh
- mov dl,sounddmachannel
- shl dl,1
- mov al,cl
- out dx,al
- mov al,ch
- out dx,al
-
- mov dl,dmaaddress
- mov al,soundbufferpage ;hardware page
- out dx,al
-
- mov dl,sounddmachannel
- shl dl,1
- inc dl
- mov cx,16384-1
- mov al,cl
- out dx,al
- mov al,ch
- out dx,al
-
- mov al,sounddmachannel
- out 0ah,al ;dmac programmed
-
- mov dx,DSP_write
-notclear1: in al,dx
- or al,al
- js notclear1
- mov al,14h
- out dx,al
-notclear2: in al,dx
- or al,al
- js notclear2
- mov al,cl
- out dx,al
-notclear3: in al,dx
- or al,al
- js notclear3
- mov al,ch
- out dx,al
-
- ret
-
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-SetupPIT proc near
-
- mov ah,35h
- mov al,8
- int 21h
- mov oldint8seg,es ; Save es:bx to temp memory
- mov oldint8add,bx
- push cs
- pop ds
- mov dx,offset cs:PITinterupt
- mov ah,25h
- mov al,8
- int 21h ; Set to new
-
- mov al,34h
- out 43h,al
- mov al,0h
- out 40h,al
- mov al,0dah
- out 40h,al
- ret
-
- endp
-
-
-
-
-
-
-Getridofpit proc near
-
- cmp oldint8seg,-1
- jz noresetPIT
- mov dx,oldint8add
- mov ax,oldint8seg
- mov ds,ax
- mov ah,25h
- mov al,8
- int 21h
- mov al,34h
- out 43h,al
- mov al,0
- out 40h,al
- mov al,0
- out 40h,al
-noresetPIT: ret
-
- endp
-
-
-
-
-
-
-PITinterupt proc near
-
- cli
- push ax dx cx
-
- xor dh,dh
- mov dl,sounddmachannel
- shl dl,1
- in al,dx
- mov cl,al
- in al,dx
- mov ch,al
- sub cx,soundbufferad
- mov ax,soundbufferwrite
- sub ax,cx
- and ax,3fffh
- sti
- cmp ax,8192
- jnc mustgo
- cmp ax,2048
- jnc nopitflip
-
-mustgo: push bx si di es ds
- call makenextblock
- pop ds es di si bx
-
-nopitflip: cli
- mov al,20h
- out 20h,al
- pop cx dx ax
- iret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+; Creative Reality Sound Blaster Drivers . (C) 1994 Creative Reality
+
+; Very sparsly commented.
+
+
+
+;These drivers are not stand alone. We had them as an integral part of the
+;game.
+;
+;Put interupt no. into SOUNDINT, base address (eg 220h) into SOUNDBASEADD.
+;If interupt is 255 then no card is assumed.
+;
+;Call soundstartup at beginning of program to test card and initialise.
+;
+;This code assumes that EMS has been initialised
+;Emm page frame is in variable EMMPAGEFRAME. Handle is in EMMHANDLE.
+;
+;Call loadsample with a filename in CS:DX (ie. in the code somewhere)
+;
+;To play a sample call playchannel0 or playchannel1 with sound no. in al.
+;
+;Call endsample to restore interupts and halt sound.
+;
+;
+
+
+
+
+;------------------------------------------- Initial sound set up and end ---
+
+Loadspeech proc near
+
+ cmp soundint,255
+ jz dontbother8
+
+ call cancelch1
+
+ mov speechloaded,0
+ call createname
+
+ mov speechlength,0
+ mov dx,offset cs:speechfilename
+ call openfilenocheck
+ jc dontbother8
+
+ mov bx,speechemmpage
+
+moreloadspeech: push dx bx
+
+ push es di bx
+ mov al,2
+ mov dx,emmhandle
+ mov ah,44h
+ int 67h
+ cmp ah,0
+ jnz emmerror
+ mov ds,emmpageframe
+ pop bx di es
+ inc bx
+ push es di
+ mov al,3
+ mov dx,emmhandle
+ mov ah,44h
+ int 67h
+ cmp ah,0
+ jnz emmerror
+ mov ds,emmpageframe
+ mov es,emmpageframe
+ mov di,8000h
+ mov cx,4000h
+ mov ax,0
+ rep stosw
+ pop di es
+
+ mov cx,8000h
+ mov dx,8000h
+ call readfromfile
+ mov cl,11
+ shr ax,cl
+ add speechlength,ax
+ pop bx dx
+ add bx,2
+ cmp ax,0
+ jnz moreloadspeech
+ call closefile
+
+ mov es,sounddata2
+ mov di,50*6
+ mov ax,speechemmpage
+ mov [es:di],al
+ mov ax,0
+ mov [es:di+1],ax
+ mov ax,speechlength
+ mov [es:di+3],ax
+ mov speechloaded,1
+dontbother8: ret
+
+speechfilename: db "SPEECH\"
+speechfile: db "R24C0005.RAW",0
+
+ endp
+
+
+
+Createname proc near
+
+ push ax
+ mov di,offset cs:speechfile
+ mov byte ptr [cs:di+0],dl ;"R"
+ mov [cs:di+3],cl
+
+ mov al,dh ;reallocation
+ mov ah,"0"-1
+findten: inc ah
+ sub al,10
+ jnc findten
+ mov [cs:di+1],ah
+ add al,10+"0"
+ mov [cs:di+2],al
+ pop ax
+
+ mov cl,"0"-1
+thousandsc: inc cl
+ sub ax,1000
+ jnc thousandsc
+ add ax,1000
+ mov [cs:di+4],cl
+ mov cl,"0"-1
+hundredsc: inc cl
+ sub ax,100
+ jnc hundredsc
+ add ax,100
+ mov [cs:di+5],cl
+ mov cl,"0"-1
+tensc: inc cl
+ sub ax,10
+ jnc tensc
+ add ax,10
+ mov [cs:di+6],cl
+ add al,"0"
+ mov [cs:di+7],al
+ ret
+
+ endp
+
+
+
+
+
+
+Loadsample proc near
+
+ cmp soundint,255
+ jz dontbother
+
+ call openfile
+ call readheader
+ mov bx,[es:di]
+ push es di bx
+ mov ds,sounddata
+ pop cx
+ mov dx,0
+ call readfromfile
+ pop di es
+
+ add di,2
+ mov bx,0
+ mov dx,[es:di]
+ add dx,1
+ shr dx,1
+
+ mov soundemmpage,0
+
+moreload: push dx bx
+
+ push es di bx
+ mov al,2
+ mov dx,emmhandle
+ mov ah,44h
+ int 67h
+ cmp ah,0
+ jnz emmerror
+ mov ds,emmpageframe
+ pop bx di es
+ inc bx
+ push es di
+ mov al,3
+ mov dx,emmhandle
+ mov ah,44h
+ int 67h
+ cmp ah,0
+ jnz emmerror
+ mov ds,emmpageframe
+ pop di es
+
+ mov cx,8000h
+ mov dx,8000h
+ call readfromfile
+ pop bx dx
+ add bx,2
+ add soundemmpage,2
+ dec dx
+ jnz moreload
+ ;inc soundemmpage
+ call closefile
+dontbother: ret
+
+emmerror: mov gameerror,7
+ jmp quickquit2
+
+ endp
+
+
+
+
+
+
+Loadsecondsample proc near
+
+ cmp soundint,255
+ jz dontbother9
+
+ cmp ch0playing,12
+ jc ch0oksecond
+ cmp ch0playing,255
+ jz ch0oksecond
+ call cancelch0
+ ;mov cx,100
+ ;call hangon
+ jmp ch0oksecond
+justcancel: call cancelch0
+ch0oksecond: cmp ch1playing,12
+ jc ch1oksecond
+ call cancelch1
+
+ch1oksecond: call openfile
+ call readheader
+ mov bx,[es:di]
+ push es di bx
+ mov ds,sounddata2
+ pop cx
+ mov dx,0
+ call readfromfile
+
+ mov cx,100
+ mov di,0
+ mov es,sounddata2
+ mov bx,soundemmpage
+adjustemmpage: mov al,[es:di]
+ add al,bl
+ mov [es:di],al
+ add di,6
+ loop adjustemmpage
+
+ pop di es
+
+ add di,2
+ mov bx,soundemmpage
+ mov speechemmpage,bx
+ mov dx,[es:di]
+ add dx,1
+ shr dx,1
+
+moreload2: push dx bx
+
+ push es di bx
+ mov al,2
+ mov dx,emmhandle
+ mov ah,44h
+ int 67h
+ cmp ah,0
+ jnz emmerror2
+ mov ds,emmpageframe
+ pop bx di es
+ inc bx
+ push es di
+ mov al,3
+ mov dx,emmhandle
+ mov ah,44h
+ int 67h
+ cmp ah,0
+ jnz emmerror2
+ mov ds,emmpageframe
+ pop di es
+
+ mov cx,8000h
+ mov dx,8000h
+ call readfromfile
+ pop bx dx
+ add bx,2
+ add speechemmpage,2
+ dec dx
+ jnz moreload2
+ call closefile
+dontbother9: ret
+
+emmerror2: mov gameerror,7
+ jmp quickquit2
+
+ endp
+
+
+
+
+
+
+Soundstartup proc near
+
+ cmp soundint,255
+ jz dontbother2
+
+ mov dx,soundbaseadd
+ add dx,0eh
+ mov DSP_status,dx
+ mov dx,soundbaseadd
+ add dx,0ch
+ mov DSP_write,dx
+
+ mov al,1
+ mov dx,soundbaseadd
+ add dx,0006h
+ out dx,al
+ push ax ax ax ax ax ax ax ax
+ pop ax ax ax ax ax ax ax ax
+ mov al,0
+ out dx,al
+
+ mov dx,DSP_status
+ mov cx,2000
+waitinit: in al,dx
+ and al,128
+ jz waitinit
+ mov dx,soundbaseadd
+ add dx,000ah
+ in al,dx
+ cmp al,0aah
+ jz dspready
+ loop waitinit
+ mov gameerror,2
+ jmp quickquit
+
+dspready: call trysoundalloc
+
+ cli
+ mov ah,40h ;set sample rate
+ call out22c
+ mov ah,210 ;of 22050Hz
+ call out22c
+ sti
+
+ call checksoundint
+
+ mov ah,35h
+ mov al,soundint
+ add al,8
+ int 21h
+ mov oldsoundintseg,es ; Save es:bx to temp memory
+ mov oldsoundintadd,bx
+ push cs
+ pop ds
+ mov dx,offset cs:dmaend
+ mov ah,25h
+ mov al,soundint
+ add al,8
+ int 21h ; Set to new
+
+ call enablesoundint
+
+ mov al,sounddmachannel
+ xor ah,ah
+ mov bx,offset cs:dmaaddresses
+ add bx,ax
+ mov al,[cs:bx]
+ mov dmaaddress,al
+
+ mov ah,0d1h ;speaker on
+ call out22c
+ mov ah,0d0h
+ call out22c
+
+dontbother2: ret
+
+dmaaddresses db 87h,83h,81h,82h
+
+ endp
+
+
+
+
+
+Trysoundalloc proc near
+
+ cmp needsoundbuff,1
+ jz gotsoundbuff
+ inc soundtimes
+ mov bx,(16384+2048)/16
+ call allocatemem
+ mov soundbuffer,ax
+ push ax
+ mov al,ah
+ mov cl,4
+ shr al,cl
+ mov soundbufferpage,al
+ pop ax
+ mov cl,4
+ shl ax,cl
+ mov soundbufferad,ax
+ cmp ax,0b7ffh
+ jnc soundfail
+
+ mov es,soundbuffer
+ mov di,0
+ mov cx,16384/2
+ mov ax,7f7fh
+ rep stosw
+ mov needsoundbuff,1
+ ret
+
+soundfail: mov es,soundbuffer
+ call deallocatemem
+gotsoundbuff: ret
+
+ endp
+
+
+
+
+
+
+Setsoundoff proc near
+
+ cmp soundint,255
+ jz dontbother28
+ mov soundbufferwrite,0
+ cli
+ call setupPIT
+ mov soundbufferwrite,4096
+ call startdmablock
+ sti
+dontbother28: ret
+
+ endp
+
+
+
+
+
+
+Checksoundint proc near
+
+ mov ah,0d3h ;speaker off
+ call out22c
+
+ mov testresult,0
+ mov ah,35h
+ mov al,soundint
+ add al,8
+ int 21h
+ mov oldsoundintseg,es
+ mov oldsoundintadd,bx
+ push cs
+ pop ds
+ mov dx,offset cs:interupttest
+ mov ah,25h
+ mov al,soundint
+ add al,8
+ int 21h
+
+ call enablesoundint
+
+ mov ah,0f2h
+ call out22c
+
+ mov cx,20
+ call hangon
+
+ call disablesoundint
+
+ mov dx,oldsoundintseg
+ mov ds,dx
+ mov dx,oldsoundintadd ;Restore old interupt vector
+ mov ah,25h
+ mov al,soundint
+ add al,8
+ int 21h
+
+ cmp testresult,1
+ jz interuptworked
+ mov gameerror,6 ;interupt wrong
+ jmp quickquit ;exit to DOS with error
+
+interuptworked: ret
+
+ endp
+
+
+
+
+
+Enablesoundint proc near
+
+ mov dx,21h ; Enable int?
+ in al,dx
+ mov currentirq,al
+ mov ah,11111110b
+ mov cl,soundint
+ rol ah,cl
+ and al,ah
+ out dx,al
+ ret
+
+ endp
+
+
+
+
+
+Disablesoundint proc near
+
+ mov al,soundint
+ mov dx,21h
+ mov al,currentirq
+ out dx,al
+ ret
+
+ endp
+
+
+
+
+Interupttest proc near
+
+ cli
+ push ax dx
+ mov testresult,1
+ mov dx,DSP_status
+ in al,dx
+ mov al,20h
+ out 20h,al
+ pop dx ax
+ iret
+
+ endp
+
+
+
+
+
+Soundend proc near
+
+ cmp soundint,255
+ jz dontbother3
+
+ call getridofPIT
+
+ mov ah,0d0h
+ call out22c
+
+ call disablesoundint
+
+ mov ds,oldsoundintseg ;for keys
+ mov dx,oldsoundintadd ;Restore old interupt vector
+ mov ah,25h
+ mov al,soundint
+ add al,8
+ int 21h
+
+dontbother3: ret
+
+ endp
+
+
+
+
+
+Out22c proc near
+
+ mov dx,DSP_write
+notclear: in al,dx
+ or al,al
+ js notclear
+ mov al,ah
+ out dx,al
+ ret
+
+ endp
+
+
+
+
+
+;---------------------------------------------------------------------------
+
+
+
+
+Playchannel0 proc near ;al=sound no
+ ;ah=times to repeat
+ cmp soundint,255
+ jz dontbother4
+
+ push es ds bx cx di si
+
+ mov ch0playing,al
+ mov es,sounddata
+ cmp al,12
+ jc notsecondbank
+ mov es,sounddata2
+ sub al,12
+notsecondbank: mov ch0repeat,ah
+ mov ah,0
+ add ax,ax
+ mov bx,ax
+ add ax,ax
+ add bx,ax
+
+ mov al,[es:bx]
+ mov ah,0
+ mov ch0emmpage,ax
+ mov ax,[es:bx+1]
+ mov ch0offset,ax
+ mov ax,[es:bx+3]
+ mov ch0blockstocopy,ax
+
+ cmp ch0repeat,0
+ jz nosetloop
+ mov ax,ch0emmpage
+ mov ch0oldemmpage,ax
+ mov ax,ch0offset
+ mov ch0oldoffset,ax
+ mov ax,ch0blockstocopy
+ mov ch0oldblockstocopy,ax
+
+nosetloop: pop si di cx bx ds es
+
+dontbother4: ret
+
+ endp
+
+
+
+
+
+
+
+Playchannel1 proc near ;al=sound no
+
+ cmp soundint,255
+ jz dontbother5
+ cmp ch1playing,7
+ jz dontbother5
+ push es ds bx cx di si
+
+ mov ch1playing,al
+ mov es,sounddata
+ cmp al,12
+ jc notsecondbank1
+ mov es,sounddata2
+ sub al,12
+notsecondbank1: mov ah,0
+ add ax,ax
+ mov bx,ax
+ add ax,ax
+ add bx,ax
+
+ mov al,[es:bx]
+ mov ah,0
+ mov ch1emmpage,ax
+ mov ax,[es:bx+1]
+ mov ch1offset,ax
+ mov ax,[es:bx+3]
+ mov ch1blockstocopy,ax
+
+ pop si di cx bx ds es
+
+dontbother5: ret
+
+ endp
+
+
+
+
+
+
+
+
+Makenextblock proc near
+
+ call volumeadjust
+
+ call loopchannel0
+ cmp ch1blockstocopy,0
+ jz mightbeonlych0
+ cmp ch0blockstocopy,0
+ jz mightbeonlych1
+
+ dec ch0blockstocopy
+ dec ch1blockstocopy
+ call bothchannels
+ ret
+
+mightbeonlych1: mov ch0playing,255
+ cmp ch1blockstocopy,0
+ jz notch1only
+ dec ch1blockstocopy
+ call channel1only
+notch1only: ret
+
+mightbeonlych0: mov ch1playing,255
+ cmp ch0blockstocopy,0
+ jz notch0only
+ dec ch0blockstocopy
+ call channel0only
+ ret
+notch0only: mov es,soundbuffer
+ mov di,soundbufferwrite
+ mov cx,1024
+ mov ax,7f7fh
+ rep stosw
+ and di,16384-1
+ mov soundbufferwrite,di
+ ret
+
+ endp
+
+
+
+
+Volumeadjust proc near
+
+ mov al,volumedirection
+ cmp al,0
+ jz volok
+ mov al,volume
+ cmp al,volumeto
+ jz volfinish
+ add volumecount,64
+ jnz volok
+ mov al,volume
+ add al,volumedirection
+ mov volume,al
+ ret
+volfinish: mov volumedirection,0
+volok: ret
+
+ endp
+
+
+
+Loopchannel0 proc near
+
+ cmp ch0blockstocopy,0
+ jnz notloop
+ cmp ch0repeat,0
+ jz notloop
+ cmp ch0repeat,255
+ jz endlessloop
+ dec ch0repeat
+endlessloop: mov ax,ch0oldemmpage
+ mov ch0emmpage,ax
+ mov ax,ch0oldoffset
+ mov ch0offset,ax
+ mov ax,ch0blockstocopy
+ add ax,ch0oldblockstocopy
+ mov ch0blockstocopy,ax
+ ret
+notloop: ret
+
+ endp
+
+
+
+
+
+
+
+Cancelch0 proc near
+
+ mov ch0repeat,0
+ mov ch0blockstocopy,0
+ mov ch0playing,255
+ ret
+
+ endp
+
+
+
+Cancelch1 proc near
+
+ mov ch1blockstocopy,0
+ mov ch1playing,255
+ ret
+
+ endp
+
+
+
+
+Channel0only proc near
+
+ call saveems
+ mov al,0
+ mov bx,ch0emmpage
+ mov dx,emmhandle
+ mov ah,44h
+ int 67h
+
+ mov es,soundbuffer
+ mov ds,emmpageframe
+ mov di,soundbufferwrite
+ mov si,ch0offset
+
+ call channel0tran
+ call restoreems
+
+ and di,16384-1
+ mov soundbufferwrite,di
+ and si,16384-1
+ mov ch0offset,si
+ cmp si,0
+ jnz notch0endofpage0
+ inc ch0emmpage
+notch0endofpage0: ret
+
+ endp
+
+
+
+
+Channel1only proc near
+
+ call saveems
+ mov al,1
+ mov bx,ch1emmpage
+ mov dx,emmhandle
+ mov ah,44h
+ int 67h
+
+ mov es,soundbuffer
+ mov ds,emmpageframe
+ mov di,soundbufferwrite
+ mov si,ch1offset
+ add si,16384
+
+ mov cx,1024
+ rep movsw
+ call restoreems
+
+ and di,16384-1
+ mov soundbufferwrite,di
+ and si,16384-1
+ mov ch1offset,si
+ cmp si,0
+ jnz notch1endofpage1
+ inc ch1emmpage
+notch1endofpage1: ret
+
+ endp
+
+
+
+
+
+Channel0tran proc near
+
+ cmp volume,0
+ jnz lowvolumetran
+ mov cx,1024
+ rep movsw
+ ret
+
+lowvolumetran: mov cx,1024
+ mov bh,volume
+ mov bl,0
+ add bx,16384-256
+volloop: lodsw
+ mov bl,al
+ mov al,[es:bx]
+ mov bl,ah
+ mov ah,[es:bx]
+ stosw
+ loop volloop
+ ret
+
+
+ endp
+
+
+
+
+
+
+
+
+Bothchannels proc near ;rather slow routine
+ ;to mix two channels
+
+ call saveems
+ mov al,0
+ mov bx,ch0emmpage
+ mov dx,emmhandle
+ mov ah,44h
+ int 67h
+ mov al,1
+ mov bx,ch1emmpage
+ mov dx,emmhandle
+ mov ah,44h
+ int 67h
+
+ mov es,soundbuffer
+ mov ds,emmpageframe
+ mov di,soundbufferwrite
+ mov si,ch0offset
+ mov bx,ch1offset
+ add bx,16384
+ mov cx,2048
+ mov dh,128
+ mov dl,255
+
+ call domix
+ call restoreems
+
+ and di,16384-1
+ mov soundbufferwrite,di
+
+ mov si,ch0offset
+ add si,2048
+ and si,16384-1
+ mov ch0offset,si
+ cmp si,0
+ jnz notbothendofpage0
+ inc ch0emmpage
+notbothendofpage0: mov si,ch1offset
+ add si,2048
+ and si,16384-1
+ mov ch1offset,si
+ cmp si,0
+ jnz notbothendofpage1
+ inc ch1emmpage
+notbothendofpage1: ret
+
+ endp
+
+
+
+Saveems proc near
+
+ mov ah,4eh
+ mov al,0
+ mov es,soundbuffer
+ mov di,16384+2048-256
+ int 67h
+ ret
+
+ endp
+
+
+Restoreems proc near
+
+ push si di
+ mov ah,4eh
+ mov al,1
+ mov ds,soundbuffer
+ mov si,16384+2048-256
+ int 67h
+ pop di si
+ ret
+
+ endp
+
+
+
+Domix proc near
+
+ cmp volume,0
+ jnz lowvolumemix
+
+slow: lodsb
+ mov ah,[bx]
+ inc bx
+ cmp al,dh
+ jnc toplot
+
+botlot: cmp ah,dh
+ jnc nodistort
+ add al,ah
+ js botok
+ xor al,al
+ stosb
+ loop slow
+ jmp doneit
+botok: xor al,dh
+ stosb
+ loop slow
+ jmp doneit
+
+toplot: cmp ah,dh
+ jc nodistort
+ add al,ah
+ jns topok
+ mov al,dl
+ stosb
+ loop slow
+ jmp doneit
+topok: xor al,dh
+ stosb
+ loop slow
+ jmp doneit
+
+nodistort: add al,ah
+ xor al,dh
+ stosb
+ loop slow
+ jmp doneit
+
+
+lowvolumemix: lodsb
+ push bx
+ mov bh,volume
+ add bh,63
+ mov bl,al
+ mov al,[es:bx]
+ pop bx
+
+ mov ah,[bx]
+ inc bx
+ cmp al,dh
+ jnc toplotv
+
+botlotv: cmp ah,dh
+ jnc nodistortv
+ add al,ah
+ js botokv
+ xor al,al
+ stosb
+ loop lowvolumemix
+ jmp doneit
+botokv: xor al,dh
+ stosb
+ loop lowvolumemix
+ jmp doneit
+
+toplotv: cmp ah,dh
+ jc nodistortv
+ add al,ah
+ jns topokv
+ mov al,dl
+ stosb
+ loop lowvolumemix
+ jmp doneit
+topokv: xor al,dh
+ stosb
+ loop lowvolumemix
+ jmp doneit
+
+nodistortv: add al,ah
+ xor al,dh
+ stosb
+ loop lowvolumemix
+doneit: ret
+
+
+ endp
+
+
+
+
+
+
+
+Dmaend proc near
+
+ cli
+ push ax cx dx
+ call startdmablock
+ mov dx,DSP_status
+ in al,dx
+ mov al,20h
+ out 20h,al
+ pop dx cx ax
+ iret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Startdmablock proc near
+
+ mov al,sounddmachannel ;cx=length
+ or al,4 ;bx=offset
+ out 0ah,al
+ xor al,al
+ out 0ch,al
+
+ mov al,48h
+ or al,sounddmachannel
+ out 0bh,al
+
+ mov cx,soundbufferad
+ xor dh,dh
+ mov dl,sounddmachannel
+ shl dl,1
+ mov al,cl
+ out dx,al
+ mov al,ch
+ out dx,al
+
+ mov dl,dmaaddress
+ mov al,soundbufferpage ;hardware page
+ out dx,al
+
+ mov dl,sounddmachannel
+ shl dl,1
+ inc dl
+ mov cx,16384-1
+ mov al,cl
+ out dx,al
+ mov al,ch
+ out dx,al
+
+ mov al,sounddmachannel
+ out 0ah,al ;dmac programmed
+
+ mov dx,DSP_write
+notclear1: in al,dx
+ or al,al
+ js notclear1
+ mov al,14h
+ out dx,al
+notclear2: in al,dx
+ or al,al
+ js notclear2
+ mov al,cl
+ out dx,al
+notclear3: in al,dx
+ or al,al
+ js notclear3
+ mov al,ch
+ out dx,al
+
+ ret
+
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+SetupPIT proc near
+
+ mov ah,35h
+ mov al,8
+ int 21h
+ mov oldint8seg,es ; Save es:bx to temp memory
+ mov oldint8add,bx
+ push cs
+ pop ds
+ mov dx,offset cs:PITinterupt
+ mov ah,25h
+ mov al,8
+ int 21h ; Set to new
+
+ mov al,34h
+ out 43h,al
+ mov al,0h
+ out 40h,al
+ mov al,0dah
+ out 40h,al
+ ret
+
+ endp
+
+
+
+
+
+
+Getridofpit proc near
+
+ cmp oldint8seg,-1
+ jz noresetPIT
+ mov dx,oldint8add
+ mov ax,oldint8seg
+ mov ds,ax
+ mov ah,25h
+ mov al,8
+ int 21h
+ mov al,34h
+ out 43h,al
+ mov al,0
+ out 40h,al
+ mov al,0
+ out 40h,al
+noresetPIT: ret
+
+ endp
+
+
+
+
+
+
+PITinterupt proc near
+
+ cli
+ push ax dx cx
+
+ xor dh,dh
+ mov dl,sounddmachannel
+ shl dl,1
+ in al,dx
+ mov cl,al
+ in al,dx
+ mov ch,al
+ sub cx,soundbufferad
+ mov ax,soundbufferwrite
+ sub ax,cx
+ and ax,3fffh
+ sti
+ cmp ax,8192
+ jnc mustgo
+ cmp ax,2048
+ jnc nopitflip
+
+mustgo: push bx si di es ds
+ call makenextblock
+ pop ds es di si bx
+
+nopitflip: cli
+ mov al,20h
+ out 20h,al
+ pop cx dx ax
+ iret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/sprite.asm b/devtools/tasmrecover/dreamweb/sprite.asm
index 31325fc2b3..bb7ba402f8 100644
--- a/devtools/tasmrecover/dreamweb/sprite.asm
+++ b/devtools/tasmrecover/dreamweb/sprite.asm
@@ -1,5034 +1,5034 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-;------------------------------------------------------------People Routines----
-
-
-
-Reelroutines db 1,44,0 ;Room number and x,y
- dw 20 ;reel pointer
- db 2,0,1 ;speed,speed count,convers. no.
-
- db 1,55,0
- dw 0
- db 50,20,0
-
- db 24,22,0
- dw 74
- db 1,0,0
-
- db 24,33,10
- dw 75
- db 1,0,1
-
- db 1,44,0
- dw 27
- db 2,0,2
-
- db 1,44,0
- dw 96
- db 3,0,4
-
- db 1,44,0
- dw 118
- db 2,0,5
-
- db 1,44,10
- dw 0
- db 2,0,0
-
- db 5,22,20
- dw 53
- db 3,0,0
-
- db 5,22,20
- dw 40
- db 1,0,2
-
- db 5,22,20
- dw 50
- db 1,0,3
-
- db 2,11,10
- dw 192
- db 1,0,0
-
- db 2,11,10
- dw 182
- db 2,0,1
-
- db 8,11,10
- dw 0
- db 2,0,1
-
- db 23,0,50
- dw 0
- db 3,0,0
-
- db 28,11,20
- dw 250
- db 4,0,0
-
- db 23,0,50
- dw 43
- db 2,0,8
-
- db 23,11,40
- dw 130
- db 2,0,1
-
- db 23,22,40
- dw 122
- db 2,0,2
-
- db 23,22,40
- dw 105
- db 2,0,3
-
- db 23,22,40
- dw 81
- db 2,0,4
-
- db 23,11,40
- dw 135
- db 2,0,5
-
- db 23,22,40
- dw 145
- db 2,0,6
-
- db 4,22,30
- dw 0
- db 2,0,0
-
- db 45,22,30
- dw 200
- db 0,0,20
-
- db 45,22,30
- dw 39
- db 2,0,0
-
- db 45,22,30
- dw 25
- db 2,0,0
-
- db 8,22,40
- dw 32
- db 2,0,0
-
- db 7,11,20
- dw 64
- db 2,0,0
-
- db 22,22,20
- dw 82
- db 2,0,0
-
- db 27,11,30
- dw 0
- db 2,0,0
-
- db 20,0,30
- dw 0
- db 2,0,0
-
- db 14,33,40
- dw 21
- db 1,0,0
-
- db 29,11,10
- dw 0
- db 1,0,0
-
- db 2,22,0
- dw 2
- db 2,0,0
-
- db 25,0,50
- dw 4
- db 2,0,0
-
- db 50,22,30
- dw 121
- db 2,0,0
-
- db 50,22,30
- dw 0
- db 20,0,0
-
- db 52,22,30
- dw 192
- db 2,0,0
-
- db 52,22,30
- dw 233
- db 2,0,0
-
- db 50,22,40
- dw 104
- if cd
- if german
- db 65,0,0
- else
- db 55,0,0
- endif
- else
- db 55,0,0
- endif
-
- db 53,33,0
- dw 99
- db 2,0,0
-
- db 50,22,40
- dw 0
- db 3,0,0
-
- db 50,22,30
- dw 162
- db 2,0,0
-
- db 52,22,30
- dw 57
- db 2,0,0
-
- db 52,22,30
- dw 0
- db 2,0,0
-
- db 54,0,0
- dw 72
- db 3,0,0
-
- db 55,44,0
- dw 0
- db 2,0,0
-
- db 19,0,0
- dw 0
- db 28,0,0
-
- db 14,22,0
- dw 2
- db 2,0,0
-
- db 14,22,0
- dw 300
- db 1,0,0
-
- db 10,22,30
- dw 174
- db 0,0,0
-
- db 12,22,20
- dw 0
- db 1,0,0
-
- db 11,11,20
- dw 0
- db 50,20,0
-
- db 11,11,30
- dw 0
- db 50,20,0
-
- db 11,22,20
- dw 0
- db 50,20,0
-
- db 14,33,40
- dw 0
- db 50,20,0
-
- db 255
-
-
-Lenofreelrouts equ $-reelroutines
-
-
-Reelcalls dw gamer,sparkydrip,eden,edeninbath,sparky,smokebloke
- dw manasleep,drunk,receptionist,malefan,femalefan
- dw louis,louischair,soldier1,bossman,interviewer
- dw heavy,manasleep2,mansatstill,drinker,bartender
- dw othersmoker,tattooman,attendant,keeper,candles1
- dw smallcandle,security,copper,poolguard,rockstar
- dw businessman,train,aide,mugger,helicopter
- dw intromagic1,intromusic,intromagic2,candles2,gates
- dw intromagic3,intromonks1,candles,intromonks2
- dw handclap,monkandryan,endgameseq,priest,madman
- dw madmanstelly,alleybarksound,foghornsound
- dw carparkdrip,carparkdrip,carparkdrip,carparkdrip
-
-
-
-;---------------------------------------------------------Character updates----
-
-
-
-Alleybarksound proc near
-
- mov ax,[es:bx+3]
- dec ax
- cmp ax,0
- jnz nobark
- push bx es
- mov al,14
- call playchannel1
- pop es bx
- mov ax,1000
-nobark: mov [es:bx+3],ax
- ret
-
- endp
-
-
-
-
-Intromusic proc near
-
- ret
-
- endp
-
-
-Foghornsound proc near
-
- call randomnumber
- cmp al,198
- jnz nofog
- mov al,13
- call playchannel1
-nofog: ret
-
- endp
-
-
-
-
-Receptionist proc near
-
- call checkspeed
- jnz gotrecep
- cmp cardpassflag,1
- jnz notsetcard
- inc cardpassflag
- mov byte ptr [es:bx+7],1
- mov word ptr [es:bx+3],64
-notsetcard: cmp word ptr [es:bx+3],58
- jnz notdes1
- call randomnumber
- cmp al,30
- jc notdes2
- mov word ptr [es:bx+3],55
- jmp gotrecep
-
-notdes1: cmp word ptr [es:bx+3],60
- jnz notdes2
- call randomnumber
- cmp al,240
- jc gotrecep
- mov word ptr [es:bx+3],53
- jmp gotrecep
-
-notdes2: cmp word ptr [es:bx+3],88
- jnz notendcard
- mov word ptr [es:bx+3],53
- jmp gotrecep
-
-notendcard: inc word ptr [es:bx+3]
-gotrecep: call showgamereel
- call addtopeoplelist
-
- mov al,[es:bx+7]
- and al,128
- jz nottalkedrecep
- mov talkedtorecep,1
-nottalkedrecep: ret
-
- endp
-
-
-
-
-Smokebloke proc near
-
- cmp rockstardead,0
- jnz notspokento
- mov al,[es:bx+7]
- and al,128
- jz notspokento
- push es bx
- mov al,5
- call setlocation
- pop bx es
-notspokento: ;mov al,[es:bx+7]
- ;and al,127
- ;mov [es:bx+7],al
- call checkspeed
- jnz gotsmokeb
- cmp word ptr [es:bx+3],100
- jnz notsmokeb1
- call randomnumber
- cmp al,30
- jc notsmokeb2
- mov word ptr [es:bx+3],96
- jmp gotsmokeb
-
-notsmokeb1: cmp word ptr [es:bx+3],117
- jnz notsmokeb2
- mov word ptr [es:bx+3],96
- jmp gotsmokeb
-
-notsmokeb2: inc word ptr [es:bx+3]
-gotsmokeb: call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Attendant proc near
-
- call showgamereel
- call addtopeoplelist
- mov al,[es:bx+7]
- and al,128
- jz nottalked
- mov talkedtoattendant,1
-nottalked: ret
-
- endp
-
-
-
-
-
-
-Manasleep proc near
-
- mov al,[es:bx+7]
- and al,127
- mov [es:bx+7],al
- call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-Eden proc near
-
- cmp generaldead,0
- jnz notinbed
- call showgamereel
- call addtopeoplelist
-notinbed: ret
-
- endp
-
-
-
-Edeninbath proc near
-
- cmp generaldead,0
- jz notinbed
- cmp sartaindead,0
- jnz notinbath
- call showgamereel
- call addtopeoplelist
-notinbath: ret
-
- endp
-
-
-
-Malefan proc near
-
- call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-Femalefan proc near
-
- call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-
-Louis proc near
-
- cmp rockstardead,0
- jnz notlouis1
- call showgamereel
- call addtopeoplelist
-notlouis1: ret
-
- endp
-
-
-
-
-Louischair proc near
-
- cmp rockstardead,0
- jz notlouis2
- call checkspeed
- jnz notlouisanim
- mov ax,[es:bx+3]
- inc ax
- cmp ax,191
- jz restartlouis
- cmp ax,185
- jz randomlouis
- mov [es:bx+3],ax
- jmp notlouisanim
-randomlouis: mov [es:bx+3],ax
- call randomnumber
- cmp al,245
- jnc notlouisanim
-restartlouis: mov ax,182
- mov [es:bx+3],ax
-notlouisanim: call showgamereel
- call addtopeoplelist
-notlouis2: ret
-
- endp
-
-
-
-Manasleep2 proc near
-
- mov al,[es:bx+7]
- and al,127
- mov [es:bx+7],al
- call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-
-Mansatstill proc near
-
- call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-Tattooman proc near
-
- call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-Drinker proc near
-
- call checkspeed
- jnz gotdrinker
- inc word ptr [es:bx+3]
- cmp word ptr [es:bx+3],115
- jnz notdrinker1
- mov word ptr [es:bx+3],105
- jmp gotdrinker
-
-notdrinker1: cmp word ptr [es:bx+3],106
- jnz gotdrinker
- call randomnumber
- cmp al,3
- jc gotdrinker
- mov word ptr [es:bx+3],105
-
-gotdrinker: call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-
-
-Bartender proc near
-
- call checkspeed
- jnz gotsmoket
- cmp word ptr [es:bx+3],86
- jnz notsmoket1
- call randomnumber
- cmp al,18
- jc notsmoket2
- mov word ptr [es:bx+3],81
- jmp gotsmoket
-
-notsmoket1: cmp word ptr [es:bx+3],103
- jnz notsmoket2
- mov word ptr [es:bx+3],81
- jmp gotsmoket
-
-notsmoket2: inc word ptr [es:bx+3]
-gotsmoket: call showgamereel
- cmp gunpassflag,1
- jnz notgotgun
- mov byte ptr [es:bx+7],9
-notgotgun: call addtopeoplelist
- ret
-
- endp
-
-
-
-
-
-
-
-Othersmoker proc near
-
- call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-
-
-
-Barwoman proc near
-
- call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Interviewer proc near
-
- cmp reeltowatch,68
- jnz notgeneralstart
- inc word ptr [es:bx+3]
-notgeneralstart: cmp word ptr [es:bx+3],250
- jz talking
- call checkspeed
- jnz talking
- cmp word ptr [es:bx+3],259
- jz talking
- inc word ptr [es:bx+3]
-talking: call showgamereel
- ret
-
- endp
-
-
-
-
-
-Soldier1 proc near
-
- cmp word ptr [es:bx+3],0
- jz soldierwait
- mov watchingtime,10
- cmp word ptr [es:bx+3],30
- jnz notaftersshot
- inc combatcount
- cmp combatcount,40
- jnz gotsoldframe
- mov mandead,2
- jmp gotsoldframe
-notaftersshot: call checkspeed
- jnz gotsoldframe
- inc word ptr [es:bx+3]
- jmp gotsoldframe
-soldierwait: cmp lastweapon,1
- jnz gotsoldframe
- mov watchingtime,10
- cmp manspath,2
- jnz gotsoldframe
- cmp facing,4
- jnz gotsoldframe
- inc word ptr [es:bx+3]
- mov lastweapon,-1
- mov combatcount,0
-gotsoldframe: call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-
-
-
-
-
-Rockstar proc near
-
- mov ax,[es:bx+3]
- cmp ax,303
- jz rockcombatend
- cmp ax,118
- jz rockcombatend
- call checkspeed
- jnz rockspeed
-
- mov ax,[es:bx+3]
- inc ax
- cmp ax,118
- jnz notbeforedead
- mov mandead,2
- jmp gotrockframe
-
-notbeforedead: cmp ax,79
- jnz gotrockframe
- dec ax
- cmp lastweapon,1
- jnz notgunonrock
- mov lastweapon,-1
- mov ax,123
- jmp gotrockframe
-notgunonrock: inc combatcount
- cmp combatcount,40
- jnz gotrockframe
- mov combatcount,0
- mov ax,79
-
-gotrockframe: mov [es:bx+3],ax
-rockspeed: call showgamereel
- cmp word ptr [es:bx+3],78
- jnz notalkrock
- call addtopeoplelist
- mov pointermode,2
- mov watchingtime,0
- ret
-
-notalkrock: mov watchingtime,2
- mov pointermode,0
- mov al,mapy
- mov [es:bx+2],al
- ret
-
-rockcombatend: mov newlocation,45
- call showgamereel
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Helicopter proc near
-
- mov ax,[es:bx+3]
- cmp ax,203
- jz heliwon
- ;cmp ax,53
- ;jz helicombatend
- call checkspeed
- jnz helispeed
-
- mov ax,[es:bx+3]
- inc ax
- cmp ax,53
- jnz notbeforehdead
- inc combatcount
- cmp combatcount,8
- jc waitabit
- mov mandead,2
-waitabit: mov ax,49
- jmp gotheliframe
-
-notbeforehdead: cmp ax,9
- jnz gotheliframe
- dec ax
- cmp lastweapon,1
- jnz notgunonheli
- mov lastweapon,-1
- mov ax,55
- jmp gotheliframe
-notgunonheli: mov ax,5
- inc combatcount
- cmp combatcount,20
- jnz gotheliframe
- mov combatcount,0
- mov ax,9
-
-gotheliframe: mov [es:bx+3],ax
-helispeed: call showgamereel
- mov al,mapx
- mov [es:bx+1],al
-helicombatend: mov ax,[es:bx+3]
- cmp ax,9 ;8
- jnc notwaitingheli
- cmp combatcount,7
- jc notwaitingheli
- mov pointermode,2
- mov watchingtime,0
- ret
-notwaitingheli: mov pointermode,0
- mov watchingtime,2
- ret
-
-heliwon: mov pointermode,0
- ret
-
- endp
-
-
-Mugger proc near
-
- mov ax,[es:bx+3]
- cmp ax,138
- jz endmugger1
- cmp ax,176
- jz endmugger2
- cmp ax,2
- jnz havesetwatch
- mov watchingtime,175*2
-havesetwatch: call checkspeed
- jnz notmugger
- inc word ptr [es:bx+3]
-notmugger: call showgamereel
- mov al,mapx
- mov [es:bx+1],al
- ret
-
-endmugger1: push es bx
- call createpanel2
- call showicon
- mov al,41
- call findpuztext
- mov di,33+20
- mov bx,104
- mov dl,241
- mov ah,0
- call printdirect
- call worktoscreen
- mov cx,300
- call hangon
- pop bx es
- push es bx
- mov word ptr [es:bx+3],140
- mov manspath,2
- mov finaldest,2
- call findxyfrompath
- mov resetmanxy,1
- mov al,"W"
- mov ah,"E"
- mov cl,"T"
- mov ch,"A"
- call findexobject
- mov command,al
- mov objecttype,4
- call removeobfrominv
- mov al,"W"
- mov ah,"E"
- mov cl,"T"
- mov ch,"B"
- call findexobject
- mov command,al
- mov objecttype,4
- call removeobfrominv
- call makemainscreen
- mov al,48
- mov bl,68-32
- mov bh,54+64
- mov cx,70 ; time on screen
- mov dx,10 ; pause before show
- call setuptimeduse
- mov beenmugged,1
- pop bx es
- ret
-
-endmugger2: ret
-
-
- endp
-
-
-
-
-
-
-
-
-Aide proc near
-
- call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-
-
-
-Businessman proc near
-
- mov pointermode,0
- mov watchingtime,2
- mov ax,[es:bx+3]
- cmp ax,2
- jnz notfirstbiz
- push ax bx es
- mov al,49
- mov cx,30
- mov dx,1
- mov bl,68
- mov bh,174
- call setuptimeduse
- pop es bx ax
-
-notfirstbiz: cmp ax,95
- jz buscombatwonend
- cmp ax,49
- jz buscombatend
-
- call checkspeed
- jnz busspeed
-
- mov ax,[es:bx+3]
- inc ax
- cmp ax,48
- jnz notbeforedeadb
- mov mandead,2
- jmp gotbusframe
-
-notbeforedeadb: cmp ax,15
- jnz buscombatwon
- dec ax
- cmp lastweapon,3
- jnz notshieldonbus
- mov lastweapon,-1
- mov combatcount,0
- mov ax,51
- jmp gotbusframe
-notshieldonbus: inc combatcount
- cmp combatcount,20
- jnz gotbusframe
- mov combatcount,0
- mov ax,15
- jmp gotbusframe
-
-buscombatwon: cmp ax,91
- jnz gotbusframe
- push bx es
- mov al,0
- call turnpathon
- mov al,1
- call turnpathon
- mov al,2
- call turnpathon
- mov al,3
- call turnpathoff
- mov manspath,5
- mov finaldest,5
- call findxyfrompath
- mov resetmanxy,1
- pop es bx
- mov ax,92
- jmp gotbusframe
-
-gotbusframe: mov [es:bx+3],ax
-busspeed: call showgamereel
- mov al,mapy
- mov [es:bx+2],al
- mov ax,[es:bx+3]
- cmp ax,14
- jnz buscombatend
- mov watchingtime,0
- mov pointermode,2
- ret
-
-buscombatend: ret
-
-buscombatwonend: mov pointermode,0
- mov watchingtime,0
- ret
-
- endp
-
-
-
-
-
-
-Poolguard proc near
-
- mov ax,[es:bx+3]
- cmp ax,214
- jz combatover2
- cmp ax,258
- jz combatover2
- cmp ax,185
- jz combatover1
- cmp ax,0
- jnz notfirstpool
- mov al,0
- call turnpathon
-notfirstpool: call checkspeed
- jnz guardspeed
-
- mov ax,[es:bx+3]
- inc ax
- cmp ax,122
- jnz notendguard1
- dec ax
- cmp lastweapon,2
- jnz notaxeonpool
- mov lastweapon,-1
- mov ax,122
- jmp gotguardframe
-notaxeonpool: inc combatcount
- cmp combatcount,40
- jnz gotguardframe
- mov combatcount,0
- mov ax,195
- jmp gotguardframe
-
-notendguard1: cmp ax,147
- jnz gotguardframe
- dec ax
- cmp lastweapon,1
- jnz notgunonpool
- mov lastweapon,-1
- mov ax,147
- jmp gotguardframe
-notgunonpool: inc combatcount
- cmp combatcount,40
- jnz gotguardframe
- mov combatcount,0
- mov ax,220
-
-gotguardframe: mov [es:bx+3],ax
-guardspeed: call showgamereel
- mov ax,[es:bx+3]
- cmp ax,121
- jz iswaitingpool
- cmp ax,146
- jz iswaitingpool
- mov pointermode,0
- mov watchingtime,2
- ret
-iswaitingpool: mov pointermode,2
- mov watchingtime,0
- ret
-
-combatover1: mov watchingtime,0
- mov pointermode,0
- mov al,0
- call turnpathon
- mov al,1
- call turnpathoff
- ret
-
-combatover2: call showgamereel
- mov watchingtime,2
- mov pointermode,0
- inc combatcount
- cmp combatcount,100
- jc doneover2
- mov watchingtime,0
- mov mandead,2
-doneover2: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Security proc near
-
- cmp word ptr [es:bx+3],32
- jz securwait
- cmp word ptr [es:bx+3],69
- jnz notaftersec
- ret
-notaftersec: mov watchingtime,10
- call checkspeed
- jnz gotsecurframe
- inc word ptr [es:bx+3]
- jmp gotsecurframe
-securwait: cmp lastweapon,1
- jnz gotsecurframe
- mov watchingtime,10
- cmp manspath,9
- jnz gotsecurframe
- cmp facing,0
- jnz gotsecurframe
- mov lastweapon,-1
- inc word ptr [es:bx+3]
-gotsecurframe: call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-
-
-
-Heavy proc near
-
- mov al,[es:bx+7]
- and al,127
- mov [es:bx+7],al
- cmp word ptr [es:bx+3],43
- jz heavywait
- mov watchingtime,10
- cmp word ptr [es:bx+3],70
- jnz notafterhshot
- inc combatcount
- cmp combatcount,80
- jnz gotheavyframe
- mov mandead,2
- jmp gotheavyframe
-notafterhshot: call checkspeed
- jnz gotheavyframe
- inc word ptr [es:bx+3]
- jmp gotheavyframe
-heavywait: cmp lastweapon,1
- jnz gotheavyframe
- cmp manspath,5
- jnz gotheavyframe
- cmp facing,4
- jnz gotheavyframe
- mov lastweapon,-1
- inc word ptr [es:bx+3]
- mov combatcount,0
-gotheavyframe: call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-
-Bossman proc near
-
- call checkspeed
- jnz notboss
- mov ax,[es:bx+3]
- inc ax
- cmp ax,4
- jz firstdes
- cmp ax,20
- jz secdes
- cmp ax,41
- jnz gotallboss
- mov ax,0
- inc gunpassflag
- mov byte ptr [es:bx+7],10
- jmp gotallboss
-firstdes: cmp gunpassflag,1
- jz gotallboss
- push ax
- call randomnumber
- mov cl,al
- pop ax
- cmp cl,10
- jc gotallboss
- mov ax,0
- jmp gotallboss
-secdes: cmp gunpassflag,1
- jz gotallboss
- mov ax,0
-gotallboss: mov [es:bx+3],ax
-notboss: call showgamereel
- call addtopeoplelist
-
- mov al,[es:bx+7]
- and al,128
- jz nottalkedboss
- mov talkedtoboss,1
-nottalkedboss: ret
-
- endp
-
-
-
-
-
-Gamer proc near
-
- call checkspeed
- jnz gamerfin
-gameragain: call randomnum1
- and al,7
- cmp al,5
- jnc gameragain
- add al,20
- cmp al,[es:bx+3]
- jz gameragain
- mov ah,0
- mov [es:bx+3],ax
-gamerfin: call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-
-
-Sparkydrip proc near
-
- call checkspeed
- jnz cantdrip
- mov al,14
- mov ah,0
- call playchannel0
-cantdrip: ret
-
- endp
-
-
-
-Carparkdrip proc near
-
- call checkspeed
- jnz cantdrip2
- mov al,14
- call playchannel1
-cantdrip2: ret
-
- endp
-
-
-
-Keeper proc near
-
- cmp keeperflag,0
- jnz notwaiting
- cmp reeltowatch,190
- jc waiting
- inc keeperflag
- mov ah,[es:bx+7]
- and ah,127
- cmp ah,dreamnumber
- jz notdiff
- mov al,dreamnumber
- mov [es:bx+7],al
-notdiff: ret
-notwaiting: call addtopeoplelist
- call showgamereel
-waiting: ret
-
- endp
-
-
-
-Candles1 proc near
-
- call checkspeed
- jnz candle1
- mov ax,[es:bx+3]
- inc ax
- cmp ax,44
- jnz notendcandle1
- mov ax,39
-notendcandle1: mov [es:bx+3],ax
-candle1: call showgamereel
- ret
-
- endp
-
-
-
-Smallcandle proc near
-
- call checkspeed
- jnz smallcandlef
- mov ax,[es:bx+3]
- inc ax
- cmp ax,37
- jnz notendsmallcandle
- mov ax,25
-notendsmallcandle: mov [es:bx+3],ax
-smallcandlef: call showgamereel
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Intromagic1 proc near
-
- call checkspeed
- jnz introm1fin
- mov ax,[es:bx+3]
- inc ax
- cmp ax,145
- jnz gotintrom1
- mov ax,121
-gotintrom1: mov [es:bx+3],ax
- cmp ax,121
- jnz introm1fin
- inc introcount
- push es bx
- call intro1text
- pop bx es
- cmp introcount,8 ; was 7
- jnz introm1fin
- add mapy,10
- mov nowinnewroom,1
-introm1fin: call showgamereel
- ret
-
- endp
-
-
-
-
-Candles proc near
-
- call checkspeed
- jnz candlesfin
- mov ax,[es:bx+3]
- inc ax
- cmp ax,167
- jnz gotcandles
- mov ax,162
-gotcandles: mov [es:bx+3],ax
-candlesfin: call showgamereel
- ret
-
- endp
-
-
-
-Candles2 proc near
-
- call checkspeed
- jnz candles2fin
- mov ax,[es:bx+3]
- inc ax
- cmp ax,238
- jnz gotcandles2
- mov ax,233
-gotcandles2: mov [es:bx+3],ax
-candles2fin: call showgamereel
- ret
-
- endp
-
-
-
-Gates proc near
-
- call checkspeed
- jnz gatesfin
- mov ax,[es:bx+3]
- inc ax
- cmp ax,116
- jnz notbang
- push ax bx es
- mov al,17 ;12
- call playchannel1
- pop es bx ax
-notbang: cmp ax,110
- jc slowgates
- mov byte ptr [es:bx+5],2
-slowgates: cmp ax,120
- jnz gotgates
- mov getback,1
- mov ax,119
-gotgates: mov [es:bx+3],ax
- push es bx
- call intro3text
- pop bx es
-gatesfin: call showgamereel
- ret
-
- endp
-
-
-
-
-Intromagic2 proc near
-
- call checkspeed
- jnz introm2fin
- mov ax,[es:bx+3]
- inc ax
- cmp ax,216
- jnz gotintrom2
- mov ax,192
-gotintrom2: mov [es:bx+3],ax
-introm2fin: call showgamereel
- ret
-
- endp
-
-
-
-
-Intromagic3 proc near
-
- call checkspeed
- jnz introm3fin
- mov ax,[es:bx+3]
- inc ax
- cmp ax,218
- jnz gotintrom3
- mov getback,1
-gotintrom3: mov [es:bx+3],ax
-introm3fin: call showgamereel
- mov al,mapx
- mov [es:bx+1],al
- ret
-
- endp
-
-
-
-
-
-
-
-Intromonks1 proc near
-
- call checkspeed
- jnz intromonk1fin
- mov ax,[es:bx+3]
- inc ax
- cmp ax,80
- jnz notendmonk1
- add mapy,10
- mov nowinnewroom,1
- call showgamereel
- ret
-notendmonk1: cmp ax,30
- jnz gotintromonk1
- sub mapy,10
- mov nowinnewroom,1
- mov ax,51
-gotintromonk1: mov [es:bx+3],ax
- cmp ax,5
- jz waitstep
- cmp ax,15
- jz waitstep
- cmp ax,25
- jz waitstep
- cmp ax,61
- jz waitstep
- cmp ax,71
- jz waitstep
- jmp intromonk1fin
-waitstep: push es bx
- call intro2text
- pop bx es
- mov byte ptr [es:bx+6],-20
-intromonk1fin: call showgamereel
- mov al,mapy
- mov [es:bx+2],al
- ret
-
- endp
-
-
-
-
-Intromonks2 proc near
-
- call checkspeed
- jnz intromonk2fin
- mov ax,[es:bx+3]
- inc ax
- cmp ax,87
- jnz nottalk1
- inc introcount
- push es bx
- call monks2text
- pop bx es
- cmp introcount,19
- jnz notlasttalk1
- mov ax,87
- jmp gotintromonk2
-notlasttalk1: mov ax,74
- jmp gotintromonk2
-
-nottalk1: cmp ax,110
- jnz notraisearm
- inc introcount
- push es bx
- call monks2text
- pop bx es
- if cd
- if german
- cmp introcount,42
- else
- cmp introcount,35
- endif
- else
- cmp introcount,35
- endif
- jnz notlastraise
- mov ax,111
- jmp gotintromonk2
-notlastraise: mov ax,98
- jmp gotintromonk2
-
-notraisearm: cmp ax,176
- jnz notendmonk2
- mov getback,1
- jmp gotintromonk2
-notendmonk2: cmp ax,125
- jnz gotintromonk2
- mov ax,140
-gotintromonk2: mov [es:bx+3],ax
-intromonk2fin: call showgamereel
- ret
-
- endp
-
-
-
-
-
-Handclap proc near
-
- ret
-
- endp
-
-
-
-
- if german
- if cd
-
-Monks2text proc near
-
- cmp introcount,1
- jnz notmonk2text1
- mov al,8
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text1: cmp introcount,5
- jnz notmonk2text2
- mov al,9
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text2: cmp introcount,9
- jnz notmonk2text3
- mov al,10
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text3: cmp introcount,13
- jnz notmonk2text4
- mov introcount,14
- mov al,11
- mov bl,0
- mov bh,105
- mov cx,100
- jmp gotmonks2text
-notmonk2text4: cmp introcount,19
- jnz notmonk2text7
- mov al,14
- mov bl,36
- mov bh,160
- mov cx,100 ;32
- mov dx,1
- mov ah,82
- jmp setuptimedtemp
-notmonk2text7: cmp introcount,23
- jnz notmonk2text8
- mov al,15
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text8: cmp introcount,27
- jnz notmonk2text9
- mov al,16
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text9: cmp introcount,30
- jnz notmonk2text10
- mov al,17
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text10: cmp introcount,35
- jnz notmonk2text11
- mov al,18
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text11: ret
-
-gotmonks2text: mov dx,1
- mov cx,120
- mov ah,82
- call setuptimedtemp
- ret
-
- endp
-
- else
-
-Monks2text proc near
-
- cmp introcount,1
- jnz notmonk2text1
- mov al,8
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text1: cmp introcount,4
- jnz notmonk2text2
- mov al,9
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text2: cmp introcount,7
- jnz notmonk2text3
- mov al,10
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text3: cmp introcount,10
- jnz notmonk2text4
- if cd
- mov introcount,12
- endif
- mov al,11
- mov bl,0
- mov bh,105
- mov cx,100
- jmp gotmonks2text
-notmonk2text4: cmp introcount,13
- jnz notmonk2text5
- if cd
- mov introcount,17; 18
- ret
- endif
- mov al,12
- mov bl,0
- mov bh,120
- mov cx,100
- jmp gotmonks2text
-notmonk2text5: cmp introcount,16
- jnz notmonk2text6
- mov al,13
- mov bl,0
- mov bh,135
- mov cx,100
- jmp gotmonks2text
-notmonk2text6: cmp introcount,19
- jnz notmonk2text7
- mov al,14
- mov bl,36
- mov bh,160
- mov cx,100 ;32
- mov dx,1
- mov ah,82
- jmp setuptimedtemp
-notmonk2text7: cmp introcount,22
- jnz notmonk2text8
- mov al,15
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text8: cmp introcount,25
- jnz notmonk2text9
- mov al,16
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text9: if cd
- cmp introcount,27
- else
- cmp introcount,28
- endif
- jnz notmonk2text10
- mov al,17
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text10: cmp introcount,31
- jnz notmonk2text11
- mov al,18
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text11: ret
-
-gotmonks2text: mov dx,1
- mov cx,120
- mov ah,82
- call setuptimedtemp
- ret
-
- endp
-
-
- endif
- else
-
-Monks2text proc near
-
- cmp introcount,1
- jnz notmonk2text1
- mov al,8
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text1: cmp introcount,4
- jnz notmonk2text2
- mov al,9
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text2: cmp introcount,7
- jnz notmonk2text3
- mov al,10
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text3: cmp introcount,10
- jnz notmonk2text4
- if cd
- mov introcount,12
- endif
- mov al,11
- mov bl,0
- mov bh,105
- mov cx,100
- jmp gotmonks2text
-notmonk2text4: cmp introcount,13
- jnz notmonk2text5
- if cd
- mov introcount,17; 18
- ret
- endif
- mov al,12
- mov bl,0
- mov bh,120
- mov cx,100
- jmp gotmonks2text
-notmonk2text5: cmp introcount,16
- jnz notmonk2text6
- mov al,13
- mov bl,0
- mov bh,135
- mov cx,100
- jmp gotmonks2text
-notmonk2text6: cmp introcount,19
- jnz notmonk2text7
- mov al,14
- mov bl,36
- mov bh,160
- mov cx,100 ;32
- mov dx,1
- mov ah,82
- jmp setuptimedtemp
-notmonk2text7: cmp introcount,22
- jnz notmonk2text8
- mov al,15
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text8: cmp introcount,25
- jnz notmonk2text9
- mov al,16
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text9: if cd
- cmp introcount,27
- else
- cmp introcount,28
- endif
- jnz notmonk2text10
- mov al,17
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text10: cmp introcount,31
- jnz notmonk2text11
- mov al,18
- mov bl,36
- mov bh,160
- mov cx,100
- jmp gotmonks2text
-notmonk2text11: ret
-
-gotmonks2text: mov dx,1
- mov cx,120
- mov ah,82
- call setuptimedtemp
- ret
-
- endp
-
- endif
-
-
-
-
-
-
-Intro1text proc near
-
- cmp introcount,2
- jnz notintro1text1
- mov al,40
- mov bl,34
- mov bh,130
- mov cx,90
- jmp gotintro1text
-notintro1text1: cmp introcount,4
- jnz notintro1text2
- mov al,41
- mov bl,34
- mov bh,130
- mov cx,90
- jmp gotintro1text
-notintro1text2: cmp introcount,6
- jnz notintro1text3
- mov al,42
- mov bl,34
- mov bh,130
- mov cx,90
- jmp gotintro1text
-notintro1text3: ret
-
-gotintro1text: mov dx,1
- mov ah,82
- if cd
- cmp ch1playing,255
- jz oktalk2
- dec introcount
- ret
- endif
-oktalk2: call setuptimedtemp
- ret
-
- endp
-
-
-
-Intro2text proc near
-
- cmp ax,5
- jnz notintro2text1
- mov al,43
- mov bl,34
- mov bh,40
- mov cx,90
- jmp gotintro2text
-notintro2text1: cmp ax,15
- jnz notintro2text2
- mov al,44
- mov bl,34
- mov bh,40
- mov cx,90
- jmp gotintro2text
-notintro2text2: ret
-
-gotintro2text: mov dx,1
- mov ah,82
- call setuptimedtemp
- ret
-
- endp
-
-
-
-
-
-
-Intro3text proc near
-
- cmp ax,107
- jnz notintro3text1
- mov al,45
- mov bl,36
- mov bh,56
- mov cx,100
- jmp gotintro3text
-notintro3text1: if cd
- cmp ax,108
- else
- cmp ax,109
- endif
- jnz notintro3text2
- mov al,46
- mov bl,36
- mov bh,56
- mov cx,100
- jmp gotintro3text
-notintro3text2: ret
-
-gotintro3text: mov dx,1
- mov ah,82
- call setuptimedtemp
- ret
-
- endp
-
-
-
-
-
-
-
-Monkandryan proc near
-
- call checkspeed
- jnz notmonkryan
- mov ax,[es:bx+3]
- inc ax
- cmp ax,83
- jnz gotmonkryan
- inc introcount
- push es bx
- call textformonk
- pop bx es
- mov ax,77
- cmp introcount,57
- jnz gotmonkryan
- mov getback,1
- ret
-gotmonkryan: mov [es:bx+3],ax
-notmonkryan: call showgamereel
- ret
-
- endp
-
-
-
-
-
-Endgameseq proc near
-
- call checkspeed
- jnz notendseq
- mov ax,[es:bx+3]
- inc ax
- cmp ax,51
- jnz gotendseq
- cmp introcount,140
- jz gotendseq
- inc introcount
- push es bx
- call textforend
- pop bx es
- mov ax,50
-gotendseq: mov [es:bx+3],ax
- cmp ax,134
- jnz notfadedown
- push es bx ax
- call fadescreendownhalf
- pop ax bx es
- jmp notendseq
-notfadedown: cmp ax,324
- jnz notfadeend
- push es bx ax
- call fadescreendowns
- mov volumeto,7
- mov volumedirection,1
- pop ax bx es
-notfadeend: cmp ax,340
- jnz notendseq
- mov getback,1
-notendseq: call showgamereel
- mov al,mapy
- mov [es:bx+2],al
- mov ax,[es:bx+3]
- cmp ax,145
- jnz notendcreds
- mov word ptr [es:bx+3],146
- call rollendcredits
-notendcreds: ret
-
- endp
-
-
-
-
-
-
-Rollendcredits proc near
-
- mov al,16
- mov ah,255
- call playchannel0
- mov volume,7
- mov volumeto,0
- mov volumedirection,-1
-
- mov cl,160
- mov ch,160
- mov di,75
- mov bx,20
- mov ds,mapstore
- mov si,0
- call multiget
-
- mov es,textfile1
- mov si,3*2
- mov ax,[es:si]
- mov si,ax
- add si,textstart
-
- mov cx,254
-endcredits1: push cx
-
- mov bx,10
- mov cx,linespacing
-endcredits2: push cx si di es bx
-
- call vsync
- mov cl,160
- mov ch,160
- mov di,75
- mov bx,20
- mov ds,mapstore
- mov si,0
- call multiput
- call vsync
- pop bx es di si
- push si di es bx
-
- mov cx,18
-onelot: push cx
- mov di,75
- mov dx,161
- mov ax,0
- call printdirect
- add bx,linespacing
- pop cx
- loop onelot
-
- call vsync
- mov cl,160
- mov ch,160
- mov di,75
- mov bx,20
- call multidump
-
- pop bx es di si cx
- dec bx
- loop endcredits2
- pop cx
-looknext: mov al,[es:si]
- inc si
- cmp al,":"
- jz gotnext
- cmp al,0
- jz gotnext
- jmp looknext
-gotnext: loop endcredits1
-
- mov cx,100
- call hangon
- call paneltomap
- call fadescreenuphalf
- ret
-
- endp
-
-
-
-
-
-
-Priest proc near
-
- cmp word ptr [es:bx+3],8
- jz priestspoken
- mov pointermode,0
- mov watchingtime,2
- call checkspeed
- jnz priestwait
- inc word ptr [es:bx+3]
- push es bx
- call priesttext
- pop bx es
-priestwait: ret
-
-priestspoken: ret
-
- endp
-
-
-
-
-
-
-Madmanstelly proc near
-
- mov ax,[es:bx+3]
- inc ax
- cmp ax,307
- jnz notendtelly
- mov ax,300
-notendtelly: mov [es:bx+3],ax
- call showgamereel
- ret
-
- endp
-
-
-
-
-
-Madman proc near
-
- mov watchingtime,2
- call checkspeed
- jnz nomadspeed
- mov ax,[es:bx+3]
- cmp ax,364
- jnc ryansded
- cmp ax,10
- jnz notfirstmad
- push es bx ax
- mov dx,offset cs:introtextname
- call loadtemptext
- pop ax bx es
- mov combatcount,-1
- mov speechcount,0
-notfirstmad: inc ax
- cmp ax,294
- jz madmanspoken
- cmp ax,66
- jnz nomadspeak
- inc combatcount
- push es bx
- call madmantext
- pop bx es
- mov ax,53
- if cd
- cmp combatcount,64
- else
- cmp combatcount,62
- endif
- jc nomadspeak
- if cd
- cmp combatcount,70
- else
- cmp combatcount,68
- endif
- jz killryan
- cmp lastweapon,8
- jnz nomadspeak
- if cd
- mov combatcount,72
- else
- mov combatcount,70
- endif
- mov lastweapon,-1
- mov madmanflag,1
- mov ax,67
- jmp nomadspeak
-killryan: mov ax,310
-nomadspeak: mov [es:bx+3],ax
-nomadspeed: call showgamereel
- mov al,mapx
- mov [es:bx+1],al
- call madmode
- ret
-madmanspoken: cmp wongame,1
- jz alreadywon
- mov wongame,1
- push es bx
- call getridoftemptext
- pop bx es
-alreadywon: ret
-
-ryansded: mov mandead,2
- call showgamereel
- ret
-
- endp
-
-
-
-
-
-
-
-
-
- if cd
-Madmantext proc near
-
- cmp speechcount,63
- jnc nomadtext
- cmp ch1playing,255
- jnz nomadtext
-
- mov al,speechcount
- inc speechcount
- add al,47
- mov bl,72
- mov bh,80
- mov cx,90
- mov dx,1
- mov ah,82
- call setuptimedtemp
-nomadtext: ret
-
- endp
-
- else
-
-Madmantext proc near
-
- cmp combatcount,61
- jnc nomadtext
- mov al,combatcount
- and al,3
- jnz nomadtext
- mov al,combatcount
- shr al,1
- shr al,1
- add al,47
- mov bl,72
- mov bh,80
- mov cx,90
- mov dx,1
- mov ah,82
- call setuptimedtemp
-nomadtext: ret
-
- endp
- endif
-
-
-
-
-Madmode proc near
-
- mov watchingtime,2
- mov pointermode,0
- if cd
- cmp combatcount,65
- else
- cmp combatcount,63
- endif
- jc iswatchmad
- if cd
- cmp combatcount,70
- else
- cmp combatcount,68
- endif
- jnc iswatchmad
- mov pointermode,2
-iswatchmad: ret
-
- endp
-
-
-
-
-
-Priesttext proc near
-
- cmp word ptr [es:bx+3],2
- jc nopriesttext
- cmp word ptr [es:bx+3],7
- jnc nopriesttext
- mov al,[es:bx+3]
- and al,1
- jnz nopriesttext
- mov al,[es:bx+3]
- shr al,1
- add al,50
- mov bl,72
- mov bh,80
- mov cx,54
- mov dx,1
- call setuptimeduse
-nopriesttext: ret
-
- endp
-
-
-
-
-Textforend proc near
-
- cmp introcount,20
- jnz notendtext1
- mov al,0
- mov bl,34
- mov bh,20
- mov cx,60
- jmp gotendtext
-notendtext1: if cd
- cmp introcount,50
- else
- cmp introcount,65
- endif
- jnz notendtext2
- mov al,1
- mov bl,34
- mov bh,20
- mov cx,60
- jmp gotendtext
-notendtext2: if cd
- cmp introcount,85
- else
- cmp introcount,110
- endif
- jnz notendtext3
- mov al,2
- mov bl,34
- mov bh,20
- mov cx,60
- jmp gotendtext
-notendtext3: ret
-
-gotendtext: mov dx,1
- mov ah,83
- call setuptimedtemp
- ret
-
- endp
-
-
-
-
-
-
-
-
-Textformonk proc near
-
- cmp introcount,1
- jnz notmonktext1
- mov al,19
- mov bl,68
- mov bh,154
- mov cx,120
- jmp gotmonktext
-notmonktext1: cmp introcount,5
- jnz notmonktext2
- mov al,20
- mov bl,68
- mov bh,38
- mov cx,120
- jmp gotmonktext
-notmonktext2: cmp introcount,9
- jnz notmonktext3
- mov al,21
- mov bl,48
- mov bh,154
- mov cx,120
- jmp gotmonktext
-notmonktext3: cmp introcount,13
- jnz notmonktext4
- mov al,22
- mov bl,68
- mov bh,38
- mov cx,120
- jmp gotmonktext
-notmonktext4: if cd
- cmp introcount,15
- else
- cmp introcount,17
- endif
- jnz notmonktext5
- mov al,23
- mov bl,68
- mov bh,154
- mov cx,120
- jmp gotmonktext
-notmonktext5: cmp introcount,21
- jnz notmonktext6
- mov al,24
- mov bl,68
- mov bh,38
- mov cx,120
- jmp gotmonktext
-notmonktext6: cmp introcount,25
- jnz notmonktext7
- mov al,25
- mov bl,68
- mov bh,154
- mov cx,120
- jmp gotmonktext
-notmonktext7: cmp introcount,29
- jnz notmonktext8
- mov al,26
- mov bl,68
- mov bh,38
- mov cx,120
- jmp gotmonktext
-notmonktext8: cmp introcount,33
- jnz notmonktext9
- mov al,27
- mov bl,68
- mov bh,154
- mov cx,120
- jmp gotmonktext
-notmonktext9: cmp introcount,37
- jnz notmonktext10
- mov al,28
- mov bl,68
- mov bh,154
- mov cx,120
- jmp gotmonktext
-notmonktext10: cmp introcount,41
- jnz notmonktext11
- mov al,29
- mov bl,68
- mov bh,38
- mov cx,120
- jmp gotmonktext
-notmonktext11: cmp introcount,45
- jnz notmonktext12
- mov al,30
- mov bl,68
- mov bh,154
- mov cx,120
- jmp gotmonktext
-notmonktext12: if cd
- cmp introcount,52
- else
- cmp introcount,49
- endif
- jnz notmonktext13
- mov al,31
- mov bl,68
- mov bh,154
- mov cx,220 ;132
- jmp gotmonktext
-notmonktext13: cmp introcount,53
- jnz notendtitles
- call fadescreendowns
- if cd
- mov volumeto,7
- mov volumedirection,1
- endif
-notendtitles: ret
-
-gotmonktext: mov dx,1
- mov ah,82
- if cd
- cmp ch1playing,255
- jz oktalk
- dec introcount
- ret
- endif
-oktalk: call setuptimedtemp
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Drunk proc near
-
- cmp generaldead,0
- jnz trampgone
- mov al,[es:bx+7]
- and al,127
- mov [es:bx+7],al
- call showgamereel
- call addtopeoplelist
-trampgone: ret
-
- endp
-
-
-Advisor proc near
-
- call checkspeed
- jnz noadvisor
- jmp noadvisor
- mov ax,[es:bx+3]
- inc ax
- cmp ax,123
- jnz notendadvis
- mov ax,106
- jmp gotadvframe
-notendadvis: cmp ax,108
- jnz gotadvframe
- push ax
- call randomnumber
- mov cl,al
- pop ax
- cmp cl,3
- jc gotadvframe
- mov ax,106
-gotadvframe: mov [es:bx+3],ax
-noadvisor: call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-Copper proc near
-
- call checkspeed
- jnz nocopper
- mov ax,[es:bx+3]
- inc ax
- cmp ax,94
- jnz notendcopper
- mov ax,64
- jmp gotcopframe
-notendcopper: cmp ax,81
- jz mightwait
- cmp ax,66
- jnz gotcopframe
-mightwait: push ax
- call randomnumber
- mov cl,al
- pop ax
- cmp cl,7
- jc gotcopframe
- dec ax
-gotcopframe: mov [es:bx+3],ax
-nocopper: call showgamereel
- call addtopeoplelist
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Sparky proc near
-
- cmp card1money,0
- jz animsparky
- mov byte ptr [es:bx+7],3
- jmp animsparky
-
-animsparky: call checkspeed
- jnz finishsparky
- cmp word ptr [es:bx+3],34
- jnz notsparky1
- call randomnumber
- cmp al,30
- jc dosparky
- mov word ptr [es:bx+3],27
- jmp finishsparky
-
-notsparky1: cmp word ptr [es:bx+3],48
- jnz dosparky
- mov word ptr [es:bx+3],27
- jmp finishsparky
-
-dosparky: inc word ptr [es:bx+3]
-finishsparky: call showgamereel
- call addtopeoplelist
-
- mov al,[es:bx+7]
- and al,128
- jz nottalkedsparky
- mov talkedtosparky,1
-nottalkedsparky: ret
-
- endp
-
-
-
-
-
-Train proc near
-
- ret
- mov ax,[es:bx+3]
- cmp ax,21
- jnc notrainyet
- inc ax
- jmp gottrainframe
-notrainyet: call randomnumber
- cmp al,253
- jc notrainatall
- cmp manspath,5
- jnz notrainatall
- cmp finaldest,5
- jnz notrainatall
- mov ax,5
-gottrainframe: mov [es:bx+3],ax
- call showgamereel
-notrainatall: ret
-
- endp
-
-
-
-
-
-
-
-Addtopeoplelist proc near
-
- push es bx bx
- mov cl,[es:bx+7]
- mov ax,[es:bx+3]
- mov bx,listpos
- mov es,buffers
- mov [es:bx],ax ;reel pointer position
- pop ax
- mov [es:bx+2],ax
- mov [es:bx+4],cl ;coversation number
- pop bx es
- add listpos,5
- ret
-
- endp
-
-
-
-Showgamereel proc near
-
- mov ax,[es:bx+3]
- cmp ax,512
- jnc noshow
- mov reelpointer,ax
- push es bx
- call plotreel
- pop bx es
- mov ax,reelpointer
- mov [es:bx+3],ax
-noshow: ret
-
- endp
-
-
-
-
-
-
-Checkspeed proc near
-
- cmp lastweapon,-1
- jnz forcenext
- inc byte ptr [es:bx+6]
- mov al,[es:bx+6]
- cmp al,[es:bx+5]
- jnz notspeed
- mov al,0
- mov [es:bx+6],al
- cmp al,al
-notspeed: ret
-
-forcenext: cmp al,al
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-;------------------------------------------------------------Sprite Routines----
-
-
-
-Clearsprites proc near
-
- mov es,buffers
- mov di,spritetable
- mov al,255
- mov cx,tablesize*16
- rep stosb
- ret
-
- endp
-
-
-
-
-Makesprite proc near ;si holds x,y cx holds update
- ;di,dx holds data offset,seg
- mov es,buffers
- mov bx,spritetable
-$17: cmp byte ptr [es:bx+15],255
- jz $17a
- add bx,tablesize
- jmp $17
-
-$17a: mov [es:bx],cx
- mov [es:bx+10],si
- mov [es:bx+6],dx
- mov [es:bx+8],di
- mov [es:bx+2],0ffffh
- mov byte ptr [es:bx+15],0
- mov byte ptr [es:bx+18],0
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Delsprite proc near
-
- mov di,bx
- mov cx,tablesize
- mov al,255
- rep stosb
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Spriteupdate proc near
-
- mov es,buffers
- mov bx,spritetable
- mov al,ryanon
- mov byte ptr [es:bx+31],al
-
- mov es,buffers
- mov bx,spritetable
- mov cx,16
-$18: push cx bx
- mov ax,[es:bx]
- cmp ax,0ffffh
- jz $18a
- push es ds
- mov cx,[es:bx+2]
- mov [es:bx+24],cx
- call ax
- pop ds es
-$18a: pop bx cx
- cmp nowinnewroom,1
- jz $18b
- add bx,tablesize
- loop $18
-
-$18b: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Printsprites proc near
-
- mov es,buffers
- mov cx,0
-priorityloop: push cx
- mov priority,cl
- mov bx,spritetable
- mov cx,16
-prtspriteloop: push cx bx
- mov ax,[es:bx]
- cmp ax,0ffffh
- jz skipsprite
- mov al,priority
- cmp al,[es:bx+23]
- jnz skipsprite
- cmp byte ptr [es:bx+31],1
- jz skipsprite
- call printasprite
-skipsprite: pop bx cx
- add bx,tablesize
- loop prtspriteloop
- pop cx
- inc cx
- cmp cx,7
- jnz priorityloop
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Printasprite proc near
-
- push es bx
- mov si,bx
- mov ds,[es:si+6]
- mov al,[es:si+11]
- mov ah,0
- cmp al,220
- jc notnegative1
- mov ah,255
-notnegative1: mov bx,ax
- add bx,mapady
- mov al,[es:si+10]
- mov ah,0
- cmp al,220
- jc notnegative2
- mov ah,255
-notnegative2: mov di,ax
- add di,mapadx
- mov al,[es:si+15]
- mov ah,0
- cmp byte ptr [es:si+30],0
- jz steadyframe
- mov ah,8
-steadyframe: cmp priority,6
- jnz notquickp
-notquickp: call showframe
- pop bx es
- ret
-
- endp
-
-
-
-
-;cmp priority,6
-; ;jz quicksprite ; WIll NEED TO DO THIS LATER!!!!!
-;Quicksprite: mov cl,al
-; mov ch,0
-; mov dx,[es:bx+6]
-; mov es,workspace
-; mov ds,dx
-; mov bx,ax
-; mov dx,vgawidth
-;
-;printquickloop: push di si
-;
-; push si
-; add si,cx
-; dec si
-; jmp startzero
-;zeroloop: dec si
-; dec cl
-;startzero: cmp [si],ch
-; jz zeroloop
-; pop si
-;
-;;printquickline: cmp [si],ch
-; jnz foundfirstpix
-; inc si
-; inc di
-; dec cl
-; jnz printquickline
-;
-;foundfirstpix: cmp cl,0
-; jz finquickspr
-; rep movsb
-;
-;finquickspr: pop si di
-; mov cl,bl
-; add si,cx
-; add di,dx
-; dec bh
-; jnz printquickloop
-;
-; pop bx ds es
-; ret
-
-
-
-
-
-
-
-;Calcframe proc near
-;
-; ret
-;
-; mov al,[es:bx+15]
-; mov ah,0
-; mov cx,6
-; mul cx
-; add ax,[es:bx+8]
-;
-; mov dx,[es:bx+6]
-; push bx
-; mov ds,dx
-; mov bx,ax
-; mov ax,[bx]
-; mov cx,[bx+2]
-; mov dx,[bx+4]
-; pop bx
-; mov [es:bx+2],ax
-; add cx,[es:bx+8]
-; add cx,2080
-; mov [es:bx+4],cx ;calculates frame data
-;
-; mov al,[es:bx+10] ;this bit calculates the actual
-; add al,dl ;x and y (including any offset)
-; mov [es:bx+12],al
-; mov al,[es:bx+11]
-; add al,dh
-; mov [es:bx+13],al
-; ret
-;
-; endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Checkone proc near ;cx=x,y to check
-
- push cx
- mov al,ch
- mov ah,0
- mov cl,4
- shr ax,cl
- mov dl,al
- pop cx
- mov al,cl
- mov ah,0
- mov cl,4
- shr ax,cl
- mov ah,dl ; al,ah holds x,y in blocks
-
- push ax
- mov ch,0
- mov cl,al
- push cx
- mov al,ah
- mov ah,0
- mov cx,11
- mul cx
- pop cx
- add ax,cx
-
- mov cx,3
- mul cx
- mov si,ax
-
- mov ds,buffers
- add si,mapflags
- lodsw
- mov cx,ax
- lodsb
- pop dx
- ret
-
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Findsource proc near
-
- mov ax,currentframe
- cmp ax,160
- jnc over1000
- mov ds,reel1
- mov takeoff,0
- ret
-over1000: cmp ax,320
- jnc over1001
- mov ds,reel2
- mov takeoff,160
- ret
-over1001: mov ds,reel3
- mov takeoff,320
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-;---------------------------------------------------------Routines for Ryan----
-
-
-Initman proc near
-
- ;mov linepointer,254
- mov al,ryanx
- mov ah,ryany
- mov si,ax
- mov cx,offset cs:mainman
- mov dx,mainsprites
- mov di,0
- call makesprite
- mov byte ptr [es:bx+23],4
- mov byte ptr [es:bx+22],0
- mov byte ptr [es:bx+29],0
- ret
-
- endp
-
-
-
-
-
-
-
-Mainman proc near
-
- cmp resetmanxy,1
- jnz notinnewroom
- mov resetmanxy,0
- mov al,ryanx
- mov ah,ryany
- mov [es:bx+10],ax
- mov byte ptr [es:bx+29],0
- jmp executewalk
-notinnewroom: dec byte ptr [es:bx+22]
- cmp byte ptr [es:bx+22],-1
- jz executewalk
- ret
-
-
-executewalk: mov byte ptr [es:bx+22],0 ; speed
- mov al,turntoface
- cmp al,facing
- jz facingok
- call aboutturn
- jmp notwalk
-
-facingok: cmp turndirection,0
- jz alreadyturned
- cmp linepointer,254
- jnz alreadyturned
- mov reasseschanges,1
- mov al,facing
- cmp al,leavedirection
- jnz alreadyturned
- call checkforexit
-alreadyturned: mov turndirection,0
- cmp linepointer,254
- jnz walkman
- mov byte ptr [es:bx+29],0
- jmp notwalk
-
-walkman: mov al,[es:bx+29]
- inc al
- cmp al,11
- jnz notanimend1
- mov al,1
-notanimend1: mov [es:bx+29],al
-
- call walking
- cmp linepointer,254
- jz afterwalk
-
- mov al,facing
- and al,1
- jz isdouble
- mov al,[es:bx+29]
- cmp al,2
- jz afterwalk
- cmp al,7
- jz afterwalk
-isdouble: call walking
-afterwalk: cmp linepointer,254
- jnz notwalk
- mov al,turntoface
- cmp al,facing
- jnz notwalk
- mov reasseschanges,1
- mov al,facing
- cmp al,leavedirection
- jnz notwalk
- call checkforexit
-
-notwalk: mov al,facing
- mov ah,0
- mov di,offset cs:facelist
- add di,ax
- mov al,[cs:di]
- add al,[es:bx+29]
- mov [es:bx+15],al
- mov ax,[es:bx+10]
- mov ryanx,al
- mov ryany,ah
- ret
-
-facelist: db 0,60,33,71,11,82,22,93
-
- endp
-
-
-
-
-
-
-
-
-
-
-Aboutturn proc near
-
- cmp turndirection,1
- jz incdir
- cmp turndirection,-1
- jz decdir
- mov al,facing
- sub al,turntoface
- jnc higher
- neg al
- cmp al,4
- jnc decdir
- jmp incdir
-higher: cmp al,4
- jnc incdir
- jmp decdir
-
-incdir: mov turndirection,1
- mov al,facing
- inc al
- and al,7
- mov facing,al
- mov byte ptr [es:bx+29],0
- ret
-
-decdir: mov turndirection,-1
- mov al,facing
- dec al
- and al,7
- mov facing,al
- mov byte ptr [es:bx+29],0
- ret
-
- endp
-
-
-
-
-
-
-
-
-Walking proc near
-
- cmp linedirection,0
- jz normalwalk
- mov al,linepointer
- dec al
- mov linepointer,al
- cmp al,200
- jnc endofline
- jmp continuewalk
-
-normalwalk: mov al,linepointer
- inc al
- mov linepointer,al
- cmp al,linelength
- jnc endofline
-
-continuewalk: mov ah,0
- add ax,ax
- push es bx
- mov dx,seg linedata
- mov es,dx
- mov bx,offset es:linedata
- add bx,ax
- mov ax,[es:bx]
- pop bx es
-stillline: mov [es:bx+10],ax
- ret
-
-endofline: mov linepointer,254
- mov al,destination
- mov manspath,al
- cmp al,finaldest
- jz finishedwalk
- mov al,finaldest
- mov destination,al
- push es bx
- call autosetwalk
- pop bx es
- ret
-
-finishedwalk: call facerightway
- ret
-
- endp
-
-
-
-
-
-
-
-Facerightway proc near
-
- push es bx ;Face object when finished
- call getroomspaths ;walking
- mov al,manspath
- mov ah,0
- add ax,ax
- add ax,ax
- add ax,ax
- add bx,ax
- mov al,[es:bx+7]
- mov turntoface,al
- mov leavedirection,al
- pop bx es
- ret
-
- endp
-
-
-
-
-
-
-
-Checkforexit proc near
-
- mov cl,ryanx ;look under feet to see if
- add cl,12 ;any flags are there
- mov ch,ryany
- add ch,12
- call checkone
- mov lastflag,cl
- mov lastflagex,ch
- mov flagx,dl
- mov flagy,dh
- mov al,lastflag
-
- test al,64
- jz notnewdirect
- mov al,lastflagex
- mov autolocation,al
- ret
-
-notnewdirect: test al,32
- jz notleave
- push es bx
- cmp reallocation,2
- jnz notlouis
- mov bl,0
- push bx
- mov al,"W"
- mov ah,"E"
- mov cl,"T"
- mov ch,"A"
- call isryanholding
- pop bx
- jz noshoe1
- inc bl
-noshoe1: push bx
- mov al,"W"
- mov ah,"E"
- mov cl,"T"
- mov ch,"B"
- call isryanholding
- pop bx
- jz noshoe2
- inc bl
-noshoe2: cmp bl,2
- jz notlouis
- mov al,42
- cmp bl,0
- jz notravmessage
- inc al
-notravmessage: mov cx,80
- mov dx,10
- mov bl,68
- mov bh,64
- call setuptimeduse
- mov al,facing
- add al,4
- and al,7
- mov turntoface,al
- pop bx es
- ret
-
-notlouis: pop bx es
- mov needtotravel,1
- ret
-
-
-
-notleave: test al,4
- jz notaleft
- call adjustleft
- ret
-
-notaleft: test al,2
- jz notaright
- call adjustright
- ret
-
-notaright: test al,8
- jz notadown
- call adjustdown
- ret
-
-notadown: test al,16
- jz notanup
- call adjustup
- ret
-
-notanup: ret
-
- endp
-
-
-
-
-
-Adjustdown proc near
-
- push es bx
- add mapy,10
- mov al,lastflagex
- mov cl,16
- mul cl
- mov [es:bx+11],al
- mov nowinnewroom,1
- pop bx es
- ret
-
- endp
-
-
-
-
-Adjustup proc near
-
- push es bx
- sub mapy,10
- mov al,lastflagex
- mov cl,16
- mul cl
- mov [es:bx+11],al
- mov nowinnewroom,1
- pop bx es
- ret
-
- endp
-
-
-
-
-
-Adjustleft proc near
-
- push es bx
- mov lastflag,0
- sub mapx,11
- mov al,lastflagex
- mov cl,16
- mul cl
- mov [es:bx+10],al
- mov nowinnewroom,1
- pop bx es
- ret
-
- endp
-
-
-
-
-
-
-Adjustright proc near
-
- push es bx
- add mapx,11
- mov al,lastflagex
- mov cl,16
- mul cl
- sub al,2
- mov [es:bx+10],al
- mov nowinnewroom,1
- pop bx es
- ret
-
- endp
-
-
-
-
-
-Reminders proc nar
-
- cmp reallocation,24
- jnz notinedenslift
- cmp mapx,44
- jnz notinedenslift
- cmp progresspoints,0
- jnz notfirst
- mov al,"D"
- mov ah,"K"
- mov cl,"E"
- mov ch,"Y"
- call isryanholding
- jz forgotone
- mov al,"C"
- mov ah,"S"
- mov cl,"H"
- mov ch,"R"
- call findexobject
- cmp al,numexobjects
- jz forgotone
- mov ax,[es:bx+2]
- cmp al,4
- jnz forgotone ;card is in inventory
- cmp ah,255
- jz havegotcard ;card must be in an ex
- mov cl,"P" ;object
- mov ch,"U"
- mov dl,"R"
- mov dh,"S"
- xchg al,ah
- call compare
- jnz forgotone ;is it in wallet?
-havegotcard: inc progresspoints
-notfirst: ret
-
-forgotone: mov al,50 ;message number
- mov bl,54 ;x pos of message
- mov bh,70 ;and y pos
- mov cx,48 ;time on screen
- mov dx,8 ;pause before show
- call setuptimeduse
- ret
-notinedenslift: ret
-
- endp
-
-
-
-
-
-;---------------------------------------------------------------------------
-;
-; Sprite update routines for rain effect
-;
-;---------------------------------------------------------------------------
-
-
-
-
-Initrain proc near
-
- mov es,buffers
- mov di,rainlist
- mov bx,offset cs:rainlocations
-checkmorerain: mov al,[cs:bx]
- cmp al,255
- jz finishinitrain
- cmp al,reallocation
- jnz checkrain
- mov al,[cs:bx+1]
- cmp al,mapx
- jnz checkrain
- mov al,[cs:bx+2]
- cmp al,mapy
- jnz checkrain
- mov al,[cs:bx+3]
- mov rainspace,al
- jmp dorain
-checkrain: add bx,4
- jmp checkmorerain
-
-dorain: mov cx,4
-initraintop: call randomnumber
- and al,31
- add al,3
- cmp al,rainspace
- jnc initraintop
- add cl,al
- cmp cl,mapxsize
- jnc initrainside
- push cx
- call splitintolines
- pop cx
- jmp initraintop
-
-initrainside: mov cl,mapxsize
- dec cl
-initrainside2: call randomnumber
- and al,31
- add al,3
- cmp al,rainspace
- jnc initrainside2
- add ch,al
- cmp ch,mapysize
- jnc finishinitrain
- push cx
- call splitintolines
- pop cx
- jmp initrainside2
-finishinitrain: mov al,255
- stosb
- ret
-
-rainlocations: db 1,44,10,16 ;location,map x,y,seed
- db 4,11,30,14
- db 4,22,30,14
- db 3,33,10,14
- db 10,33,30,14
- db 10,22,30,24
- db 9,22,10,14
- db 2,33,0,14
- db 2,22,0,14
- db 6,11,30,14
- db 7,11,20,18
- db 7,0,20,18
- db 7,0,30,18
- db 55,44,0,14
- db 5,22,30,14
-
- db 8,0,10,18
- db 8,11,10,18
- db 8,22,10,18
- db 8,33,10,18
- db 8,33,20,18
- db 8,33,30,18
- db 8,33,40,18
- db 8,22,40,18
- db 8,11,40,18
-
- db 21,44,20,18
- db 255
-
- endp
-
-
-
-
-
-
-
-
-
-
-Splitintolines proc near
-
-
-lookforlinestart: call getblockofpixel
- cmp al,0
- jnz foundlinestart
- dec cl
- inc ch
- cmp cl,0
- jz endofthisline
- cmp ch,mapysize
- jnc endofthisline
- jmp lookforlinestart
-
-foundlinestart: mov [es:di],cx
- mov bh,1
-lookforlineend: call getblockofpixel
- cmp al,0
- jz foundlineend
- dec cl
- inc ch
- cmp cl,0
- jz foundlineend
- cmp ch,mapysize
- jnc foundlineend
- inc bh
- jmp lookforlineend
-
-foundlineend: push cx
- mov [es:di+2],bh
- call randomnumber
- mov [es:di+3],al
- call randomnumber
- mov [es:di+4],al
- call randomnumber
- and al,3
- add al,4
- mov [es:di+5],al
- add di,6
- pop cx
- cmp cl,0
- jz endofthisline
- cmp ch,mapysize
- jnc endofthisline
- jmp lookforlinestart
-
-endofthisline: ret
-
- endp
-
-
-
-
-Getblockofpixel proc near
-
- push cx es di
- mov ax,mapxstart
- add cl,al
- mov ax,mapystart
- add ch,al
- call checkone
- and cl,1
- jnz failrain
- pop di es cx
- ret
-failrain: pop di es cx
- mov al,0
- ret
-
- endp
-
-
-
-
-Showrain proc near
-
- mov ds,mainsprites
- mov si,6*58
- mov ax,[si+2]
- mov si,ax
- add si,2080
-
- mov bx,rainlist
- mov es,buffers
- cmp byte ptr [es:bx],255
- jz nothunder
-
-morerain: mov es,buffers
- cmp byte ptr [es:bx],255
- jz finishrain
-
- mov al,[es:bx+1]
- mov ah,0
- add ax,mapady
- add ax,mapystart
- mov cx,320
- mul cx
- mov cl,[es:bx]
- mov ch,0
- add ax,cx
- add ax,mapadx
- add ax,mapxstart
- mov di,ax
-
- mov cl,[es:bx+2]
- mov ch,0
- mov ax,[es:bx+3]
- mov dl,[es:bx+5]
- mov dh,0
- sub ax,dx
- and ax,511
- mov [es:bx+3],ax
- add bx,6
-
- push si
- add si,ax
- mov es,workspace
- mov ah,0
- mov dx,320-2
-rainloop: lodsb
- cmp al,ah
- jz noplot
- stosb
- add di,dx
- loop rainloop
- pop si
- jmp morerain
-noplot: add di,320-1
- loop rainloop
- pop si
- jmp morerain
-
-finishrain: cmp ch1blockstocopy,0
- jnz nothunder
- cmp reallocation,2
- jnz notlouisthund
- cmp beenmugged,1
- jnz nothunder
-notlouisthund: cmp reallocation,55
- jz nothunder
- call randomnum1
- cmp al,1
- jnc nothunder
- mov al,7
- cmp ch0playing,6
- jz isthunder1
- mov al,4
-isthunder1: call playchannel1
-nothunder: ret
-
- endp
-
-
-
-
-
-
-
-;---------------------------------------------------------------------------
-;
-; Sprite update routines for background objects
-;
-;---------------------------------------------------------------------------
-
-
-
-
-
-
-Backobject proc near
-
- mov ds,setdat
- mov di,[es:bx+20]
-
- mov al,[es:bx+18]
- cmp al,0
- jz $48z
- dec al
- mov [es:bx+18],al
- jmp finishback
-
-$48z: mov al,[di+7]
- mov [es:bx+18],al
- mov al,[di+8]
- cmp al,6
- jnz notwidedoor
- call widedoor
- jmp finishback
-
-notwidedoor: cmp al,5
- jnz notrandom
- call random
- jmp finishback
-
-notrandom: cmp al,4
- jnz notlockdoor
- call lockeddoorway
- jmp finishback
-
-notlockdoor: cmp al,3
- jnz notlift
- call liftsprite
- jmp finishback
-
-notlift: cmp al,2
- jnz notdoor
- call doorway
- jmp finishback
-
-notdoor: cmp al,1
- jnz steadyob
- call constant
- jmp finishback
-
-steadyob: call steady
-
-finishback: ;call calcframe
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Liftsprite proc near
-
- mov al,liftflag
- cmp al,0
- jz liftclosed
- cmp al,1
- jz liftopen
- cmp al,3
- jz openlift
-
- mov al,[es:bx+19]
- cmp al,0
- jz finishclose
- dec al
- cmp al,11
- jnz pokelift
- push ax
- mov al,3
- call liftnoise
- pop ax
- jmp pokelift
-finishclose: mov liftflag,0
- ret
-
-openlift: mov al,[es:bx+19]
- cmp al,12
- jz endoflist
- inc al
- cmp al,1
- jnz pokelift
- push ax
- mov al,2
- call liftnoise
- pop ax
-pokelift: mov [es:bx+19],al
- mov ah,0
- push di
- add di,ax
- mov al,[di+18]
- pop di
- mov [es:bx+15],al
- mov [di+17],al
- ret
-
-endoflist: mov liftflag,1
- ret
-
-liftopen: mov al,liftpath
- push es bx
- call turnpathon
- pop bx es
- cmp counttoclose,0
- jz nocountclose
- dec counttoclose
- cmp counttoclose,0
- jnz nocountclose
- mov liftflag,2
-nocountclose: mov al,12
- jmp pokelift
-
-liftclosed: mov al,liftpath
- push es bx
- call turnpathoff
- pop bx es
- cmp counttoopen,0
- jz nocountopen
- dec counttoopen
- cmp counttoopen,0
- jnz nocountopen
- mov liftflag,3
-nocountopen: mov al,0
- jmp pokelift
-
- endp
-
-
-Liftnoise proc near
-
- cmp reallocation,5
- jz hissnoise
- cmp reallocation,21
- jz hissnoise
- call playchannel1
- ret
-hissnoise: if demo
- mov al,25
- else
- mov al,13
- endif
- call playchannel1
- ret
-
- endp
-
-
-
-
-Random proc near
-
- call randomnum1
- push di
- and ax,7
- add di,18
- add di,ax
- mov al,[di]
- pop di
- mov [es:bx+15],al
- ret
-
- endp
-
-
-
-
-
-
-
-
-Steady proc near
-
- mov al,[di+18]
- mov [di+17],al
- mov [es:bx+15],al
- ret
-
- endp
-
-
-
-
-
-Constant proc near
-
- inc byte ptr [es:bx+19]
- mov cl,[es:bx+19]
- mov ch,0
- add di,cx
- cmp byte ptr [di+18],255
- jnz gotconst
- sub di,cx
- mov cx,0
- mov [es:bx+19],cl
-gotconst: mov al,[di+18]
- sub di,cx
- mov [es:bx+15],al
- mov [di+17],al
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Doorway proc near
-
- mov doorcheck1,-24
- mov doorcheck2,10
- mov doorcheck3,-30
- mov doorcheck4,10
- call dodoor
- ret
-
- endp
-
-
-
-Widedoor proc near
-
- mov doorcheck1,-24
- mov doorcheck2,24
- mov doorcheck3,-30
- mov doorcheck4,24
- call dodoor
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Dodoor proc near
-
- mov al,ryanx
- mov ah,ryany
- mov cl,[es:bx+10]
- mov ch,[es:bx+11]
-
- cmp al,cl
- jnc rtofdoor
- sub al,cl
- cmp al,doorcheck1
- jnc upordown
- jmp shutdoor
-rtofdoor: sub al,cl
- cmp al,doorcheck2
- jnc shutdoor
-
-upordown: cmp ah,ch
- jnc botofdoor
- sub ah,ch
- cmp ah,doorcheck3
- jc shutdoor
- jmp opendoor
-botofdoor: sub ah,ch
- cmp ah,doorcheck4
- jnc shutdoor
-
-opendoor: mov cl,[es:bx+19]
- cmp throughdoor,1
- jnz notthrough
- cmp cl,0
- jnz notthrough
- mov cl,6
-notthrough: inc cl
- cmp cl,1
- jnz notdoorsound2
- mov al,0
- cmp reallocation,5
- jnz nothoteldoor2
- if demo
- mov al,25
- else
- mov al,13
- endif
-nothoteldoor2: call playchannel1
-notdoorsound2: mov ch,0
-
- push di
- add di,cx
- mov al,[di+18] ; must be a better way than this
- cmp al,255
- jnz atlast1
- dec di
- dec cl
-atlast1: mov [es:bx+19],cl
- mov al,[di+18]
- pop di
- mov [es:bx+15],al
- mov [di+17],al
- mov throughdoor,1
- ret
-
-
-shutdoor: mov cl,[es:bx+19]
- cmp cl,5
- jnz notdoorsound1
- mov al,1
- cmp reallocation,5
- jnz nothoteldoor1
- if demo
- mov al,25
- else
- mov al,13
- endif
-nothoteldoor1: call playchannel1
-notdoorsound1: cmp cl,0
- jz atlast2
- dec cl
- mov [es:bx+19],cl
-atlast2: mov ch,0
- push di
- add di,cx
- mov al,[di+18]
- pop di
- mov [es:bx+15],al
- mov [di+17],al
- cmp cl,5
- jnz notnearly
- mov throughdoor,0
-notnearly: ret
-
- endp
-
-
-
-
-
-
-
-
-Lockeddoorway proc near
-
- mov al,ryanx
- mov ah,ryany
- mov cl,[es:bx+10]
- mov ch,[es:bx+11]
-
- cmp al,cl
- jnc rtofdoor2
- sub al,cl
- cmp al,-24
- jnc upordown2
- jmp shutdoor2
-rtofdoor2: sub al,cl
- cmp al,10
- jnc shutdoor2
-
-upordown2: cmp ah,ch
- jnc botofdoor2
- sub ah,ch
- cmp ah,-30
- jc shutdoor2
- jmp opendoor2
-botofdoor2: sub ah,ch
- cmp ah,12
- jnc shutdoor2
-
-opendoor2: cmp throughdoor,1
- jz mustbeopen
- cmp lockstatus,1
- jz shutdoor
-mustbeopen: mov cl,[es:bx+19]
- cmp cl,1
- jnz notdoorsound4
- mov al,0
- call playchannel1
-notdoorsound4: cmp cl,6 ; was 3
- jnz noturnonyet
- mov al,doorpath
- push es bx
- call turnpathon
- pop bx es
-
-noturnonyet: mov cl,[es:bx+19]
- cmp throughdoor,1
- jnz notthrough2
- cmp cl,0
- jnz notthrough2
- mov cl,6
-notthrough2: inc cl
- mov ch,0
-
- push di
- add di,cx
- mov al,[di+18]
- cmp al,255
- jnz atlast3
- dec di
- dec cl
-atlast3: mov [es:bx+19],cl
- mov al,[di+18]
- pop di
- mov [es:bx+15],al
- mov [di+17],al
- cmp cl,5
- jnz justshutting
- mov throughdoor,1
-justshutting: ret
-
-
-
-shutdoor2: mov cl,[es:bx+19]
- cmp cl,5
- jnz notdoorsound3
- mov al,1
- call playchannel1
-notdoorsound3: cmp cl,0
- jz atlast4
- dec cl
- mov [es:bx+19],cl
-atlast4: mov ch,0
- mov throughdoor,0
- push di
- add di,cx
- mov al,[di+18]
- pop di
- mov [es:bx+15],al
- mov [di+17],al
- cmp cl,0 ;1
- jnz notlocky
- mov al,doorpath
- push es bx
- call turnpathoff
- pop bx es
- mov lockstatus,1
-notlocky: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-;------------------------------------------------------------People handler----
-
-Updatepeople proc near
-
- mov es,buffers
- mov di,peoplelist
- mov listpos,di
- mov cx,12*5
- mov al,255
- rep stosb
-
- inc maintimer
- push cs
- pop es
- mov bx,offset cs:reelroutines
- mov di,offset cs:reelcalls
-updateloop: mov al,[es:bx]
- cmp al,255
- jz endupdate
- cmp al,reallocation
- jnz notinthisroom
- mov cx,[es:bx+1]
- cmp cl,mapx
- jnz notinthisroom
- cmp ch,mapy
- jnz notinthisroom
- push di
- mov ax,[cs:di]
- call ax
- pop di
-notinthisroom: add bx,8
- add di,2
- jmp updateloop
-endupdate: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Getreelframeax proc near
-
- push ds
- mov currentframe,ax
- call findsource
- push ds
- pop es
- pop ds
- mov ax,currentframe
- sub ax,takeoff
- add ax,ax
- mov cx,ax
- add ax,ax
- add ax,cx
- mov bx,ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Reelsonscreen proc near
-
- call reconstruct
- call updatepeople
- call watchreel
- call showrain
- call usetimedtext
- ret
-
- endp
-
-
-
-
-
-
-Plotreel proc near
-
- call getreelstart
-retryreel: push es si
- mov ax,[es:si+2]
- cmp al,220
- jc normalreel
- cmp al,255
- jz normalreel
- call dealwithspecial
- inc reelpointer
- pop si es
- add si,40
- jmp retryreel
-
-normalreel: mov cx,8
-plotloop: push cx es si
- mov ax,[es:si]
- cmp ax,0ffffh
- jz notplot
- call showreelframe
-notplot: pop si es cx
- add si,5
- loop plotloop
- call soundonreels
- pop bx es
- ret
-
- endp
-
-
-
-
-
-Soundonreels proc near
-
- mov bl,reallocation
- add bl,bl
- xor bh,bh
- add bx,offset cs:roombyroom
- mov si,[cs:bx]
-
-reelsoundloop: mov al,[cs:si]
- cmp al,255
- jz endreelsound
- mov ax,[cs:si+1]
- cmp ax,reelpointer
- jnz skipreelsound
-
- cmp ax,lastsoundreel
- jz skipreelsound
-
- mov lastsoundreel,ax
- mov al,[cs:si]
- cmp al,64
- jc playchannel1
- cmp al,128
- jc channel0once
- and al,63
- mov ah,255
- jmp playchannel0
-channel0once: and al,63
- mov ah,0
- jmp playchannel0
-skipreelsound: add si,3
- jmp reelsoundloop
-endreelsound: mov ax,lastsoundreel
- cmp ax,reelpointer
- jz nochange2
- mov lastsoundreel,-1
-nochange2: ret
-
-roombyroom dw r0,r1,r2,r0,r0,r0,r6,r0,r8,r9,r10,r11,r12,r13,r14,r0,r0,r0,r0,r0
- dw r20,r0,r22,r23,r0,r25,r26,r27,r28,r29,r0,r0,r0,r0,r0
- dw r0,r0,r0,r0,r0,r0,r0,r0,r0,r0,r45,r46,r47,r0,r0,r0,r0,r52,r53,r0,r55
-
-r0 db 255
-
-r1 db 15
- dw 257
- db 255
-
-r2 db 12
- dw 5
- db 13
- dw 21
- db 15 ;hitting floor?
- dw 35
- db 17
- dw 50
- db 18
- dw 103
- db 19
- dw 108
- db 255
-
-r6 db 18
- dw 19
- db 19
- dw 23
- db 255
-
-r8 db 12
- dw 51
- db 13
- dw 53
- db 14
- dw 14
- db 15
- dw 20
- db 0
- dw 78
- db 255
-
-r9 db 12
- dw 119
- db 12
- dw 145
- db 255
-
-r10 db 13
- dw 16
- db 255
-
-r11 db 13
- dw 20
- db 255
-
-r12 db 14
- dw 16
- db 255
-
-r13 db 15
- dw 4
- db 16
- dw 8
- db 17
- dw 134
- db 18
- dw 153
- db 255
-
-r14 db 13
- dw 108
- db 15
- dw 326
- db 15
- dw 331
- db 15
- dw 336
- db 15
- dw 342
- db 15
- dw 348
- db 15
- dw 354
- db 18
- dw 159
- db 18
- dw 178
- db 19+128
- dw 217
- db 20+64
- dw 228
- db 255
-
-r20 db 13
- dw 20
- db 13
- dw 21
- db 15
- dw 34
- db 13
- dw 52
- db 13
- dw 55
- db 25
- dw 57
- db 21
- dw 73
- db 255
-
-r22 db 13 ;room,sample
- dw 196 ;reelpointer
- db 13
- dw 234
- db 13
- dw 156
- db 14
- dw 129
- db 13
- dw 124
- db 15
- dw 162
- db 15
- dw 200
- db 15
- dw 239
- db 17
- dw 99
- db 12
- dw 52
- db 255
-
-r23 db 15
- dw 56
- db 16
- dw 64
- db 19
- dw 22
- db 20
- dw 33
- db 255
-
-r25 db 20
- dw 11
- db 20
- dw 15
- db 15
- dw 28
- db 13
- dw 80
- db 21
- dw 82
- db 19+128
- dw 87
- db 23+64
- dw 128
- db 255
-
-r26 db 12
- dw 13
- db 14
- dw 39
- db 12
- dw 67
- db 12
- dw 75
- db 12
- dw 83
- db 12
- dw 91
- db 15
- dw 102 ; was 90, should be mine cart
- db 255
-
-r27 db 22
- dw 36
- db 13
- dw 125
- db 18
- dw 88
- db 15
- dw 107
- db 14
- dw 127
- db 14
- dw 154
- db 19+128
- dw 170
- db 23+64
- dw 232
- db 255
-
-r28 db 21
- dw 16
- db 21
- dw 72
- db 21
- dw 205
- db 22
- dw 63 ;65
- db 23+128
- dw 99
- db 24+64
- dw 158
- db 255
-
-r29 db 13
- dw 21
- db 14
- dw 24
- db 19+128
- dw 50
- db 23+64
- dw 75
- if german
- else
- db 24
- dw 128
- endif
- db 255
-
-r45 db 19+64
- dw 46
- db 16
- dw 167
- db 255
-
-r46 db 16
- dw 19
- db 14
- dw 36
- db 16
- dw 50
- db 14
- dw 65
- db 16
- dw 81
- db 14
- dw 96
- db 16
- dw 114
- db 14
- dw 129
- db 16
- dw 147
- db 14
- dw 162
- db 16
- dw 177
- db 14
- dw 191
- db 255
-
-r47 db 13
- dw 48
- db 14
- dw 41
- db 15
- dw 78
- db 16
- dw 92
- db 255
-
-r52 db 16
- dw 115
- db 255
-
-r53 db 21
- dw 103
- db 20
- dw 199
- db 255
-
-r55 db 17
- dw 53
- db 17
- dw 54
- db 17
- dw 55
- db 17
- dw 56
- db 17
- dw 57
- db 17
- dw 58
- db 17
- dw 59
- db 17
- dw 61
- db 17
- dw 63
- db 17
- dw 64
- db 17
- dw 65
- db 255
-
- endp
-
-
-
-
-
-
-
-
-
-Reconstruct proc near
-
- cmp havedoneobs,0
- jz noneedtorecon
- mov newobs,1
- call drawfloor
- call spriteupdate
- call printsprites
- if foreign
- cmp reallocation,20
- jnz notfudge
- call undertextline
-notfudge:
- endif
- mov havedoneobs,0
-noneedtorecon: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Dealwithspecial proc near
-
- sub al,220
- cmp al,0
- jnz notplset
- mov al,ah
- call placesetobject
- mov havedoneobs,1
- ret
-notplset: cmp al,1
- jnz notremset
- mov al,ah
- call removesetobject
- mov havedoneobs,1
- ret
-notremset: cmp al,2
- jnz notplfree
- mov al,ah
- call placefreeobject
- mov havedoneobs,1
- ret
-notplfree: cmp al,3
- jnz notremfree
- mov al,ah
- call removefreeobject
- mov havedoneobs,1
- ret
-notremfree: cmp al,4
- jnz notryanoff
- call switchryanoff
- ret
-notryanoff: cmp al,5
- jnz notryanon
- mov turntoface,ah
- mov facing,ah
- call switchryanon
- ret
-notryanon: cmp al,6
- jnz notchangeloc
- mov newlocation,ah ; was new loc in watch
- ;call switchryanon
- ret
-notchangeloc: call movemap
- ret
-
- endp
-
-
-
-Movemap proc near
-
- cmp ah,32
- jnz notmapup2
- sub mapy,20
- mov nowinnewroom,1
- ret
-
-notmapup2: cmp ah,16
- jnz notmapupspec
- sub mapy,10
- mov nowinnewroom,1
- ret
-
-notmapupspec: cmp ah,8
- jnz notmapdownspec
- add mapy,10
- mov nowinnewroom,1
- ret
-
-notmapdownspec: cmp ah,2
- jnz notmaprightspec
- add mapx,11
- mov nowinnewroom,1
- ret
-
-notmaprightspec: sub mapx,11
- mov nowinnewroom,1
- ret
-
- endp
-
-
-
-
-Getreelstart proc near
-
- mov ax,reelpointer
- mov cx,40
- mul cx
- mov es,reels
- mov si,ax
- add si,reellist
- ret
-
- endp
-
-
-
-
-
-;------------------------------------------------------Printing a reel frame----
-
-
-
-Showreelframe proc near
-
- mov al,[es:si+2]
- mov ah,0
- mov di,ax
- add di,mapadx
- mov al,[es:si+3]
- mov bx,ax
- add bx,mapady
- mov ax,[es:si]
- mov currentframe,ax
- call findsource
- mov ax,currentframe
- sub ax,takeoff
- mov ah,8
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-;-------------------------------------------------------------------------------
-
-
-
-
-
-
-
-
-
-Deleverything proc near
-
- mov al,mapysize
- mov ah,0
- add ax,mapoffsety
- cmp ax,182
- jnc bigroom
- call maptopanel
- ret
-bigroom: sub mapysize,8
- call maptopanel
- add mapysize,8
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Dumpeverything proc near
-
- mov es,buffers
- mov bx,printedlist
-dumpevery1: mov ax,[es:bx]
- mov cx,[es:bx+2]
- cmp ax,0ffffh
- jz finishevery1
- cmp ax,[es:bx+(40*5)]
- jnz notskip1
- cmp cx,[es:bx+(40*5)+2]
- jz skip1
-
-notskip1: push bx es ds
- mov bl,ah
- mov bh,0
- mov ah,0
- mov di,ax
- add di,mapadx
- add bx,mapady
- call multidump
- pop ds es bx
-
-skip1: add bx,5
- jmp dumpevery1
-
-finishevery1: mov bx,printedlist+(40*5)
-dumpevery2: mov ax,[es:bx]
- mov cx,[es:bx+2]
- cmp ax,0ffffh
- jz finishevery2
-
- push bx es ds
- mov bl,ah
- mov bh,0
- mov ah,0
- mov di,ax
- add di,mapadx
- add bx,mapady
- call multidump
- pop ds es bx
- add bx,5
- jmp dumpevery2
-
-finishevery2: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+;------------------------------------------------------------People Routines----
+
+
+
+Reelroutines db 1,44,0 ;Room number and x,y
+ dw 20 ;reel pointer
+ db 2,0,1 ;speed,speed count,convers. no.
+
+ db 1,55,0
+ dw 0
+ db 50,20,0
+
+ db 24,22,0
+ dw 74
+ db 1,0,0
+
+ db 24,33,10
+ dw 75
+ db 1,0,1
+
+ db 1,44,0
+ dw 27
+ db 2,0,2
+
+ db 1,44,0
+ dw 96
+ db 3,0,4
+
+ db 1,44,0
+ dw 118
+ db 2,0,5
+
+ db 1,44,10
+ dw 0
+ db 2,0,0
+
+ db 5,22,20
+ dw 53
+ db 3,0,0
+
+ db 5,22,20
+ dw 40
+ db 1,0,2
+
+ db 5,22,20
+ dw 50
+ db 1,0,3
+
+ db 2,11,10
+ dw 192
+ db 1,0,0
+
+ db 2,11,10
+ dw 182
+ db 2,0,1
+
+ db 8,11,10
+ dw 0
+ db 2,0,1
+
+ db 23,0,50
+ dw 0
+ db 3,0,0
+
+ db 28,11,20
+ dw 250
+ db 4,0,0
+
+ db 23,0,50
+ dw 43
+ db 2,0,8
+
+ db 23,11,40
+ dw 130
+ db 2,0,1
+
+ db 23,22,40
+ dw 122
+ db 2,0,2
+
+ db 23,22,40
+ dw 105
+ db 2,0,3
+
+ db 23,22,40
+ dw 81
+ db 2,0,4
+
+ db 23,11,40
+ dw 135
+ db 2,0,5
+
+ db 23,22,40
+ dw 145
+ db 2,0,6
+
+ db 4,22,30
+ dw 0
+ db 2,0,0
+
+ db 45,22,30
+ dw 200
+ db 0,0,20
+
+ db 45,22,30
+ dw 39
+ db 2,0,0
+
+ db 45,22,30
+ dw 25
+ db 2,0,0
+
+ db 8,22,40
+ dw 32
+ db 2,0,0
+
+ db 7,11,20
+ dw 64
+ db 2,0,0
+
+ db 22,22,20
+ dw 82
+ db 2,0,0
+
+ db 27,11,30
+ dw 0
+ db 2,0,0
+
+ db 20,0,30
+ dw 0
+ db 2,0,0
+
+ db 14,33,40
+ dw 21
+ db 1,0,0
+
+ db 29,11,10
+ dw 0
+ db 1,0,0
+
+ db 2,22,0
+ dw 2
+ db 2,0,0
+
+ db 25,0,50
+ dw 4
+ db 2,0,0
+
+ db 50,22,30
+ dw 121
+ db 2,0,0
+
+ db 50,22,30
+ dw 0
+ db 20,0,0
+
+ db 52,22,30
+ dw 192
+ db 2,0,0
+
+ db 52,22,30
+ dw 233
+ db 2,0,0
+
+ db 50,22,40
+ dw 104
+ if cd
+ if german
+ db 65,0,0
+ else
+ db 55,0,0
+ endif
+ else
+ db 55,0,0
+ endif
+
+ db 53,33,0
+ dw 99
+ db 2,0,0
+
+ db 50,22,40
+ dw 0
+ db 3,0,0
+
+ db 50,22,30
+ dw 162
+ db 2,0,0
+
+ db 52,22,30
+ dw 57
+ db 2,0,0
+
+ db 52,22,30
+ dw 0
+ db 2,0,0
+
+ db 54,0,0
+ dw 72
+ db 3,0,0
+
+ db 55,44,0
+ dw 0
+ db 2,0,0
+
+ db 19,0,0
+ dw 0
+ db 28,0,0
+
+ db 14,22,0
+ dw 2
+ db 2,0,0
+
+ db 14,22,0
+ dw 300
+ db 1,0,0
+
+ db 10,22,30
+ dw 174
+ db 0,0,0
+
+ db 12,22,20
+ dw 0
+ db 1,0,0
+
+ db 11,11,20
+ dw 0
+ db 50,20,0
+
+ db 11,11,30
+ dw 0
+ db 50,20,0
+
+ db 11,22,20
+ dw 0
+ db 50,20,0
+
+ db 14,33,40
+ dw 0
+ db 50,20,0
+
+ db 255
+
+
+Lenofreelrouts equ $-reelroutines
+
+
+Reelcalls dw gamer,sparkydrip,eden,edeninbath,sparky,smokebloke
+ dw manasleep,drunk,receptionist,malefan,femalefan
+ dw louis,louischair,soldier1,bossman,interviewer
+ dw heavy,manasleep2,mansatstill,drinker,bartender
+ dw othersmoker,tattooman,attendant,keeper,candles1
+ dw smallcandle,security,copper,poolguard,rockstar
+ dw businessman,train,aide,mugger,helicopter
+ dw intromagic1,intromusic,intromagic2,candles2,gates
+ dw intromagic3,intromonks1,candles,intromonks2
+ dw handclap,monkandryan,endgameseq,priest,madman
+ dw madmanstelly,alleybarksound,foghornsound
+ dw carparkdrip,carparkdrip,carparkdrip,carparkdrip
+
+
+
+;---------------------------------------------------------Character updates----
+
+
+
+Alleybarksound proc near
+
+ mov ax,[es:bx+3]
+ dec ax
+ cmp ax,0
+ jnz nobark
+ push bx es
+ mov al,14
+ call playchannel1
+ pop es bx
+ mov ax,1000
+nobark: mov [es:bx+3],ax
+ ret
+
+ endp
+
+
+
+
+Intromusic proc near
+
+ ret
+
+ endp
+
+
+Foghornsound proc near
+
+ call randomnumber
+ cmp al,198
+ jnz nofog
+ mov al,13
+ call playchannel1
+nofog: ret
+
+ endp
+
+
+
+
+Receptionist proc near
+
+ call checkspeed
+ jnz gotrecep
+ cmp cardpassflag,1
+ jnz notsetcard
+ inc cardpassflag
+ mov byte ptr [es:bx+7],1
+ mov word ptr [es:bx+3],64
+notsetcard: cmp word ptr [es:bx+3],58
+ jnz notdes1
+ call randomnumber
+ cmp al,30
+ jc notdes2
+ mov word ptr [es:bx+3],55
+ jmp gotrecep
+
+notdes1: cmp word ptr [es:bx+3],60
+ jnz notdes2
+ call randomnumber
+ cmp al,240
+ jc gotrecep
+ mov word ptr [es:bx+3],53
+ jmp gotrecep
+
+notdes2: cmp word ptr [es:bx+3],88
+ jnz notendcard
+ mov word ptr [es:bx+3],53
+ jmp gotrecep
+
+notendcard: inc word ptr [es:bx+3]
+gotrecep: call showgamereel
+ call addtopeoplelist
+
+ mov al,[es:bx+7]
+ and al,128
+ jz nottalkedrecep
+ mov talkedtorecep,1
+nottalkedrecep: ret
+
+ endp
+
+
+
+
+Smokebloke proc near
+
+ cmp rockstardead,0
+ jnz notspokento
+ mov al,[es:bx+7]
+ and al,128
+ jz notspokento
+ push es bx
+ mov al,5
+ call setlocation
+ pop bx es
+notspokento: ;mov al,[es:bx+7]
+ ;and al,127
+ ;mov [es:bx+7],al
+ call checkspeed
+ jnz gotsmokeb
+ cmp word ptr [es:bx+3],100
+ jnz notsmokeb1
+ call randomnumber
+ cmp al,30
+ jc notsmokeb2
+ mov word ptr [es:bx+3],96
+ jmp gotsmokeb
+
+notsmokeb1: cmp word ptr [es:bx+3],117
+ jnz notsmokeb2
+ mov word ptr [es:bx+3],96
+ jmp gotsmokeb
+
+notsmokeb2: inc word ptr [es:bx+3]
+gotsmokeb: call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Attendant proc near
+
+ call showgamereel
+ call addtopeoplelist
+ mov al,[es:bx+7]
+ and al,128
+ jz nottalked
+ mov talkedtoattendant,1
+nottalked: ret
+
+ endp
+
+
+
+
+
+
+Manasleep proc near
+
+ mov al,[es:bx+7]
+ and al,127
+ mov [es:bx+7],al
+ call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+Eden proc near
+
+ cmp generaldead,0
+ jnz notinbed
+ call showgamereel
+ call addtopeoplelist
+notinbed: ret
+
+ endp
+
+
+
+Edeninbath proc near
+
+ cmp generaldead,0
+ jz notinbed
+ cmp sartaindead,0
+ jnz notinbath
+ call showgamereel
+ call addtopeoplelist
+notinbath: ret
+
+ endp
+
+
+
+Malefan proc near
+
+ call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+Femalefan proc near
+
+ call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+
+Louis proc near
+
+ cmp rockstardead,0
+ jnz notlouis1
+ call showgamereel
+ call addtopeoplelist
+notlouis1: ret
+
+ endp
+
+
+
+
+Louischair proc near
+
+ cmp rockstardead,0
+ jz notlouis2
+ call checkspeed
+ jnz notlouisanim
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,191
+ jz restartlouis
+ cmp ax,185
+ jz randomlouis
+ mov [es:bx+3],ax
+ jmp notlouisanim
+randomlouis: mov [es:bx+3],ax
+ call randomnumber
+ cmp al,245
+ jnc notlouisanim
+restartlouis: mov ax,182
+ mov [es:bx+3],ax
+notlouisanim: call showgamereel
+ call addtopeoplelist
+notlouis2: ret
+
+ endp
+
+
+
+Manasleep2 proc near
+
+ mov al,[es:bx+7]
+ and al,127
+ mov [es:bx+7],al
+ call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+
+Mansatstill proc near
+
+ call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+Tattooman proc near
+
+ call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+Drinker proc near
+
+ call checkspeed
+ jnz gotdrinker
+ inc word ptr [es:bx+3]
+ cmp word ptr [es:bx+3],115
+ jnz notdrinker1
+ mov word ptr [es:bx+3],105
+ jmp gotdrinker
+
+notdrinker1: cmp word ptr [es:bx+3],106
+ jnz gotdrinker
+ call randomnumber
+ cmp al,3
+ jc gotdrinker
+ mov word ptr [es:bx+3],105
+
+gotdrinker: call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+
+
+Bartender proc near
+
+ call checkspeed
+ jnz gotsmoket
+ cmp word ptr [es:bx+3],86
+ jnz notsmoket1
+ call randomnumber
+ cmp al,18
+ jc notsmoket2
+ mov word ptr [es:bx+3],81
+ jmp gotsmoket
+
+notsmoket1: cmp word ptr [es:bx+3],103
+ jnz notsmoket2
+ mov word ptr [es:bx+3],81
+ jmp gotsmoket
+
+notsmoket2: inc word ptr [es:bx+3]
+gotsmoket: call showgamereel
+ cmp gunpassflag,1
+ jnz notgotgun
+ mov byte ptr [es:bx+7],9
+notgotgun: call addtopeoplelist
+ ret
+
+ endp
+
+
+
+
+
+
+
+Othersmoker proc near
+
+ call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+
+
+
+Barwoman proc near
+
+ call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Interviewer proc near
+
+ cmp reeltowatch,68
+ jnz notgeneralstart
+ inc word ptr [es:bx+3]
+notgeneralstart: cmp word ptr [es:bx+3],250
+ jz talking
+ call checkspeed
+ jnz talking
+ cmp word ptr [es:bx+3],259
+ jz talking
+ inc word ptr [es:bx+3]
+talking: call showgamereel
+ ret
+
+ endp
+
+
+
+
+
+Soldier1 proc near
+
+ cmp word ptr [es:bx+3],0
+ jz soldierwait
+ mov watchingtime,10
+ cmp word ptr [es:bx+3],30
+ jnz notaftersshot
+ inc combatcount
+ cmp combatcount,40
+ jnz gotsoldframe
+ mov mandead,2
+ jmp gotsoldframe
+notaftersshot: call checkspeed
+ jnz gotsoldframe
+ inc word ptr [es:bx+3]
+ jmp gotsoldframe
+soldierwait: cmp lastweapon,1
+ jnz gotsoldframe
+ mov watchingtime,10
+ cmp manspath,2
+ jnz gotsoldframe
+ cmp facing,4
+ jnz gotsoldframe
+ inc word ptr [es:bx+3]
+ mov lastweapon,-1
+ mov combatcount,0
+gotsoldframe: call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Rockstar proc near
+
+ mov ax,[es:bx+3]
+ cmp ax,303
+ jz rockcombatend
+ cmp ax,118
+ jz rockcombatend
+ call checkspeed
+ jnz rockspeed
+
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,118
+ jnz notbeforedead
+ mov mandead,2
+ jmp gotrockframe
+
+notbeforedead: cmp ax,79
+ jnz gotrockframe
+ dec ax
+ cmp lastweapon,1
+ jnz notgunonrock
+ mov lastweapon,-1
+ mov ax,123
+ jmp gotrockframe
+notgunonrock: inc combatcount
+ cmp combatcount,40
+ jnz gotrockframe
+ mov combatcount,0
+ mov ax,79
+
+gotrockframe: mov [es:bx+3],ax
+rockspeed: call showgamereel
+ cmp word ptr [es:bx+3],78
+ jnz notalkrock
+ call addtopeoplelist
+ mov pointermode,2
+ mov watchingtime,0
+ ret
+
+notalkrock: mov watchingtime,2
+ mov pointermode,0
+ mov al,mapy
+ mov [es:bx+2],al
+ ret
+
+rockcombatend: mov newlocation,45
+ call showgamereel
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Helicopter proc near
+
+ mov ax,[es:bx+3]
+ cmp ax,203
+ jz heliwon
+ ;cmp ax,53
+ ;jz helicombatend
+ call checkspeed
+ jnz helispeed
+
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,53
+ jnz notbeforehdead
+ inc combatcount
+ cmp combatcount,8
+ jc waitabit
+ mov mandead,2
+waitabit: mov ax,49
+ jmp gotheliframe
+
+notbeforehdead: cmp ax,9
+ jnz gotheliframe
+ dec ax
+ cmp lastweapon,1
+ jnz notgunonheli
+ mov lastweapon,-1
+ mov ax,55
+ jmp gotheliframe
+notgunonheli: mov ax,5
+ inc combatcount
+ cmp combatcount,20
+ jnz gotheliframe
+ mov combatcount,0
+ mov ax,9
+
+gotheliframe: mov [es:bx+3],ax
+helispeed: call showgamereel
+ mov al,mapx
+ mov [es:bx+1],al
+helicombatend: mov ax,[es:bx+3]
+ cmp ax,9 ;8
+ jnc notwaitingheli
+ cmp combatcount,7
+ jc notwaitingheli
+ mov pointermode,2
+ mov watchingtime,0
+ ret
+notwaitingheli: mov pointermode,0
+ mov watchingtime,2
+ ret
+
+heliwon: mov pointermode,0
+ ret
+
+ endp
+
+
+Mugger proc near
+
+ mov ax,[es:bx+3]
+ cmp ax,138
+ jz endmugger1
+ cmp ax,176
+ jz endmugger2
+ cmp ax,2
+ jnz havesetwatch
+ mov watchingtime,175*2
+havesetwatch: call checkspeed
+ jnz notmugger
+ inc word ptr [es:bx+3]
+notmugger: call showgamereel
+ mov al,mapx
+ mov [es:bx+1],al
+ ret
+
+endmugger1: push es bx
+ call createpanel2
+ call showicon
+ mov al,41
+ call findpuztext
+ mov di,33+20
+ mov bx,104
+ mov dl,241
+ mov ah,0
+ call printdirect
+ call worktoscreen
+ mov cx,300
+ call hangon
+ pop bx es
+ push es bx
+ mov word ptr [es:bx+3],140
+ mov manspath,2
+ mov finaldest,2
+ call findxyfrompath
+ mov resetmanxy,1
+ mov al,"W"
+ mov ah,"E"
+ mov cl,"T"
+ mov ch,"A"
+ call findexobject
+ mov command,al
+ mov objecttype,4
+ call removeobfrominv
+ mov al,"W"
+ mov ah,"E"
+ mov cl,"T"
+ mov ch,"B"
+ call findexobject
+ mov command,al
+ mov objecttype,4
+ call removeobfrominv
+ call makemainscreen
+ mov al,48
+ mov bl,68-32
+ mov bh,54+64
+ mov cx,70 ; time on screen
+ mov dx,10 ; pause before show
+ call setuptimeduse
+ mov beenmugged,1
+ pop bx es
+ ret
+
+endmugger2: ret
+
+
+ endp
+
+
+
+
+
+
+
+
+Aide proc near
+
+ call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+
+
+
+Businessman proc near
+
+ mov pointermode,0
+ mov watchingtime,2
+ mov ax,[es:bx+3]
+ cmp ax,2
+ jnz notfirstbiz
+ push ax bx es
+ mov al,49
+ mov cx,30
+ mov dx,1
+ mov bl,68
+ mov bh,174
+ call setuptimeduse
+ pop es bx ax
+
+notfirstbiz: cmp ax,95
+ jz buscombatwonend
+ cmp ax,49
+ jz buscombatend
+
+ call checkspeed
+ jnz busspeed
+
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,48
+ jnz notbeforedeadb
+ mov mandead,2
+ jmp gotbusframe
+
+notbeforedeadb: cmp ax,15
+ jnz buscombatwon
+ dec ax
+ cmp lastweapon,3
+ jnz notshieldonbus
+ mov lastweapon,-1
+ mov combatcount,0
+ mov ax,51
+ jmp gotbusframe
+notshieldonbus: inc combatcount
+ cmp combatcount,20
+ jnz gotbusframe
+ mov combatcount,0
+ mov ax,15
+ jmp gotbusframe
+
+buscombatwon: cmp ax,91
+ jnz gotbusframe
+ push bx es
+ mov al,0
+ call turnpathon
+ mov al,1
+ call turnpathon
+ mov al,2
+ call turnpathon
+ mov al,3
+ call turnpathoff
+ mov manspath,5
+ mov finaldest,5
+ call findxyfrompath
+ mov resetmanxy,1
+ pop es bx
+ mov ax,92
+ jmp gotbusframe
+
+gotbusframe: mov [es:bx+3],ax
+busspeed: call showgamereel
+ mov al,mapy
+ mov [es:bx+2],al
+ mov ax,[es:bx+3]
+ cmp ax,14
+ jnz buscombatend
+ mov watchingtime,0
+ mov pointermode,2
+ ret
+
+buscombatend: ret
+
+buscombatwonend: mov pointermode,0
+ mov watchingtime,0
+ ret
+
+ endp
+
+
+
+
+
+
+Poolguard proc near
+
+ mov ax,[es:bx+3]
+ cmp ax,214
+ jz combatover2
+ cmp ax,258
+ jz combatover2
+ cmp ax,185
+ jz combatover1
+ cmp ax,0
+ jnz notfirstpool
+ mov al,0
+ call turnpathon
+notfirstpool: call checkspeed
+ jnz guardspeed
+
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,122
+ jnz notendguard1
+ dec ax
+ cmp lastweapon,2
+ jnz notaxeonpool
+ mov lastweapon,-1
+ mov ax,122
+ jmp gotguardframe
+notaxeonpool: inc combatcount
+ cmp combatcount,40
+ jnz gotguardframe
+ mov combatcount,0
+ mov ax,195
+ jmp gotguardframe
+
+notendguard1: cmp ax,147
+ jnz gotguardframe
+ dec ax
+ cmp lastweapon,1
+ jnz notgunonpool
+ mov lastweapon,-1
+ mov ax,147
+ jmp gotguardframe
+notgunonpool: inc combatcount
+ cmp combatcount,40
+ jnz gotguardframe
+ mov combatcount,0
+ mov ax,220
+
+gotguardframe: mov [es:bx+3],ax
+guardspeed: call showgamereel
+ mov ax,[es:bx+3]
+ cmp ax,121
+ jz iswaitingpool
+ cmp ax,146
+ jz iswaitingpool
+ mov pointermode,0
+ mov watchingtime,2
+ ret
+iswaitingpool: mov pointermode,2
+ mov watchingtime,0
+ ret
+
+combatover1: mov watchingtime,0
+ mov pointermode,0
+ mov al,0
+ call turnpathon
+ mov al,1
+ call turnpathoff
+ ret
+
+combatover2: call showgamereel
+ mov watchingtime,2
+ mov pointermode,0
+ inc combatcount
+ cmp combatcount,100
+ jc doneover2
+ mov watchingtime,0
+ mov mandead,2
+doneover2: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Security proc near
+
+ cmp word ptr [es:bx+3],32
+ jz securwait
+ cmp word ptr [es:bx+3],69
+ jnz notaftersec
+ ret
+notaftersec: mov watchingtime,10
+ call checkspeed
+ jnz gotsecurframe
+ inc word ptr [es:bx+3]
+ jmp gotsecurframe
+securwait: cmp lastweapon,1
+ jnz gotsecurframe
+ mov watchingtime,10
+ cmp manspath,9
+ jnz gotsecurframe
+ cmp facing,0
+ jnz gotsecurframe
+ mov lastweapon,-1
+ inc word ptr [es:bx+3]
+gotsecurframe: call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+
+
+
+Heavy proc near
+
+ mov al,[es:bx+7]
+ and al,127
+ mov [es:bx+7],al
+ cmp word ptr [es:bx+3],43
+ jz heavywait
+ mov watchingtime,10
+ cmp word ptr [es:bx+3],70
+ jnz notafterhshot
+ inc combatcount
+ cmp combatcount,80
+ jnz gotheavyframe
+ mov mandead,2
+ jmp gotheavyframe
+notafterhshot: call checkspeed
+ jnz gotheavyframe
+ inc word ptr [es:bx+3]
+ jmp gotheavyframe
+heavywait: cmp lastweapon,1
+ jnz gotheavyframe
+ cmp manspath,5
+ jnz gotheavyframe
+ cmp facing,4
+ jnz gotheavyframe
+ mov lastweapon,-1
+ inc word ptr [es:bx+3]
+ mov combatcount,0
+gotheavyframe: call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+
+Bossman proc near
+
+ call checkspeed
+ jnz notboss
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,4
+ jz firstdes
+ cmp ax,20
+ jz secdes
+ cmp ax,41
+ jnz gotallboss
+ mov ax,0
+ inc gunpassflag
+ mov byte ptr [es:bx+7],10
+ jmp gotallboss
+firstdes: cmp gunpassflag,1
+ jz gotallboss
+ push ax
+ call randomnumber
+ mov cl,al
+ pop ax
+ cmp cl,10
+ jc gotallboss
+ mov ax,0
+ jmp gotallboss
+secdes: cmp gunpassflag,1
+ jz gotallboss
+ mov ax,0
+gotallboss: mov [es:bx+3],ax
+notboss: call showgamereel
+ call addtopeoplelist
+
+ mov al,[es:bx+7]
+ and al,128
+ jz nottalkedboss
+ mov talkedtoboss,1
+nottalkedboss: ret
+
+ endp
+
+
+
+
+
+Gamer proc near
+
+ call checkspeed
+ jnz gamerfin
+gameragain: call randomnum1
+ and al,7
+ cmp al,5
+ jnc gameragain
+ add al,20
+ cmp al,[es:bx+3]
+ jz gameragain
+ mov ah,0
+ mov [es:bx+3],ax
+gamerfin: call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+
+
+Sparkydrip proc near
+
+ call checkspeed
+ jnz cantdrip
+ mov al,14
+ mov ah,0
+ call playchannel0
+cantdrip: ret
+
+ endp
+
+
+
+Carparkdrip proc near
+
+ call checkspeed
+ jnz cantdrip2
+ mov al,14
+ call playchannel1
+cantdrip2: ret
+
+ endp
+
+
+
+Keeper proc near
+
+ cmp keeperflag,0
+ jnz notwaiting
+ cmp reeltowatch,190
+ jc waiting
+ inc keeperflag
+ mov ah,[es:bx+7]
+ and ah,127
+ cmp ah,dreamnumber
+ jz notdiff
+ mov al,dreamnumber
+ mov [es:bx+7],al
+notdiff: ret
+notwaiting: call addtopeoplelist
+ call showgamereel
+waiting: ret
+
+ endp
+
+
+
+Candles1 proc near
+
+ call checkspeed
+ jnz candle1
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,44
+ jnz notendcandle1
+ mov ax,39
+notendcandle1: mov [es:bx+3],ax
+candle1: call showgamereel
+ ret
+
+ endp
+
+
+
+Smallcandle proc near
+
+ call checkspeed
+ jnz smallcandlef
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,37
+ jnz notendsmallcandle
+ mov ax,25
+notendsmallcandle: mov [es:bx+3],ax
+smallcandlef: call showgamereel
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Intromagic1 proc near
+
+ call checkspeed
+ jnz introm1fin
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,145
+ jnz gotintrom1
+ mov ax,121
+gotintrom1: mov [es:bx+3],ax
+ cmp ax,121
+ jnz introm1fin
+ inc introcount
+ push es bx
+ call intro1text
+ pop bx es
+ cmp introcount,8 ; was 7
+ jnz introm1fin
+ add mapy,10
+ mov nowinnewroom,1
+introm1fin: call showgamereel
+ ret
+
+ endp
+
+
+
+
+Candles proc near
+
+ call checkspeed
+ jnz candlesfin
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,167
+ jnz gotcandles
+ mov ax,162
+gotcandles: mov [es:bx+3],ax
+candlesfin: call showgamereel
+ ret
+
+ endp
+
+
+
+Candles2 proc near
+
+ call checkspeed
+ jnz candles2fin
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,238
+ jnz gotcandles2
+ mov ax,233
+gotcandles2: mov [es:bx+3],ax
+candles2fin: call showgamereel
+ ret
+
+ endp
+
+
+
+Gates proc near
+
+ call checkspeed
+ jnz gatesfin
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,116
+ jnz notbang
+ push ax bx es
+ mov al,17 ;12
+ call playchannel1
+ pop es bx ax
+notbang: cmp ax,110
+ jc slowgates
+ mov byte ptr [es:bx+5],2
+slowgates: cmp ax,120
+ jnz gotgates
+ mov getback,1
+ mov ax,119
+gotgates: mov [es:bx+3],ax
+ push es bx
+ call intro3text
+ pop bx es
+gatesfin: call showgamereel
+ ret
+
+ endp
+
+
+
+
+Intromagic2 proc near
+
+ call checkspeed
+ jnz introm2fin
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,216
+ jnz gotintrom2
+ mov ax,192
+gotintrom2: mov [es:bx+3],ax
+introm2fin: call showgamereel
+ ret
+
+ endp
+
+
+
+
+Intromagic3 proc near
+
+ call checkspeed
+ jnz introm3fin
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,218
+ jnz gotintrom3
+ mov getback,1
+gotintrom3: mov [es:bx+3],ax
+introm3fin: call showgamereel
+ mov al,mapx
+ mov [es:bx+1],al
+ ret
+
+ endp
+
+
+
+
+
+
+
+Intromonks1 proc near
+
+ call checkspeed
+ jnz intromonk1fin
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,80
+ jnz notendmonk1
+ add mapy,10
+ mov nowinnewroom,1
+ call showgamereel
+ ret
+notendmonk1: cmp ax,30
+ jnz gotintromonk1
+ sub mapy,10
+ mov nowinnewroom,1
+ mov ax,51
+gotintromonk1: mov [es:bx+3],ax
+ cmp ax,5
+ jz waitstep
+ cmp ax,15
+ jz waitstep
+ cmp ax,25
+ jz waitstep
+ cmp ax,61
+ jz waitstep
+ cmp ax,71
+ jz waitstep
+ jmp intromonk1fin
+waitstep: push es bx
+ call intro2text
+ pop bx es
+ mov byte ptr [es:bx+6],-20
+intromonk1fin: call showgamereel
+ mov al,mapy
+ mov [es:bx+2],al
+ ret
+
+ endp
+
+
+
+
+Intromonks2 proc near
+
+ call checkspeed
+ jnz intromonk2fin
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,87
+ jnz nottalk1
+ inc introcount
+ push es bx
+ call monks2text
+ pop bx es
+ cmp introcount,19
+ jnz notlasttalk1
+ mov ax,87
+ jmp gotintromonk2
+notlasttalk1: mov ax,74
+ jmp gotintromonk2
+
+nottalk1: cmp ax,110
+ jnz notraisearm
+ inc introcount
+ push es bx
+ call monks2text
+ pop bx es
+ if cd
+ if german
+ cmp introcount,42
+ else
+ cmp introcount,35
+ endif
+ else
+ cmp introcount,35
+ endif
+ jnz notlastraise
+ mov ax,111
+ jmp gotintromonk2
+notlastraise: mov ax,98
+ jmp gotintromonk2
+
+notraisearm: cmp ax,176
+ jnz notendmonk2
+ mov getback,1
+ jmp gotintromonk2
+notendmonk2: cmp ax,125
+ jnz gotintromonk2
+ mov ax,140
+gotintromonk2: mov [es:bx+3],ax
+intromonk2fin: call showgamereel
+ ret
+
+ endp
+
+
+
+
+
+Handclap proc near
+
+ ret
+
+ endp
+
+
+
+
+ if german
+ if cd
+
+Monks2text proc near
+
+ cmp introcount,1
+ jnz notmonk2text1
+ mov al,8
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text1: cmp introcount,5
+ jnz notmonk2text2
+ mov al,9
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text2: cmp introcount,9
+ jnz notmonk2text3
+ mov al,10
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text3: cmp introcount,13
+ jnz notmonk2text4
+ mov introcount,14
+ mov al,11
+ mov bl,0
+ mov bh,105
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text4: cmp introcount,19
+ jnz notmonk2text7
+ mov al,14
+ mov bl,36
+ mov bh,160
+ mov cx,100 ;32
+ mov dx,1
+ mov ah,82
+ jmp setuptimedtemp
+notmonk2text7: cmp introcount,23
+ jnz notmonk2text8
+ mov al,15
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text8: cmp introcount,27
+ jnz notmonk2text9
+ mov al,16
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text9: cmp introcount,30
+ jnz notmonk2text10
+ mov al,17
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text10: cmp introcount,35
+ jnz notmonk2text11
+ mov al,18
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text11: ret
+
+gotmonks2text: mov dx,1
+ mov cx,120
+ mov ah,82
+ call setuptimedtemp
+ ret
+
+ endp
+
+ else
+
+Monks2text proc near
+
+ cmp introcount,1
+ jnz notmonk2text1
+ mov al,8
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text1: cmp introcount,4
+ jnz notmonk2text2
+ mov al,9
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text2: cmp introcount,7
+ jnz notmonk2text3
+ mov al,10
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text3: cmp introcount,10
+ jnz notmonk2text4
+ if cd
+ mov introcount,12
+ endif
+ mov al,11
+ mov bl,0
+ mov bh,105
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text4: cmp introcount,13
+ jnz notmonk2text5
+ if cd
+ mov introcount,17; 18
+ ret
+ endif
+ mov al,12
+ mov bl,0
+ mov bh,120
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text5: cmp introcount,16
+ jnz notmonk2text6
+ mov al,13
+ mov bl,0
+ mov bh,135
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text6: cmp introcount,19
+ jnz notmonk2text7
+ mov al,14
+ mov bl,36
+ mov bh,160
+ mov cx,100 ;32
+ mov dx,1
+ mov ah,82
+ jmp setuptimedtemp
+notmonk2text7: cmp introcount,22
+ jnz notmonk2text8
+ mov al,15
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text8: cmp introcount,25
+ jnz notmonk2text9
+ mov al,16
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text9: if cd
+ cmp introcount,27
+ else
+ cmp introcount,28
+ endif
+ jnz notmonk2text10
+ mov al,17
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text10: cmp introcount,31
+ jnz notmonk2text11
+ mov al,18
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text11: ret
+
+gotmonks2text: mov dx,1
+ mov cx,120
+ mov ah,82
+ call setuptimedtemp
+ ret
+
+ endp
+
+
+ endif
+ else
+
+Monks2text proc near
+
+ cmp introcount,1
+ jnz notmonk2text1
+ mov al,8
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text1: cmp introcount,4
+ jnz notmonk2text2
+ mov al,9
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text2: cmp introcount,7
+ jnz notmonk2text3
+ mov al,10
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text3: cmp introcount,10
+ jnz notmonk2text4
+ if cd
+ mov introcount,12
+ endif
+ mov al,11
+ mov bl,0
+ mov bh,105
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text4: cmp introcount,13
+ jnz notmonk2text5
+ if cd
+ mov introcount,17; 18
+ ret
+ endif
+ mov al,12
+ mov bl,0
+ mov bh,120
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text5: cmp introcount,16
+ jnz notmonk2text6
+ mov al,13
+ mov bl,0
+ mov bh,135
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text6: cmp introcount,19
+ jnz notmonk2text7
+ mov al,14
+ mov bl,36
+ mov bh,160
+ mov cx,100 ;32
+ mov dx,1
+ mov ah,82
+ jmp setuptimedtemp
+notmonk2text7: cmp introcount,22
+ jnz notmonk2text8
+ mov al,15
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text8: cmp introcount,25
+ jnz notmonk2text9
+ mov al,16
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text9: if cd
+ cmp introcount,27
+ else
+ cmp introcount,28
+ endif
+ jnz notmonk2text10
+ mov al,17
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text10: cmp introcount,31
+ jnz notmonk2text11
+ mov al,18
+ mov bl,36
+ mov bh,160
+ mov cx,100
+ jmp gotmonks2text
+notmonk2text11: ret
+
+gotmonks2text: mov dx,1
+ mov cx,120
+ mov ah,82
+ call setuptimedtemp
+ ret
+
+ endp
+
+ endif
+
+
+
+
+
+
+Intro1text proc near
+
+ cmp introcount,2
+ jnz notintro1text1
+ mov al,40
+ mov bl,34
+ mov bh,130
+ mov cx,90
+ jmp gotintro1text
+notintro1text1: cmp introcount,4
+ jnz notintro1text2
+ mov al,41
+ mov bl,34
+ mov bh,130
+ mov cx,90
+ jmp gotintro1text
+notintro1text2: cmp introcount,6
+ jnz notintro1text3
+ mov al,42
+ mov bl,34
+ mov bh,130
+ mov cx,90
+ jmp gotintro1text
+notintro1text3: ret
+
+gotintro1text: mov dx,1
+ mov ah,82
+ if cd
+ cmp ch1playing,255
+ jz oktalk2
+ dec introcount
+ ret
+ endif
+oktalk2: call setuptimedtemp
+ ret
+
+ endp
+
+
+
+Intro2text proc near
+
+ cmp ax,5
+ jnz notintro2text1
+ mov al,43
+ mov bl,34
+ mov bh,40
+ mov cx,90
+ jmp gotintro2text
+notintro2text1: cmp ax,15
+ jnz notintro2text2
+ mov al,44
+ mov bl,34
+ mov bh,40
+ mov cx,90
+ jmp gotintro2text
+notintro2text2: ret
+
+gotintro2text: mov dx,1
+ mov ah,82
+ call setuptimedtemp
+ ret
+
+ endp
+
+
+
+
+
+
+Intro3text proc near
+
+ cmp ax,107
+ jnz notintro3text1
+ mov al,45
+ mov bl,36
+ mov bh,56
+ mov cx,100
+ jmp gotintro3text
+notintro3text1: if cd
+ cmp ax,108
+ else
+ cmp ax,109
+ endif
+ jnz notintro3text2
+ mov al,46
+ mov bl,36
+ mov bh,56
+ mov cx,100
+ jmp gotintro3text
+notintro3text2: ret
+
+gotintro3text: mov dx,1
+ mov ah,82
+ call setuptimedtemp
+ ret
+
+ endp
+
+
+
+
+
+
+
+Monkandryan proc near
+
+ call checkspeed
+ jnz notmonkryan
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,83
+ jnz gotmonkryan
+ inc introcount
+ push es bx
+ call textformonk
+ pop bx es
+ mov ax,77
+ cmp introcount,57
+ jnz gotmonkryan
+ mov getback,1
+ ret
+gotmonkryan: mov [es:bx+3],ax
+notmonkryan: call showgamereel
+ ret
+
+ endp
+
+
+
+
+
+Endgameseq proc near
+
+ call checkspeed
+ jnz notendseq
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,51
+ jnz gotendseq
+ cmp introcount,140
+ jz gotendseq
+ inc introcount
+ push es bx
+ call textforend
+ pop bx es
+ mov ax,50
+gotendseq: mov [es:bx+3],ax
+ cmp ax,134
+ jnz notfadedown
+ push es bx ax
+ call fadescreendownhalf
+ pop ax bx es
+ jmp notendseq
+notfadedown: cmp ax,324
+ jnz notfadeend
+ push es bx ax
+ call fadescreendowns
+ mov volumeto,7
+ mov volumedirection,1
+ pop ax bx es
+notfadeend: cmp ax,340
+ jnz notendseq
+ mov getback,1
+notendseq: call showgamereel
+ mov al,mapy
+ mov [es:bx+2],al
+ mov ax,[es:bx+3]
+ cmp ax,145
+ jnz notendcreds
+ mov word ptr [es:bx+3],146
+ call rollendcredits
+notendcreds: ret
+
+ endp
+
+
+
+
+
+
+Rollendcredits proc near
+
+ mov al,16
+ mov ah,255
+ call playchannel0
+ mov volume,7
+ mov volumeto,0
+ mov volumedirection,-1
+
+ mov cl,160
+ mov ch,160
+ mov di,75
+ mov bx,20
+ mov ds,mapstore
+ mov si,0
+ call multiget
+
+ mov es,textfile1
+ mov si,3*2
+ mov ax,[es:si]
+ mov si,ax
+ add si,textstart
+
+ mov cx,254
+endcredits1: push cx
+
+ mov bx,10
+ mov cx,linespacing
+endcredits2: push cx si di es bx
+
+ call vsync
+ mov cl,160
+ mov ch,160
+ mov di,75
+ mov bx,20
+ mov ds,mapstore
+ mov si,0
+ call multiput
+ call vsync
+ pop bx es di si
+ push si di es bx
+
+ mov cx,18
+onelot: push cx
+ mov di,75
+ mov dx,161
+ mov ax,0
+ call printdirect
+ add bx,linespacing
+ pop cx
+ loop onelot
+
+ call vsync
+ mov cl,160
+ mov ch,160
+ mov di,75
+ mov bx,20
+ call multidump
+
+ pop bx es di si cx
+ dec bx
+ loop endcredits2
+ pop cx
+looknext: mov al,[es:si]
+ inc si
+ cmp al,":"
+ jz gotnext
+ cmp al,0
+ jz gotnext
+ jmp looknext
+gotnext: loop endcredits1
+
+ mov cx,100
+ call hangon
+ call paneltomap
+ call fadescreenuphalf
+ ret
+
+ endp
+
+
+
+
+
+
+Priest proc near
+
+ cmp word ptr [es:bx+3],8
+ jz priestspoken
+ mov pointermode,0
+ mov watchingtime,2
+ call checkspeed
+ jnz priestwait
+ inc word ptr [es:bx+3]
+ push es bx
+ call priesttext
+ pop bx es
+priestwait: ret
+
+priestspoken: ret
+
+ endp
+
+
+
+
+
+
+Madmanstelly proc near
+
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,307
+ jnz notendtelly
+ mov ax,300
+notendtelly: mov [es:bx+3],ax
+ call showgamereel
+ ret
+
+ endp
+
+
+
+
+
+Madman proc near
+
+ mov watchingtime,2
+ call checkspeed
+ jnz nomadspeed
+ mov ax,[es:bx+3]
+ cmp ax,364
+ jnc ryansded
+ cmp ax,10
+ jnz notfirstmad
+ push es bx ax
+ mov dx,offset cs:introtextname
+ call loadtemptext
+ pop ax bx es
+ mov combatcount,-1
+ mov speechcount,0
+notfirstmad: inc ax
+ cmp ax,294
+ jz madmanspoken
+ cmp ax,66
+ jnz nomadspeak
+ inc combatcount
+ push es bx
+ call madmantext
+ pop bx es
+ mov ax,53
+ if cd
+ cmp combatcount,64
+ else
+ cmp combatcount,62
+ endif
+ jc nomadspeak
+ if cd
+ cmp combatcount,70
+ else
+ cmp combatcount,68
+ endif
+ jz killryan
+ cmp lastweapon,8
+ jnz nomadspeak
+ if cd
+ mov combatcount,72
+ else
+ mov combatcount,70
+ endif
+ mov lastweapon,-1
+ mov madmanflag,1
+ mov ax,67
+ jmp nomadspeak
+killryan: mov ax,310
+nomadspeak: mov [es:bx+3],ax
+nomadspeed: call showgamereel
+ mov al,mapx
+ mov [es:bx+1],al
+ call madmode
+ ret
+madmanspoken: cmp wongame,1
+ jz alreadywon
+ mov wongame,1
+ push es bx
+ call getridoftemptext
+ pop bx es
+alreadywon: ret
+
+ryansded: mov mandead,2
+ call showgamereel
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+ if cd
+Madmantext proc near
+
+ cmp speechcount,63
+ jnc nomadtext
+ cmp ch1playing,255
+ jnz nomadtext
+
+ mov al,speechcount
+ inc speechcount
+ add al,47
+ mov bl,72
+ mov bh,80
+ mov cx,90
+ mov dx,1
+ mov ah,82
+ call setuptimedtemp
+nomadtext: ret
+
+ endp
+
+ else
+
+Madmantext proc near
+
+ cmp combatcount,61
+ jnc nomadtext
+ mov al,combatcount
+ and al,3
+ jnz nomadtext
+ mov al,combatcount
+ shr al,1
+ shr al,1
+ add al,47
+ mov bl,72
+ mov bh,80
+ mov cx,90
+ mov dx,1
+ mov ah,82
+ call setuptimedtemp
+nomadtext: ret
+
+ endp
+ endif
+
+
+
+
+Madmode proc near
+
+ mov watchingtime,2
+ mov pointermode,0
+ if cd
+ cmp combatcount,65
+ else
+ cmp combatcount,63
+ endif
+ jc iswatchmad
+ if cd
+ cmp combatcount,70
+ else
+ cmp combatcount,68
+ endif
+ jnc iswatchmad
+ mov pointermode,2
+iswatchmad: ret
+
+ endp
+
+
+
+
+
+Priesttext proc near
+
+ cmp word ptr [es:bx+3],2
+ jc nopriesttext
+ cmp word ptr [es:bx+3],7
+ jnc nopriesttext
+ mov al,[es:bx+3]
+ and al,1
+ jnz nopriesttext
+ mov al,[es:bx+3]
+ shr al,1
+ add al,50
+ mov bl,72
+ mov bh,80
+ mov cx,54
+ mov dx,1
+ call setuptimeduse
+nopriesttext: ret
+
+ endp
+
+
+
+
+Textforend proc near
+
+ cmp introcount,20
+ jnz notendtext1
+ mov al,0
+ mov bl,34
+ mov bh,20
+ mov cx,60
+ jmp gotendtext
+notendtext1: if cd
+ cmp introcount,50
+ else
+ cmp introcount,65
+ endif
+ jnz notendtext2
+ mov al,1
+ mov bl,34
+ mov bh,20
+ mov cx,60
+ jmp gotendtext
+notendtext2: if cd
+ cmp introcount,85
+ else
+ cmp introcount,110
+ endif
+ jnz notendtext3
+ mov al,2
+ mov bl,34
+ mov bh,20
+ mov cx,60
+ jmp gotendtext
+notendtext3: ret
+
+gotendtext: mov dx,1
+ mov ah,83
+ call setuptimedtemp
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Textformonk proc near
+
+ cmp introcount,1
+ jnz notmonktext1
+ mov al,19
+ mov bl,68
+ mov bh,154
+ mov cx,120
+ jmp gotmonktext
+notmonktext1: cmp introcount,5
+ jnz notmonktext2
+ mov al,20
+ mov bl,68
+ mov bh,38
+ mov cx,120
+ jmp gotmonktext
+notmonktext2: cmp introcount,9
+ jnz notmonktext3
+ mov al,21
+ mov bl,48
+ mov bh,154
+ mov cx,120
+ jmp gotmonktext
+notmonktext3: cmp introcount,13
+ jnz notmonktext4
+ mov al,22
+ mov bl,68
+ mov bh,38
+ mov cx,120
+ jmp gotmonktext
+notmonktext4: if cd
+ cmp introcount,15
+ else
+ cmp introcount,17
+ endif
+ jnz notmonktext5
+ mov al,23
+ mov bl,68
+ mov bh,154
+ mov cx,120
+ jmp gotmonktext
+notmonktext5: cmp introcount,21
+ jnz notmonktext6
+ mov al,24
+ mov bl,68
+ mov bh,38
+ mov cx,120
+ jmp gotmonktext
+notmonktext6: cmp introcount,25
+ jnz notmonktext7
+ mov al,25
+ mov bl,68
+ mov bh,154
+ mov cx,120
+ jmp gotmonktext
+notmonktext7: cmp introcount,29
+ jnz notmonktext8
+ mov al,26
+ mov bl,68
+ mov bh,38
+ mov cx,120
+ jmp gotmonktext
+notmonktext8: cmp introcount,33
+ jnz notmonktext9
+ mov al,27
+ mov bl,68
+ mov bh,154
+ mov cx,120
+ jmp gotmonktext
+notmonktext9: cmp introcount,37
+ jnz notmonktext10
+ mov al,28
+ mov bl,68
+ mov bh,154
+ mov cx,120
+ jmp gotmonktext
+notmonktext10: cmp introcount,41
+ jnz notmonktext11
+ mov al,29
+ mov bl,68
+ mov bh,38
+ mov cx,120
+ jmp gotmonktext
+notmonktext11: cmp introcount,45
+ jnz notmonktext12
+ mov al,30
+ mov bl,68
+ mov bh,154
+ mov cx,120
+ jmp gotmonktext
+notmonktext12: if cd
+ cmp introcount,52
+ else
+ cmp introcount,49
+ endif
+ jnz notmonktext13
+ mov al,31
+ mov bl,68
+ mov bh,154
+ mov cx,220 ;132
+ jmp gotmonktext
+notmonktext13: cmp introcount,53
+ jnz notendtitles
+ call fadescreendowns
+ if cd
+ mov volumeto,7
+ mov volumedirection,1
+ endif
+notendtitles: ret
+
+gotmonktext: mov dx,1
+ mov ah,82
+ if cd
+ cmp ch1playing,255
+ jz oktalk
+ dec introcount
+ ret
+ endif
+oktalk: call setuptimedtemp
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Drunk proc near
+
+ cmp generaldead,0
+ jnz trampgone
+ mov al,[es:bx+7]
+ and al,127
+ mov [es:bx+7],al
+ call showgamereel
+ call addtopeoplelist
+trampgone: ret
+
+ endp
+
+
+Advisor proc near
+
+ call checkspeed
+ jnz noadvisor
+ jmp noadvisor
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,123
+ jnz notendadvis
+ mov ax,106
+ jmp gotadvframe
+notendadvis: cmp ax,108
+ jnz gotadvframe
+ push ax
+ call randomnumber
+ mov cl,al
+ pop ax
+ cmp cl,3
+ jc gotadvframe
+ mov ax,106
+gotadvframe: mov [es:bx+3],ax
+noadvisor: call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+Copper proc near
+
+ call checkspeed
+ jnz nocopper
+ mov ax,[es:bx+3]
+ inc ax
+ cmp ax,94
+ jnz notendcopper
+ mov ax,64
+ jmp gotcopframe
+notendcopper: cmp ax,81
+ jz mightwait
+ cmp ax,66
+ jnz gotcopframe
+mightwait: push ax
+ call randomnumber
+ mov cl,al
+ pop ax
+ cmp cl,7
+ jc gotcopframe
+ dec ax
+gotcopframe: mov [es:bx+3],ax
+nocopper: call showgamereel
+ call addtopeoplelist
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Sparky proc near
+
+ cmp card1money,0
+ jz animsparky
+ mov byte ptr [es:bx+7],3
+ jmp animsparky
+
+animsparky: call checkspeed
+ jnz finishsparky
+ cmp word ptr [es:bx+3],34
+ jnz notsparky1
+ call randomnumber
+ cmp al,30
+ jc dosparky
+ mov word ptr [es:bx+3],27
+ jmp finishsparky
+
+notsparky1: cmp word ptr [es:bx+3],48
+ jnz dosparky
+ mov word ptr [es:bx+3],27
+ jmp finishsparky
+
+dosparky: inc word ptr [es:bx+3]
+finishsparky: call showgamereel
+ call addtopeoplelist
+
+ mov al,[es:bx+7]
+ and al,128
+ jz nottalkedsparky
+ mov talkedtosparky,1
+nottalkedsparky: ret
+
+ endp
+
+
+
+
+
+Train proc near
+
+ ret
+ mov ax,[es:bx+3]
+ cmp ax,21
+ jnc notrainyet
+ inc ax
+ jmp gottrainframe
+notrainyet: call randomnumber
+ cmp al,253
+ jc notrainatall
+ cmp manspath,5
+ jnz notrainatall
+ cmp finaldest,5
+ jnz notrainatall
+ mov ax,5
+gottrainframe: mov [es:bx+3],ax
+ call showgamereel
+notrainatall: ret
+
+ endp
+
+
+
+
+
+
+
+Addtopeoplelist proc near
+
+ push es bx bx
+ mov cl,[es:bx+7]
+ mov ax,[es:bx+3]
+ mov bx,listpos
+ mov es,buffers
+ mov [es:bx],ax ;reel pointer position
+ pop ax
+ mov [es:bx+2],ax
+ mov [es:bx+4],cl ;coversation number
+ pop bx es
+ add listpos,5
+ ret
+
+ endp
+
+
+
+Showgamereel proc near
+
+ mov ax,[es:bx+3]
+ cmp ax,512
+ jnc noshow
+ mov reelpointer,ax
+ push es bx
+ call plotreel
+ pop bx es
+ mov ax,reelpointer
+ mov [es:bx+3],ax
+noshow: ret
+
+ endp
+
+
+
+
+
+
+Checkspeed proc near
+
+ cmp lastweapon,-1
+ jnz forcenext
+ inc byte ptr [es:bx+6]
+ mov al,[es:bx+6]
+ cmp al,[es:bx+5]
+ jnz notspeed
+ mov al,0
+ mov [es:bx+6],al
+ cmp al,al
+notspeed: ret
+
+forcenext: cmp al,al
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+;------------------------------------------------------------Sprite Routines----
+
+
+
+Clearsprites proc near
+
+ mov es,buffers
+ mov di,spritetable
+ mov al,255
+ mov cx,tablesize*16
+ rep stosb
+ ret
+
+ endp
+
+
+
+
+Makesprite proc near ;si holds x,y cx holds update
+ ;di,dx holds data offset,seg
+ mov es,buffers
+ mov bx,spritetable
+$17: cmp byte ptr [es:bx+15],255
+ jz $17a
+ add bx,tablesize
+ jmp $17
+
+$17a: mov [es:bx],cx
+ mov [es:bx+10],si
+ mov [es:bx+6],dx
+ mov [es:bx+8],di
+ mov [es:bx+2],0ffffh
+ mov byte ptr [es:bx+15],0
+ mov byte ptr [es:bx+18],0
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Delsprite proc near
+
+ mov di,bx
+ mov cx,tablesize
+ mov al,255
+ rep stosb
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Spriteupdate proc near
+
+ mov es,buffers
+ mov bx,spritetable
+ mov al,ryanon
+ mov byte ptr [es:bx+31],al
+
+ mov es,buffers
+ mov bx,spritetable
+ mov cx,16
+$18: push cx bx
+ mov ax,[es:bx]
+ cmp ax,0ffffh
+ jz $18a
+ push es ds
+ mov cx,[es:bx+2]
+ mov [es:bx+24],cx
+ call ax
+ pop ds es
+$18a: pop bx cx
+ cmp nowinnewroom,1
+ jz $18b
+ add bx,tablesize
+ loop $18
+
+$18b: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Printsprites proc near
+
+ mov es,buffers
+ mov cx,0
+priorityloop: push cx
+ mov priority,cl
+ mov bx,spritetable
+ mov cx,16
+prtspriteloop: push cx bx
+ mov ax,[es:bx]
+ cmp ax,0ffffh
+ jz skipsprite
+ mov al,priority
+ cmp al,[es:bx+23]
+ jnz skipsprite
+ cmp byte ptr [es:bx+31],1
+ jz skipsprite
+ call printasprite
+skipsprite: pop bx cx
+ add bx,tablesize
+ loop prtspriteloop
+ pop cx
+ inc cx
+ cmp cx,7
+ jnz priorityloop
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Printasprite proc near
+
+ push es bx
+ mov si,bx
+ mov ds,[es:si+6]
+ mov al,[es:si+11]
+ mov ah,0
+ cmp al,220
+ jc notnegative1
+ mov ah,255
+notnegative1: mov bx,ax
+ add bx,mapady
+ mov al,[es:si+10]
+ mov ah,0
+ cmp al,220
+ jc notnegative2
+ mov ah,255
+notnegative2: mov di,ax
+ add di,mapadx
+ mov al,[es:si+15]
+ mov ah,0
+ cmp byte ptr [es:si+30],0
+ jz steadyframe
+ mov ah,8
+steadyframe: cmp priority,6
+ jnz notquickp
+notquickp: call showframe
+ pop bx es
+ ret
+
+ endp
+
+
+
+
+;cmp priority,6
+; ;jz quicksprite ; WIll NEED TO DO THIS LATER!!!!!
+;Quicksprite: mov cl,al
+; mov ch,0
+; mov dx,[es:bx+6]
+; mov es,workspace
+; mov ds,dx
+; mov bx,ax
+; mov dx,vgawidth
+;
+;printquickloop: push di si
+;
+; push si
+; add si,cx
+; dec si
+; jmp startzero
+;zeroloop: dec si
+; dec cl
+;startzero: cmp [si],ch
+; jz zeroloop
+; pop si
+;
+;;printquickline: cmp [si],ch
+; jnz foundfirstpix
+; inc si
+; inc di
+; dec cl
+; jnz printquickline
+;
+;foundfirstpix: cmp cl,0
+; jz finquickspr
+; rep movsb
+;
+;finquickspr: pop si di
+; mov cl,bl
+; add si,cx
+; add di,dx
+; dec bh
+; jnz printquickloop
+;
+; pop bx ds es
+; ret
+
+
+
+
+
+
+
+;Calcframe proc near
+;
+; ret
+;
+; mov al,[es:bx+15]
+; mov ah,0
+; mov cx,6
+; mul cx
+; add ax,[es:bx+8]
+;
+; mov dx,[es:bx+6]
+; push bx
+; mov ds,dx
+; mov bx,ax
+; mov ax,[bx]
+; mov cx,[bx+2]
+; mov dx,[bx+4]
+; pop bx
+; mov [es:bx+2],ax
+; add cx,[es:bx+8]
+; add cx,2080
+; mov [es:bx+4],cx ;calculates frame data
+;
+; mov al,[es:bx+10] ;this bit calculates the actual
+; add al,dl ;x and y (including any offset)
+; mov [es:bx+12],al
+; mov al,[es:bx+11]
+; add al,dh
+; mov [es:bx+13],al
+; ret
+;
+; endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Checkone proc near ;cx=x,y to check
+
+ push cx
+ mov al,ch
+ mov ah,0
+ mov cl,4
+ shr ax,cl
+ mov dl,al
+ pop cx
+ mov al,cl
+ mov ah,0
+ mov cl,4
+ shr ax,cl
+ mov ah,dl ; al,ah holds x,y in blocks
+
+ push ax
+ mov ch,0
+ mov cl,al
+ push cx
+ mov al,ah
+ mov ah,0
+ mov cx,11
+ mul cx
+ pop cx
+ add ax,cx
+
+ mov cx,3
+ mul cx
+ mov si,ax
+
+ mov ds,buffers
+ add si,mapflags
+ lodsw
+ mov cx,ax
+ lodsb
+ pop dx
+ ret
+
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Findsource proc near
+
+ mov ax,currentframe
+ cmp ax,160
+ jnc over1000
+ mov ds,reel1
+ mov takeoff,0
+ ret
+over1000: cmp ax,320
+ jnc over1001
+ mov ds,reel2
+ mov takeoff,160
+ ret
+over1001: mov ds,reel3
+ mov takeoff,320
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+;---------------------------------------------------------Routines for Ryan----
+
+
+Initman proc near
+
+ ;mov linepointer,254
+ mov al,ryanx
+ mov ah,ryany
+ mov si,ax
+ mov cx,offset cs:mainman
+ mov dx,mainsprites
+ mov di,0
+ call makesprite
+ mov byte ptr [es:bx+23],4
+ mov byte ptr [es:bx+22],0
+ mov byte ptr [es:bx+29],0
+ ret
+
+ endp
+
+
+
+
+
+
+
+Mainman proc near
+
+ cmp resetmanxy,1
+ jnz notinnewroom
+ mov resetmanxy,0
+ mov al,ryanx
+ mov ah,ryany
+ mov [es:bx+10],ax
+ mov byte ptr [es:bx+29],0
+ jmp executewalk
+notinnewroom: dec byte ptr [es:bx+22]
+ cmp byte ptr [es:bx+22],-1
+ jz executewalk
+ ret
+
+
+executewalk: mov byte ptr [es:bx+22],0 ; speed
+ mov al,turntoface
+ cmp al,facing
+ jz facingok
+ call aboutturn
+ jmp notwalk
+
+facingok: cmp turndirection,0
+ jz alreadyturned
+ cmp linepointer,254
+ jnz alreadyturned
+ mov reasseschanges,1
+ mov al,facing
+ cmp al,leavedirection
+ jnz alreadyturned
+ call checkforexit
+alreadyturned: mov turndirection,0
+ cmp linepointer,254
+ jnz walkman
+ mov byte ptr [es:bx+29],0
+ jmp notwalk
+
+walkman: mov al,[es:bx+29]
+ inc al
+ cmp al,11
+ jnz notanimend1
+ mov al,1
+notanimend1: mov [es:bx+29],al
+
+ call walking
+ cmp linepointer,254
+ jz afterwalk
+
+ mov al,facing
+ and al,1
+ jz isdouble
+ mov al,[es:bx+29]
+ cmp al,2
+ jz afterwalk
+ cmp al,7
+ jz afterwalk
+isdouble: call walking
+afterwalk: cmp linepointer,254
+ jnz notwalk
+ mov al,turntoface
+ cmp al,facing
+ jnz notwalk
+ mov reasseschanges,1
+ mov al,facing
+ cmp al,leavedirection
+ jnz notwalk
+ call checkforexit
+
+notwalk: mov al,facing
+ mov ah,0
+ mov di,offset cs:facelist
+ add di,ax
+ mov al,[cs:di]
+ add al,[es:bx+29]
+ mov [es:bx+15],al
+ mov ax,[es:bx+10]
+ mov ryanx,al
+ mov ryany,ah
+ ret
+
+facelist: db 0,60,33,71,11,82,22,93
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Aboutturn proc near
+
+ cmp turndirection,1
+ jz incdir
+ cmp turndirection,-1
+ jz decdir
+ mov al,facing
+ sub al,turntoface
+ jnc higher
+ neg al
+ cmp al,4
+ jnc decdir
+ jmp incdir
+higher: cmp al,4
+ jnc incdir
+ jmp decdir
+
+incdir: mov turndirection,1
+ mov al,facing
+ inc al
+ and al,7
+ mov facing,al
+ mov byte ptr [es:bx+29],0
+ ret
+
+decdir: mov turndirection,-1
+ mov al,facing
+ dec al
+ and al,7
+ mov facing,al
+ mov byte ptr [es:bx+29],0
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Walking proc near
+
+ cmp linedirection,0
+ jz normalwalk
+ mov al,linepointer
+ dec al
+ mov linepointer,al
+ cmp al,200
+ jnc endofline
+ jmp continuewalk
+
+normalwalk: mov al,linepointer
+ inc al
+ mov linepointer,al
+ cmp al,linelength
+ jnc endofline
+
+continuewalk: mov ah,0
+ add ax,ax
+ push es bx
+ mov dx,seg linedata
+ mov es,dx
+ mov bx,offset es:linedata
+ add bx,ax
+ mov ax,[es:bx]
+ pop bx es
+stillline: mov [es:bx+10],ax
+ ret
+
+endofline: mov linepointer,254
+ mov al,destination
+ mov manspath,al
+ cmp al,finaldest
+ jz finishedwalk
+ mov al,finaldest
+ mov destination,al
+ push es bx
+ call autosetwalk
+ pop bx es
+ ret
+
+finishedwalk: call facerightway
+ ret
+
+ endp
+
+
+
+
+
+
+
+Facerightway proc near
+
+ push es bx ;Face object when finished
+ call getroomspaths ;walking
+ mov al,manspath
+ mov ah,0
+ add ax,ax
+ add ax,ax
+ add ax,ax
+ add bx,ax
+ mov al,[es:bx+7]
+ mov turntoface,al
+ mov leavedirection,al
+ pop bx es
+ ret
+
+ endp
+
+
+
+
+
+
+
+Checkforexit proc near
+
+ mov cl,ryanx ;look under feet to see if
+ add cl,12 ;any flags are there
+ mov ch,ryany
+ add ch,12
+ call checkone
+ mov lastflag,cl
+ mov lastflagex,ch
+ mov flagx,dl
+ mov flagy,dh
+ mov al,lastflag
+
+ test al,64
+ jz notnewdirect
+ mov al,lastflagex
+ mov autolocation,al
+ ret
+
+notnewdirect: test al,32
+ jz notleave
+ push es bx
+ cmp reallocation,2
+ jnz notlouis
+ mov bl,0
+ push bx
+ mov al,"W"
+ mov ah,"E"
+ mov cl,"T"
+ mov ch,"A"
+ call isryanholding
+ pop bx
+ jz noshoe1
+ inc bl
+noshoe1: push bx
+ mov al,"W"
+ mov ah,"E"
+ mov cl,"T"
+ mov ch,"B"
+ call isryanholding
+ pop bx
+ jz noshoe2
+ inc bl
+noshoe2: cmp bl,2
+ jz notlouis
+ mov al,42
+ cmp bl,0
+ jz notravmessage
+ inc al
+notravmessage: mov cx,80
+ mov dx,10
+ mov bl,68
+ mov bh,64
+ call setuptimeduse
+ mov al,facing
+ add al,4
+ and al,7
+ mov turntoface,al
+ pop bx es
+ ret
+
+notlouis: pop bx es
+ mov needtotravel,1
+ ret
+
+
+
+notleave: test al,4
+ jz notaleft
+ call adjustleft
+ ret
+
+notaleft: test al,2
+ jz notaright
+ call adjustright
+ ret
+
+notaright: test al,8
+ jz notadown
+ call adjustdown
+ ret
+
+notadown: test al,16
+ jz notanup
+ call adjustup
+ ret
+
+notanup: ret
+
+ endp
+
+
+
+
+
+Adjustdown proc near
+
+ push es bx
+ add mapy,10
+ mov al,lastflagex
+ mov cl,16
+ mul cl
+ mov [es:bx+11],al
+ mov nowinnewroom,1
+ pop bx es
+ ret
+
+ endp
+
+
+
+
+Adjustup proc near
+
+ push es bx
+ sub mapy,10
+ mov al,lastflagex
+ mov cl,16
+ mul cl
+ mov [es:bx+11],al
+ mov nowinnewroom,1
+ pop bx es
+ ret
+
+ endp
+
+
+
+
+
+Adjustleft proc near
+
+ push es bx
+ mov lastflag,0
+ sub mapx,11
+ mov al,lastflagex
+ mov cl,16
+ mul cl
+ mov [es:bx+10],al
+ mov nowinnewroom,1
+ pop bx es
+ ret
+
+ endp
+
+
+
+
+
+
+Adjustright proc near
+
+ push es bx
+ add mapx,11
+ mov al,lastflagex
+ mov cl,16
+ mul cl
+ sub al,2
+ mov [es:bx+10],al
+ mov nowinnewroom,1
+ pop bx es
+ ret
+
+ endp
+
+
+
+
+
+Reminders proc nar
+
+ cmp reallocation,24
+ jnz notinedenslift
+ cmp mapx,44
+ jnz notinedenslift
+ cmp progresspoints,0
+ jnz notfirst
+ mov al,"D"
+ mov ah,"K"
+ mov cl,"E"
+ mov ch,"Y"
+ call isryanholding
+ jz forgotone
+ mov al,"C"
+ mov ah,"S"
+ mov cl,"H"
+ mov ch,"R"
+ call findexobject
+ cmp al,numexobjects
+ jz forgotone
+ mov ax,[es:bx+2]
+ cmp al,4
+ jnz forgotone ;card is in inventory
+ cmp ah,255
+ jz havegotcard ;card must be in an ex
+ mov cl,"P" ;object
+ mov ch,"U"
+ mov dl,"R"
+ mov dh,"S"
+ xchg al,ah
+ call compare
+ jnz forgotone ;is it in wallet?
+havegotcard: inc progresspoints
+notfirst: ret
+
+forgotone: mov al,50 ;message number
+ mov bl,54 ;x pos of message
+ mov bh,70 ;and y pos
+ mov cx,48 ;time on screen
+ mov dx,8 ;pause before show
+ call setuptimeduse
+ ret
+notinedenslift: ret
+
+ endp
+
+
+
+
+
+;---------------------------------------------------------------------------
+;
+; Sprite update routines for rain effect
+;
+;---------------------------------------------------------------------------
+
+
+
+
+Initrain proc near
+
+ mov es,buffers
+ mov di,rainlist
+ mov bx,offset cs:rainlocations
+checkmorerain: mov al,[cs:bx]
+ cmp al,255
+ jz finishinitrain
+ cmp al,reallocation
+ jnz checkrain
+ mov al,[cs:bx+1]
+ cmp al,mapx
+ jnz checkrain
+ mov al,[cs:bx+2]
+ cmp al,mapy
+ jnz checkrain
+ mov al,[cs:bx+3]
+ mov rainspace,al
+ jmp dorain
+checkrain: add bx,4
+ jmp checkmorerain
+
+dorain: mov cx,4
+initraintop: call randomnumber
+ and al,31
+ add al,3
+ cmp al,rainspace
+ jnc initraintop
+ add cl,al
+ cmp cl,mapxsize
+ jnc initrainside
+ push cx
+ call splitintolines
+ pop cx
+ jmp initraintop
+
+initrainside: mov cl,mapxsize
+ dec cl
+initrainside2: call randomnumber
+ and al,31
+ add al,3
+ cmp al,rainspace
+ jnc initrainside2
+ add ch,al
+ cmp ch,mapysize
+ jnc finishinitrain
+ push cx
+ call splitintolines
+ pop cx
+ jmp initrainside2
+finishinitrain: mov al,255
+ stosb
+ ret
+
+rainlocations: db 1,44,10,16 ;location,map x,y,seed
+ db 4,11,30,14
+ db 4,22,30,14
+ db 3,33,10,14
+ db 10,33,30,14
+ db 10,22,30,24
+ db 9,22,10,14
+ db 2,33,0,14
+ db 2,22,0,14
+ db 6,11,30,14
+ db 7,11,20,18
+ db 7,0,20,18
+ db 7,0,30,18
+ db 55,44,0,14
+ db 5,22,30,14
+
+ db 8,0,10,18
+ db 8,11,10,18
+ db 8,22,10,18
+ db 8,33,10,18
+ db 8,33,20,18
+ db 8,33,30,18
+ db 8,33,40,18
+ db 8,22,40,18
+ db 8,11,40,18
+
+ db 21,44,20,18
+ db 255
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Splitintolines proc near
+
+
+lookforlinestart: call getblockofpixel
+ cmp al,0
+ jnz foundlinestart
+ dec cl
+ inc ch
+ cmp cl,0
+ jz endofthisline
+ cmp ch,mapysize
+ jnc endofthisline
+ jmp lookforlinestart
+
+foundlinestart: mov [es:di],cx
+ mov bh,1
+lookforlineend: call getblockofpixel
+ cmp al,0
+ jz foundlineend
+ dec cl
+ inc ch
+ cmp cl,0
+ jz foundlineend
+ cmp ch,mapysize
+ jnc foundlineend
+ inc bh
+ jmp lookforlineend
+
+foundlineend: push cx
+ mov [es:di+2],bh
+ call randomnumber
+ mov [es:di+3],al
+ call randomnumber
+ mov [es:di+4],al
+ call randomnumber
+ and al,3
+ add al,4
+ mov [es:di+5],al
+ add di,6
+ pop cx
+ cmp cl,0
+ jz endofthisline
+ cmp ch,mapysize
+ jnc endofthisline
+ jmp lookforlinestart
+
+endofthisline: ret
+
+ endp
+
+
+
+
+Getblockofpixel proc near
+
+ push cx es di
+ mov ax,mapxstart
+ add cl,al
+ mov ax,mapystart
+ add ch,al
+ call checkone
+ and cl,1
+ jnz failrain
+ pop di es cx
+ ret
+failrain: pop di es cx
+ mov al,0
+ ret
+
+ endp
+
+
+
+
+Showrain proc near
+
+ mov ds,mainsprites
+ mov si,6*58
+ mov ax,[si+2]
+ mov si,ax
+ add si,2080
+
+ mov bx,rainlist
+ mov es,buffers
+ cmp byte ptr [es:bx],255
+ jz nothunder
+
+morerain: mov es,buffers
+ cmp byte ptr [es:bx],255
+ jz finishrain
+
+ mov al,[es:bx+1]
+ mov ah,0
+ add ax,mapady
+ add ax,mapystart
+ mov cx,320
+ mul cx
+ mov cl,[es:bx]
+ mov ch,0
+ add ax,cx
+ add ax,mapadx
+ add ax,mapxstart
+ mov di,ax
+
+ mov cl,[es:bx+2]
+ mov ch,0
+ mov ax,[es:bx+3]
+ mov dl,[es:bx+5]
+ mov dh,0
+ sub ax,dx
+ and ax,511
+ mov [es:bx+3],ax
+ add bx,6
+
+ push si
+ add si,ax
+ mov es,workspace
+ mov ah,0
+ mov dx,320-2
+rainloop: lodsb
+ cmp al,ah
+ jz noplot
+ stosb
+ add di,dx
+ loop rainloop
+ pop si
+ jmp morerain
+noplot: add di,320-1
+ loop rainloop
+ pop si
+ jmp morerain
+
+finishrain: cmp ch1blockstocopy,0
+ jnz nothunder
+ cmp reallocation,2
+ jnz notlouisthund
+ cmp beenmugged,1
+ jnz nothunder
+notlouisthund: cmp reallocation,55
+ jz nothunder
+ call randomnum1
+ cmp al,1
+ jnc nothunder
+ mov al,7
+ cmp ch0playing,6
+ jz isthunder1
+ mov al,4
+isthunder1: call playchannel1
+nothunder: ret
+
+ endp
+
+
+
+
+
+
+
+;---------------------------------------------------------------------------
+;
+; Sprite update routines for background objects
+;
+;---------------------------------------------------------------------------
+
+
+
+
+
+
+Backobject proc near
+
+ mov ds,setdat
+ mov di,[es:bx+20]
+
+ mov al,[es:bx+18]
+ cmp al,0
+ jz $48z
+ dec al
+ mov [es:bx+18],al
+ jmp finishback
+
+$48z: mov al,[di+7]
+ mov [es:bx+18],al
+ mov al,[di+8]
+ cmp al,6
+ jnz notwidedoor
+ call widedoor
+ jmp finishback
+
+notwidedoor: cmp al,5
+ jnz notrandom
+ call random
+ jmp finishback
+
+notrandom: cmp al,4
+ jnz notlockdoor
+ call lockeddoorway
+ jmp finishback
+
+notlockdoor: cmp al,3
+ jnz notlift
+ call liftsprite
+ jmp finishback
+
+notlift: cmp al,2
+ jnz notdoor
+ call doorway
+ jmp finishback
+
+notdoor: cmp al,1
+ jnz steadyob
+ call constant
+ jmp finishback
+
+steadyob: call steady
+
+finishback: ;call calcframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Liftsprite proc near
+
+ mov al,liftflag
+ cmp al,0
+ jz liftclosed
+ cmp al,1
+ jz liftopen
+ cmp al,3
+ jz openlift
+
+ mov al,[es:bx+19]
+ cmp al,0
+ jz finishclose
+ dec al
+ cmp al,11
+ jnz pokelift
+ push ax
+ mov al,3
+ call liftnoise
+ pop ax
+ jmp pokelift
+finishclose: mov liftflag,0
+ ret
+
+openlift: mov al,[es:bx+19]
+ cmp al,12
+ jz endoflist
+ inc al
+ cmp al,1
+ jnz pokelift
+ push ax
+ mov al,2
+ call liftnoise
+ pop ax
+pokelift: mov [es:bx+19],al
+ mov ah,0
+ push di
+ add di,ax
+ mov al,[di+18]
+ pop di
+ mov [es:bx+15],al
+ mov [di+17],al
+ ret
+
+endoflist: mov liftflag,1
+ ret
+
+liftopen: mov al,liftpath
+ push es bx
+ call turnpathon
+ pop bx es
+ cmp counttoclose,0
+ jz nocountclose
+ dec counttoclose
+ cmp counttoclose,0
+ jnz nocountclose
+ mov liftflag,2
+nocountclose: mov al,12
+ jmp pokelift
+
+liftclosed: mov al,liftpath
+ push es bx
+ call turnpathoff
+ pop bx es
+ cmp counttoopen,0
+ jz nocountopen
+ dec counttoopen
+ cmp counttoopen,0
+ jnz nocountopen
+ mov liftflag,3
+nocountopen: mov al,0
+ jmp pokelift
+
+ endp
+
+
+Liftnoise proc near
+
+ cmp reallocation,5
+ jz hissnoise
+ cmp reallocation,21
+ jz hissnoise
+ call playchannel1
+ ret
+hissnoise: if demo
+ mov al,25
+ else
+ mov al,13
+ endif
+ call playchannel1
+ ret
+
+ endp
+
+
+
+
+Random proc near
+
+ call randomnum1
+ push di
+ and ax,7
+ add di,18
+ add di,ax
+ mov al,[di]
+ pop di
+ mov [es:bx+15],al
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Steady proc near
+
+ mov al,[di+18]
+ mov [di+17],al
+ mov [es:bx+15],al
+ ret
+
+ endp
+
+
+
+
+
+Constant proc near
+
+ inc byte ptr [es:bx+19]
+ mov cl,[es:bx+19]
+ mov ch,0
+ add di,cx
+ cmp byte ptr [di+18],255
+ jnz gotconst
+ sub di,cx
+ mov cx,0
+ mov [es:bx+19],cl
+gotconst: mov al,[di+18]
+ sub di,cx
+ mov [es:bx+15],al
+ mov [di+17],al
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Doorway proc near
+
+ mov doorcheck1,-24
+ mov doorcheck2,10
+ mov doorcheck3,-30
+ mov doorcheck4,10
+ call dodoor
+ ret
+
+ endp
+
+
+
+Widedoor proc near
+
+ mov doorcheck1,-24
+ mov doorcheck2,24
+ mov doorcheck3,-30
+ mov doorcheck4,24
+ call dodoor
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Dodoor proc near
+
+ mov al,ryanx
+ mov ah,ryany
+ mov cl,[es:bx+10]
+ mov ch,[es:bx+11]
+
+ cmp al,cl
+ jnc rtofdoor
+ sub al,cl
+ cmp al,doorcheck1
+ jnc upordown
+ jmp shutdoor
+rtofdoor: sub al,cl
+ cmp al,doorcheck2
+ jnc shutdoor
+
+upordown: cmp ah,ch
+ jnc botofdoor
+ sub ah,ch
+ cmp ah,doorcheck3
+ jc shutdoor
+ jmp opendoor
+botofdoor: sub ah,ch
+ cmp ah,doorcheck4
+ jnc shutdoor
+
+opendoor: mov cl,[es:bx+19]
+ cmp throughdoor,1
+ jnz notthrough
+ cmp cl,0
+ jnz notthrough
+ mov cl,6
+notthrough: inc cl
+ cmp cl,1
+ jnz notdoorsound2
+ mov al,0
+ cmp reallocation,5
+ jnz nothoteldoor2
+ if demo
+ mov al,25
+ else
+ mov al,13
+ endif
+nothoteldoor2: call playchannel1
+notdoorsound2: mov ch,0
+
+ push di
+ add di,cx
+ mov al,[di+18] ; must be a better way than this
+ cmp al,255
+ jnz atlast1
+ dec di
+ dec cl
+atlast1: mov [es:bx+19],cl
+ mov al,[di+18]
+ pop di
+ mov [es:bx+15],al
+ mov [di+17],al
+ mov throughdoor,1
+ ret
+
+
+shutdoor: mov cl,[es:bx+19]
+ cmp cl,5
+ jnz notdoorsound1
+ mov al,1
+ cmp reallocation,5
+ jnz nothoteldoor1
+ if demo
+ mov al,25
+ else
+ mov al,13
+ endif
+nothoteldoor1: call playchannel1
+notdoorsound1: cmp cl,0
+ jz atlast2
+ dec cl
+ mov [es:bx+19],cl
+atlast2: mov ch,0
+ push di
+ add di,cx
+ mov al,[di+18]
+ pop di
+ mov [es:bx+15],al
+ mov [di+17],al
+ cmp cl,5
+ jnz notnearly
+ mov throughdoor,0
+notnearly: ret
+
+ endp
+
+
+
+
+
+
+
+
+Lockeddoorway proc near
+
+ mov al,ryanx
+ mov ah,ryany
+ mov cl,[es:bx+10]
+ mov ch,[es:bx+11]
+
+ cmp al,cl
+ jnc rtofdoor2
+ sub al,cl
+ cmp al,-24
+ jnc upordown2
+ jmp shutdoor2
+rtofdoor2: sub al,cl
+ cmp al,10
+ jnc shutdoor2
+
+upordown2: cmp ah,ch
+ jnc botofdoor2
+ sub ah,ch
+ cmp ah,-30
+ jc shutdoor2
+ jmp opendoor2
+botofdoor2: sub ah,ch
+ cmp ah,12
+ jnc shutdoor2
+
+opendoor2: cmp throughdoor,1
+ jz mustbeopen
+ cmp lockstatus,1
+ jz shutdoor
+mustbeopen: mov cl,[es:bx+19]
+ cmp cl,1
+ jnz notdoorsound4
+ mov al,0
+ call playchannel1
+notdoorsound4: cmp cl,6 ; was 3
+ jnz noturnonyet
+ mov al,doorpath
+ push es bx
+ call turnpathon
+ pop bx es
+
+noturnonyet: mov cl,[es:bx+19]
+ cmp throughdoor,1
+ jnz notthrough2
+ cmp cl,0
+ jnz notthrough2
+ mov cl,6
+notthrough2: inc cl
+ mov ch,0
+
+ push di
+ add di,cx
+ mov al,[di+18]
+ cmp al,255
+ jnz atlast3
+ dec di
+ dec cl
+atlast3: mov [es:bx+19],cl
+ mov al,[di+18]
+ pop di
+ mov [es:bx+15],al
+ mov [di+17],al
+ cmp cl,5
+ jnz justshutting
+ mov throughdoor,1
+justshutting: ret
+
+
+
+shutdoor2: mov cl,[es:bx+19]
+ cmp cl,5
+ jnz notdoorsound3
+ mov al,1
+ call playchannel1
+notdoorsound3: cmp cl,0
+ jz atlast4
+ dec cl
+ mov [es:bx+19],cl
+atlast4: mov ch,0
+ mov throughdoor,0
+ push di
+ add di,cx
+ mov al,[di+18]
+ pop di
+ mov [es:bx+15],al
+ mov [di+17],al
+ cmp cl,0 ;1
+ jnz notlocky
+ mov al,doorpath
+ push es bx
+ call turnpathoff
+ pop bx es
+ mov lockstatus,1
+notlocky: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+;------------------------------------------------------------People handler----
+
+Updatepeople proc near
+
+ mov es,buffers
+ mov di,peoplelist
+ mov listpos,di
+ mov cx,12*5
+ mov al,255
+ rep stosb
+
+ inc maintimer
+ push cs
+ pop es
+ mov bx,offset cs:reelroutines
+ mov di,offset cs:reelcalls
+updateloop: mov al,[es:bx]
+ cmp al,255
+ jz endupdate
+ cmp al,reallocation
+ jnz notinthisroom
+ mov cx,[es:bx+1]
+ cmp cl,mapx
+ jnz notinthisroom
+ cmp ch,mapy
+ jnz notinthisroom
+ push di
+ mov ax,[cs:di]
+ call ax
+ pop di
+notinthisroom: add bx,8
+ add di,2
+ jmp updateloop
+endupdate: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Getreelframeax proc near
+
+ push ds
+ mov currentframe,ax
+ call findsource
+ push ds
+ pop es
+ pop ds
+ mov ax,currentframe
+ sub ax,takeoff
+ add ax,ax
+ mov cx,ax
+ add ax,ax
+ add ax,cx
+ mov bx,ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Reelsonscreen proc near
+
+ call reconstruct
+ call updatepeople
+ call watchreel
+ call showrain
+ call usetimedtext
+ ret
+
+ endp
+
+
+
+
+
+
+Plotreel proc near
+
+ call getreelstart
+retryreel: push es si
+ mov ax,[es:si+2]
+ cmp al,220
+ jc normalreel
+ cmp al,255
+ jz normalreel
+ call dealwithspecial
+ inc reelpointer
+ pop si es
+ add si,40
+ jmp retryreel
+
+normalreel: mov cx,8
+plotloop: push cx es si
+ mov ax,[es:si]
+ cmp ax,0ffffh
+ jz notplot
+ call showreelframe
+notplot: pop si es cx
+ add si,5
+ loop plotloop
+ call soundonreels
+ pop bx es
+ ret
+
+ endp
+
+
+
+
+
+Soundonreels proc near
+
+ mov bl,reallocation
+ add bl,bl
+ xor bh,bh
+ add bx,offset cs:roombyroom
+ mov si,[cs:bx]
+
+reelsoundloop: mov al,[cs:si]
+ cmp al,255
+ jz endreelsound
+ mov ax,[cs:si+1]
+ cmp ax,reelpointer
+ jnz skipreelsound
+
+ cmp ax,lastsoundreel
+ jz skipreelsound
+
+ mov lastsoundreel,ax
+ mov al,[cs:si]
+ cmp al,64
+ jc playchannel1
+ cmp al,128
+ jc channel0once
+ and al,63
+ mov ah,255
+ jmp playchannel0
+channel0once: and al,63
+ mov ah,0
+ jmp playchannel0
+skipreelsound: add si,3
+ jmp reelsoundloop
+endreelsound: mov ax,lastsoundreel
+ cmp ax,reelpointer
+ jz nochange2
+ mov lastsoundreel,-1
+nochange2: ret
+
+roombyroom dw r0,r1,r2,r0,r0,r0,r6,r0,r8,r9,r10,r11,r12,r13,r14,r0,r0,r0,r0,r0
+ dw r20,r0,r22,r23,r0,r25,r26,r27,r28,r29,r0,r0,r0,r0,r0
+ dw r0,r0,r0,r0,r0,r0,r0,r0,r0,r0,r45,r46,r47,r0,r0,r0,r0,r52,r53,r0,r55
+
+r0 db 255
+
+r1 db 15
+ dw 257
+ db 255
+
+r2 db 12
+ dw 5
+ db 13
+ dw 21
+ db 15 ;hitting floor?
+ dw 35
+ db 17
+ dw 50
+ db 18
+ dw 103
+ db 19
+ dw 108
+ db 255
+
+r6 db 18
+ dw 19
+ db 19
+ dw 23
+ db 255
+
+r8 db 12
+ dw 51
+ db 13
+ dw 53
+ db 14
+ dw 14
+ db 15
+ dw 20
+ db 0
+ dw 78
+ db 255
+
+r9 db 12
+ dw 119
+ db 12
+ dw 145
+ db 255
+
+r10 db 13
+ dw 16
+ db 255
+
+r11 db 13
+ dw 20
+ db 255
+
+r12 db 14
+ dw 16
+ db 255
+
+r13 db 15
+ dw 4
+ db 16
+ dw 8
+ db 17
+ dw 134
+ db 18
+ dw 153
+ db 255
+
+r14 db 13
+ dw 108
+ db 15
+ dw 326
+ db 15
+ dw 331
+ db 15
+ dw 336
+ db 15
+ dw 342
+ db 15
+ dw 348
+ db 15
+ dw 354
+ db 18
+ dw 159
+ db 18
+ dw 178
+ db 19+128
+ dw 217
+ db 20+64
+ dw 228
+ db 255
+
+r20 db 13
+ dw 20
+ db 13
+ dw 21
+ db 15
+ dw 34
+ db 13
+ dw 52
+ db 13
+ dw 55
+ db 25
+ dw 57
+ db 21
+ dw 73
+ db 255
+
+r22 db 13 ;room,sample
+ dw 196 ;reelpointer
+ db 13
+ dw 234
+ db 13
+ dw 156
+ db 14
+ dw 129
+ db 13
+ dw 124
+ db 15
+ dw 162
+ db 15
+ dw 200
+ db 15
+ dw 239
+ db 17
+ dw 99
+ db 12
+ dw 52
+ db 255
+
+r23 db 15
+ dw 56
+ db 16
+ dw 64
+ db 19
+ dw 22
+ db 20
+ dw 33
+ db 255
+
+r25 db 20
+ dw 11
+ db 20
+ dw 15
+ db 15
+ dw 28
+ db 13
+ dw 80
+ db 21
+ dw 82
+ db 19+128
+ dw 87
+ db 23+64
+ dw 128
+ db 255
+
+r26 db 12
+ dw 13
+ db 14
+ dw 39
+ db 12
+ dw 67
+ db 12
+ dw 75
+ db 12
+ dw 83
+ db 12
+ dw 91
+ db 15
+ dw 102 ; was 90, should be mine cart
+ db 255
+
+r27 db 22
+ dw 36
+ db 13
+ dw 125
+ db 18
+ dw 88
+ db 15
+ dw 107
+ db 14
+ dw 127
+ db 14
+ dw 154
+ db 19+128
+ dw 170
+ db 23+64
+ dw 232
+ db 255
+
+r28 db 21
+ dw 16
+ db 21
+ dw 72
+ db 21
+ dw 205
+ db 22
+ dw 63 ;65
+ db 23+128
+ dw 99
+ db 24+64
+ dw 158
+ db 255
+
+r29 db 13
+ dw 21
+ db 14
+ dw 24
+ db 19+128
+ dw 50
+ db 23+64
+ dw 75
+ if german
+ else
+ db 24
+ dw 128
+ endif
+ db 255
+
+r45 db 19+64
+ dw 46
+ db 16
+ dw 167
+ db 255
+
+r46 db 16
+ dw 19
+ db 14
+ dw 36
+ db 16
+ dw 50
+ db 14
+ dw 65
+ db 16
+ dw 81
+ db 14
+ dw 96
+ db 16
+ dw 114
+ db 14
+ dw 129
+ db 16
+ dw 147
+ db 14
+ dw 162
+ db 16
+ dw 177
+ db 14
+ dw 191
+ db 255
+
+r47 db 13
+ dw 48
+ db 14
+ dw 41
+ db 15
+ dw 78
+ db 16
+ dw 92
+ db 255
+
+r52 db 16
+ dw 115
+ db 255
+
+r53 db 21
+ dw 103
+ db 20
+ dw 199
+ db 255
+
+r55 db 17
+ dw 53
+ db 17
+ dw 54
+ db 17
+ dw 55
+ db 17
+ dw 56
+ db 17
+ dw 57
+ db 17
+ dw 58
+ db 17
+ dw 59
+ db 17
+ dw 61
+ db 17
+ dw 63
+ db 17
+ dw 64
+ db 17
+ dw 65
+ db 255
+
+ endp
+
+
+
+
+
+
+
+
+
+Reconstruct proc near
+
+ cmp havedoneobs,0
+ jz noneedtorecon
+ mov newobs,1
+ call drawfloor
+ call spriteupdate
+ call printsprites
+ if foreign
+ cmp reallocation,20
+ jnz notfudge
+ call undertextline
+notfudge:
+ endif
+ mov havedoneobs,0
+noneedtorecon: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Dealwithspecial proc near
+
+ sub al,220
+ cmp al,0
+ jnz notplset
+ mov al,ah
+ call placesetobject
+ mov havedoneobs,1
+ ret
+notplset: cmp al,1
+ jnz notremset
+ mov al,ah
+ call removesetobject
+ mov havedoneobs,1
+ ret
+notremset: cmp al,2
+ jnz notplfree
+ mov al,ah
+ call placefreeobject
+ mov havedoneobs,1
+ ret
+notplfree: cmp al,3
+ jnz notremfree
+ mov al,ah
+ call removefreeobject
+ mov havedoneobs,1
+ ret
+notremfree: cmp al,4
+ jnz notryanoff
+ call switchryanoff
+ ret
+notryanoff: cmp al,5
+ jnz notryanon
+ mov turntoface,ah
+ mov facing,ah
+ call switchryanon
+ ret
+notryanon: cmp al,6
+ jnz notchangeloc
+ mov newlocation,ah ; was new loc in watch
+ ;call switchryanon
+ ret
+notchangeloc: call movemap
+ ret
+
+ endp
+
+
+
+Movemap proc near
+
+ cmp ah,32
+ jnz notmapup2
+ sub mapy,20
+ mov nowinnewroom,1
+ ret
+
+notmapup2: cmp ah,16
+ jnz notmapupspec
+ sub mapy,10
+ mov nowinnewroom,1
+ ret
+
+notmapupspec: cmp ah,8
+ jnz notmapdownspec
+ add mapy,10
+ mov nowinnewroom,1
+ ret
+
+notmapdownspec: cmp ah,2
+ jnz notmaprightspec
+ add mapx,11
+ mov nowinnewroom,1
+ ret
+
+notmaprightspec: sub mapx,11
+ mov nowinnewroom,1
+ ret
+
+ endp
+
+
+
+
+Getreelstart proc near
+
+ mov ax,reelpointer
+ mov cx,40
+ mul cx
+ mov es,reels
+ mov si,ax
+ add si,reellist
+ ret
+
+ endp
+
+
+
+
+
+;------------------------------------------------------Printing a reel frame----
+
+
+
+Showreelframe proc near
+
+ mov al,[es:si+2]
+ mov ah,0
+ mov di,ax
+ add di,mapadx
+ mov al,[es:si+3]
+ mov bx,ax
+ add bx,mapady
+ mov ax,[es:si]
+ mov currentframe,ax
+ call findsource
+ mov ax,currentframe
+ sub ax,takeoff
+ mov ah,8
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+;-------------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+
+Deleverything proc near
+
+ mov al,mapysize
+ mov ah,0
+ add ax,mapoffsety
+ cmp ax,182
+ jnc bigroom
+ call maptopanel
+ ret
+bigroom: sub mapysize,8
+ call maptopanel
+ add mapysize,8
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Dumpeverything proc near
+
+ mov es,buffers
+ mov bx,printedlist
+dumpevery1: mov ax,[es:bx]
+ mov cx,[es:bx+2]
+ cmp ax,0ffffh
+ jz finishevery1
+ cmp ax,[es:bx+(40*5)]
+ jnz notskip1
+ cmp cx,[es:bx+(40*5)+2]
+ jz skip1
+
+notskip1: push bx es ds
+ mov bl,ah
+ mov bh,0
+ mov ah,0
+ mov di,ax
+ add di,mapadx
+ add bx,mapady
+ call multidump
+ pop ds es bx
+
+skip1: add bx,5
+ jmp dumpevery1
+
+finishevery1: mov bx,printedlist+(40*5)
+dumpevery2: mov ax,[es:bx]
+ mov cx,[es:bx+2]
+ cmp ax,0ffffh
+ jz finishevery2
+
+ push bx es ds
+ mov bl,ah
+ mov bh,0
+ mov ah,0
+ mov di,ax
+ add di,mapadx
+ add bx,mapady
+ call multidump
+ pop ds es bx
+ add bx,5
+ jmp dumpevery2
+
+finishevery2: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/talk.asm b/devtools/tasmrecover/dreamweb/talk.asm
index cb100f6602..d2c27f059b 100644
--- a/devtools/tasmrecover/dreamweb/talk.asm
+++ b/devtools/tasmrecover/dreamweb/talk.asm
@@ -1,580 +1,580 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-Talk proc near
-
- mov talkpos,0
- mov inmaparea,0
- mov al,command
- mov character,al
- call createpanel
- call showpanel
- call showman
- call showexit
- call undertextline
- call convicons
- call starttalk
- mov commandtype,255
- call readmouse
- call showpointer
- call worktoscreen
-waittalk: call delpointer
- call readmouse
- call animpointer
- call showpointer
- call vsync
- call dumppointer
- call dumptextline
- mov getback,0
- mov bx,offset cs:talklist
- call checkcoords
- cmp getback,0
- jz waittalk
-finishtalk: mov bx,persondata
- push cs
- pop es
- cmp talkpos,4
- jc notnexttalk
- mov al,[es:bx+7]
- or al,128
- mov [es:bx+7],al
-notnexttalk: call redrawmainscrn
- call worktoscreenm
- cmp speechloaded,1
- jnz nospeech
- call cancelch1
- mov volumedirection,-1 ;fade (louder)
- mov volumeto,0 ;up to 0 (max)
-nospeech: ret
-
-talklist: dw 273,320,157,198,getback1
- dw 240,290,2,44,moretalk
- dw 0,320,0,200,blank
- dw 0ffffh
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-Convicons proc near
-
- mov al,character
- and al,127
- call getpersframe
- mov di,234
- mov bx,2
- mov currentframe,ax
- call findsource
- mov ax,currentframe
- sub ax,takeoff
- mov ah,0
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-
-
-Getpersframe proc near
-
- mov ah,0
- add ax,ax
- mov bx,ax
- mov es,people
- add bx,personframes
- mov ax,[es:bx]
- ret
-
- endp
-
-
-
-
-
-Starttalk proc near
-
- mov talkmode,0
- mov al,character
- and al,127
- call getpersontext
- mov charshift,91+91
- mov di,66
- mov bx,64
- mov dl,241
- mov al,0
- mov ah,79
- call printdirect
- mov charshift,0
- mov di,66
- mov bx,80
- mov dl,241
- mov al,0
- mov ah,0
- call printdirect
-
- if cd
- mov speechloaded,0
- mov al,character
- and al,127
- mov ah,0
- mov cx,64
- mul cx
- mov cl,"C"
- mov dl,"R"
- mov dh,reallocation
- call loadspeech
- cmp speechloaded,1
- jnz nospeech1
- mov volumedirection,1 ;quieter
- mov volumeto,6 ;quite quiet!
- mov al,50+12
- call playchannel1
- endif
-nospeech1: ret
-
- endp
-
-
-
-
-
-Getpersontext proc near
-
- mov ah,0
- mov cx,64*2
- mul cx
- mov si,ax
- mov es,people
- add si,persontxtdat
- mov cx,persontext
- mov ax,[es:si]
- add ax,cx
- mov si,ax
- ret
-
- endp
-
-
-
-
-
-
-
-Moretalk proc near
-
- ;cmp ch1playing,255
- ;jnz cantredes
- cmp talkmode,0
- jz canmore
- call redes
- ret
-
-canmore: cmp commandtype,215
- jz alreadymore
- mov commandtype,215
- mov al,49
- call commandonly
-alreadymore: mov ax,mousebutton
- cmp ax,oldbutton
- jz nomore
- and ax,1
- jnz domoretalk
-nomore: ret
-
-domoretalk: mov talkmode,2
- mov talkpos,4
- cmp character,100
- jc notsecondpart
- mov talkpos,48
-notsecondpart: call dosometalk
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Dosometalk proc near
-
- if cd
-dospeech: mov al,talkpos
- mov al,character
- and al,127
- mov ah,0
- mov cx,64
- mul cx
- mov cx,ax
- mov al,talkpos
- mov ah,0
- add ax,cx
- add ax,ax
- mov si,ax
-
- mov es,people
- add si,persontxtdat
- mov cx,persontext
-
- mov ax,[es:si]
- add ax,cx
- mov si,ax
- cmp byte ptr [es:si],0
- jz endheartalk
-
- push es si
- call createpanel
- call showpanel
- call showman
- call showexit
- call convicons
- pop si es
-
- mov di,164
- mov bx,64
- mov dl,144
- mov al,0
- mov ah,0
- call printdirect
-
- mov al,character
- and al,127
- mov ah,0
- mov cx,64
- mul cx
- mov cl,talkpos
- mov ch,0
- add ax,cx
- mov cl,"C"
- mov dl,"R"
- mov dh,reallocation
- call loadspeech
- cmp speechloaded,0
- jz noplay1
- mov al,62
- call playchannel1
-
-noplay1: mov pointermode,3
- call worktoscreenm
- mov cx,180
- call hangonpq
+Talk proc near
+
+ mov talkpos,0
+ mov inmaparea,0
+ mov al,command
+ mov character,al
+ call createpanel
+ call showpanel
+ call showman
+ call showexit
+ call undertextline
+ call convicons
+ call starttalk
+ mov commandtype,255
+ call readmouse
+ call showpointer
+ call worktoscreen
+waittalk: call delpointer
+ call readmouse
+ call animpointer
+ call showpointer
+ call vsync
+ call dumppointer
+ call dumptextline
+ mov getback,0
+ mov bx,offset cs:talklist
+ call checkcoords
+ cmp getback,0
+ jz waittalk
+finishtalk: mov bx,persondata
+ push cs
+ pop es
+ cmp talkpos,4
+ jc notnexttalk
+ mov al,[es:bx+7]
+ or al,128
+ mov [es:bx+7],al
+notnexttalk: call redrawmainscrn
+ call worktoscreenm
+ cmp speechloaded,1
+ jnz nospeech
+ call cancelch1
+ mov volumedirection,-1 ;fade (louder)
+ mov volumeto,0 ;up to 0 (max)
+nospeech: ret
+
+talklist: dw 273,320,157,198,getback1
+ dw 240,290,2,44,moretalk
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+Convicons proc near
+
+ mov al,character
+ and al,127
+ call getpersframe
+ mov di,234
+ mov bx,2
+ mov currentframe,ax
+ call findsource
+ mov ax,currentframe
+ sub ax,takeoff
+ mov ah,0
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Getpersframe proc near
+
+ mov ah,0
+ add ax,ax
+ mov bx,ax
+ mov es,people
+ add bx,personframes
+ mov ax,[es:bx]
+ ret
+
+ endp
+
+
+
+
+
+Starttalk proc near
+
+ mov talkmode,0
+ mov al,character
+ and al,127
+ call getpersontext
+ mov charshift,91+91
+ mov di,66
+ mov bx,64
+ mov dl,241
+ mov al,0
+ mov ah,79
+ call printdirect
+ mov charshift,0
+ mov di,66
+ mov bx,80
+ mov dl,241
+ mov al,0
+ mov ah,0
+ call printdirect
+
+ if cd
+ mov speechloaded,0
+ mov al,character
+ and al,127
+ mov ah,0
+ mov cx,64
+ mul cx
+ mov cl,"C"
+ mov dl,"R"
+ mov dh,reallocation
+ call loadspeech
+ cmp speechloaded,1
+ jnz nospeech1
+ mov volumedirection,1 ;quieter
+ mov volumeto,6 ;quite quiet!
+ mov al,50+12
+ call playchannel1
+ endif
+nospeech1: ret
+
+ endp
+
+
+
+
+
+Getpersontext proc near
+
+ mov ah,0
+ mov cx,64*2
+ mul cx
+ mov si,ax
+ mov es,people
+ add si,persontxtdat
+ mov cx,persontext
+ mov ax,[es:si]
+ add ax,cx
+ mov si,ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+Moretalk proc near
+
+ ;cmp ch1playing,255
+ ;jnz cantredes
+ cmp talkmode,0
+ jz canmore
+ call redes
+ ret
+
+canmore: cmp commandtype,215
+ jz alreadymore
+ mov commandtype,215
+ mov al,49
+ call commandonly
+alreadymore: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz nomore
+ and ax,1
+ jnz domoretalk
+nomore: ret
+
+domoretalk: mov talkmode,2
+ mov talkpos,4
+ cmp character,100
+ jc notsecondpart
+ mov talkpos,48
+notsecondpart: call dosometalk
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Dosometalk proc near
+
+ if cd
+dospeech: mov al,talkpos
+ mov al,character
+ and al,127
+ mov ah,0
+ mov cx,64
+ mul cx
+ mov cx,ax
+ mov al,talkpos
+ mov ah,0
+ add ax,cx
+ add ax,ax
+ mov si,ax
+
+ mov es,people
+ add si,persontxtdat
+ mov cx,persontext
+
+ mov ax,[es:si]
+ add ax,cx
+ mov si,ax
+ cmp byte ptr [es:si],0
+ jz endheartalk
+
+ push es si
+ call createpanel
+ call showpanel
+ call showman
+ call showexit
+ call convicons
+ pop si es
+
+ mov di,164
+ mov bx,64
+ mov dl,144
+ mov al,0
+ mov ah,0
+ call printdirect
+
+ mov al,character
+ and al,127
+ mov ah,0
+ mov cx,64
+ mul cx
+ mov cl,talkpos
+ mov ch,0
+ add ax,cx
+ mov cl,"C"
+ mov dl,"R"
+ mov dh,reallocation
+ call loadspeech
+ cmp speechloaded,0
+ jz noplay1
+ mov al,62
+ call playchannel1
+
+noplay1: mov pointermode,3
+ call worktoscreenm
+ mov cx,180
+ call hangonpq
jnc $1
ret
-
+
$1:
- inc talkpos
-
- mov al,talkpos
- mov al,character
- and al,127
- mov ah,0
- mov cx,64
- mul cx
- mov cx,ax
- mov al,talkpos
- mov ah,0
- add ax,cx
- add ax,ax
- mov si,ax
-
- mov es,people
- add si,persontxtdat
- mov cx,persontext
-
- mov ax,[es:si]
- add ax,cx
- mov si,ax
- cmp byte ptr [es:si],0
- jz endheartalk
- cmp byte ptr [es:si],":"
- jz skiptalk2
- cmp byte ptr [es:si],32
- jz skiptalk2
-
- push es si
- call createpanel
- call showpanel
- call showman
- call showexit
- call convicons
- pop si es
-
- mov di,48
- mov bx,128
- mov dl,144
- mov al,0
- mov ah,0
- call printdirect
-
- mov al,character
- and al,127
- mov ah,0
- mov cx,64
- mul cx
- mov cl,talkpos
- mov ch,0
- add ax,cx
- mov cl,"C"
- mov dl,"R"
- mov dh,reallocation
- call loadspeech
- cmp speechloaded,0
- jz noplay2
- mov al,62
- call playchannel1
-
-noplay2: mov pointermode,3
- call worktoscreenm
- mov cx,180
- call hangonpq
+ inc talkpos
+
+ mov al,talkpos
+ mov al,character
+ and al,127
+ mov ah,0
+ mov cx,64
+ mul cx
+ mov cx,ax
+ mov al,talkpos
+ mov ah,0
+ add ax,cx
+ add ax,ax
+ mov si,ax
+
+ mov es,people
+ add si,persontxtdat
+ mov cx,persontext
+
+ mov ax,[es:si]
+ add ax,cx
+ mov si,ax
+ cmp byte ptr [es:si],0
+ jz endheartalk
+ cmp byte ptr [es:si],":"
+ jz skiptalk2
+ cmp byte ptr [es:si],32
+ jz skiptalk2
+
+ push es si
+ call createpanel
+ call showpanel
+ call showman
+ call showexit
+ call convicons
+ pop si es
+
+ mov di,48
+ mov bx,128
+ mov dl,144
+ mov al,0
+ mov ah,0
+ call printdirect
+
+ mov al,character
+ and al,127
+ mov ah,0
+ mov cx,64
+ mul cx
+ mov cl,talkpos
+ mov ch,0
+ add ax,cx
+ mov cl,"C"
+ mov dl,"R"
+ mov dh,reallocation
+ call loadspeech
+ cmp speechloaded,0
+ jz noplay2
+ mov al,62
+ call playchannel1
+
+noplay2: mov pointermode,3
+ call worktoscreenm
+ mov cx,180
+ call hangonpq
jnc skiptalk2
ret
-
-skiptalk2: inc talkpos
- jmp dospeech
-
-endheartalk: mov pointermode,0
- ret
-
- else
-
-watchtalk: mov al,talkpos
- mov al,character
- and al,127
- mov ah,0
- mov cx,64
- mul cx
- mov cx,ax
- mov al,talkpos
- mov ah,0
- add ax,cx
- add ax,ax
- mov si,ax
-
- mov es,people
- add si,persontxtdat
- mov cx,persontext
-
- mov ax,[es:si]
- add ax,cx
- mov si,ax
- cmp byte ptr [es:si],0
- jz endwatchtalk
-
- push es si
- call createpanel
- call showpanel
- call showman
- call showexit
- call convicons
- pop si es
-
- mov di,164
- mov bx,64
- mov dl,144
- mov al,0
- mov ah,0
- call printdirect
-
- mov pointermode,3
- call worktoscreenm
- mov cx,180
- call hangonpq
+
+skiptalk2: inc talkpos
+ jmp dospeech
+
+endheartalk: mov pointermode,0
+ ret
+
+ else
+
+watchtalk: mov al,talkpos
+ mov al,character
+ and al,127
+ mov ah,0
+ mov cx,64
+ mul cx
+ mov cx,ax
+ mov al,talkpos
+ mov ah,0
+ add ax,cx
+ add ax,ax
+ mov si,ax
+
+ mov es,people
+ add si,persontxtdat
+ mov cx,persontext
+
+ mov ax,[es:si]
+ add ax,cx
+ mov si,ax
+ cmp byte ptr [es:si],0
+ jz endwatchtalk
+
+ push es si
+ call createpanel
+ call showpanel
+ call showman
+ call showexit
+ call convicons
+ pop si es
+
+ mov di,164
+ mov bx,64
+ mov dl,144
+ mov al,0
+ mov ah,0
+ call printdirect
+
+ mov pointermode,3
+ call worktoscreenm
+ mov cx,180
+ call hangonpq
jnc $1
ret
$1:
-
- inc talkpos
-
- mov al,talkpos
- mov al,character
- and al,127
- mov ah,0
- mov cx,64
- mul cx
- mov cx,ax
- mov al,talkpos
- mov ah,0
- add ax,cx
- add ax,ax
- mov si,ax
-
- mov es,people
- add si,persontxtdat
- mov cx,persontext
-
- mov ax,[es:si]
- add ax,cx
- mov si,ax
- cmp byte ptr [es:si],0
- jz endwatchtalk
- cmp byte ptr [es:si],":"
- jz skiptalk
- cmp byte ptr [es:si],32
- jz skiptalk
-
- push es si
- call createpanel
- call showpanel
- call showman
- call showexit
- call convicons
- pop si es
-
- mov di,48
- mov bx,128
- mov dl,144
- mov al,0
- mov ah,0
- call printdirect
-
- mov pointermode,3
- call worktoscreenm
- mov cx,180
- call hangonpq
+
+ inc talkpos
+
+ mov al,talkpos
+ mov al,character
+ and al,127
+ mov ah,0
+ mov cx,64
+ mul cx
+ mov cx,ax
+ mov al,talkpos
+ mov ah,0
+ add ax,cx
+ add ax,ax
+ mov si,ax
+
+ mov es,people
+ add si,persontxtdat
+ mov cx,persontext
+
+ mov ax,[es:si]
+ add ax,cx
+ mov si,ax
+ cmp byte ptr [es:si],0
+ jz endwatchtalk
+ cmp byte ptr [es:si],":"
+ jz skiptalk
+ cmp byte ptr [es:si],32
+ jz skiptalk
+
+ push es si
+ call createpanel
+ call showpanel
+ call showman
+ call showexit
+ call convicons
+ pop si es
+
+ mov di,48
+ mov bx,128
+ mov dl,144
+ mov al,0
+ mov ah,0
+ call printdirect
+
+ mov pointermode,3
+ call worktoscreenm
+ mov cx,180
+ call hangonpq
jnc skiptalk
ret
-
-skiptalk: inc talkpos
- jmp watchtalk
-
-endwatchtalk: mov pointermode,0
- ret
-
- endif
-
- endp
-
-
-
-
-
-
-
-Hangonpq proc near
-
- mov getback,0
- mov bx,0
-hangloopq: push cx bx
- call delpointer
- call readmouse
- call animpointer
- call showpointer
- call vsync
- call dumppointer
- call dumptextline
- mov bx,offset cs:quitlist
- call checkcoords
- pop bx cx
- cmp getback,1
- jz quitconv
- cmp speechloaded,1
- jnz notspeaking
- cmp ch1playing,255
- jnz notspeaking
- inc bx
- cmp bx,40 ;pause after speech ends
- jz finishconv
-notspeaking: cmp mousebutton,0
- jz hangloopq
- cmp oldbutton,0
- jnz hangloopq
-finishconv: call delpointer
- mov pointermode,0
+
+skiptalk: inc talkpos
+ jmp watchtalk
+
+endwatchtalk: mov pointermode,0
+ ret
+
+ endif
+
+ endp
+
+
+
+
+
+
+
+Hangonpq proc near
+
+ mov getback,0
+ mov bx,0
+hangloopq: push cx bx
+ call delpointer
+ call readmouse
+ call animpointer
+ call showpointer
+ call vsync
+ call dumppointer
+ call dumptextline
+ mov bx,offset cs:quitlist
+ call checkcoords
+ pop bx cx
+ cmp getback,1
+ jz quitconv
+ cmp speechloaded,1
+ jnz notspeaking
+ cmp ch1playing,255
+ jnz notspeaking
+ inc bx
+ cmp bx,40 ;pause after speech ends
+ jz finishconv
+notspeaking: cmp mousebutton,0
+ jz hangloopq
+ cmp oldbutton,0
+ jnz hangloopq
+finishconv: call delpointer
+ mov pointermode,0
clc
- ret
-
-quitconv: call delpointer
- mov pointermode,0
- call cancelch1
+ ret
+
+quitconv: call delpointer
+ mov pointermode,0
+ call cancelch1
stc
- ret
-
-quitlist: dw 273,320,157,198,getback1
- dw 0,320,0,200,blank
- dw 0ffffh
-
- endp
-
-
-
-
-
-
-
-
-
-Redes proc near
-
- cmp ch1playing,255
- jnz cantredes
- cmp talkmode,2
- jz canredes
-cantredes: call blank
- ret
-
-canredes: cmp commandtype,217
- jz alreadyreds
- mov commandtype,217
- mov al,50
- call commandonly
-alreadyreds: mov ax,mousebutton
- and ax,1
- jnz doredes
- ret
-
-doredes: call delpointer
- call createpanel
- call showpanel
- call showman
- call showexit
- call convicons
- call starttalk
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ ret
+
+quitlist: dw 273,320,157,198,getback1
+ dw 0,320,0,200,blank
+ dw 0ffffh
+
+ endp
+
+
+
+
+
+
+
+
+
+Redes proc near
+
+ cmp ch1playing,255
+ jnz cantredes
+ cmp talkmode,2
+ jz canredes
+cantredes: call blank
+ ret
+
+canredes: cmp commandtype,217
+ jz alreadyreds
+ mov commandtype,217
+ mov al,50
+ call commandonly
+alreadyreds: mov ax,mousebutton
+ and ax,1
+ jnz doredes
+ ret
+
+doredes: call delpointer
+ call createpanel
+ call showpanel
+ call showman
+ call showexit
+ call convicons
+ call starttalk
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/titles.asm b/devtools/tasmrecover/dreamweb/titles.asm
index b4ca4d1c49..a47f31a327 100644
--- a/devtools/tasmrecover/dreamweb/titles.asm
+++ b/devtools/tasmrecover/dreamweb/titles.asm
@@ -1,583 +1,583 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-
-Titles proc near
-
- if demo
- ret
- else
- call clearpalette
- call biblequote
- call intro
- ret
- endif
-
- endp
-
-
-
-
-Endgame proc near
-
- mov dx,offset cs:endtextname
- call loadtemptext
- call monkspeaking
- call gettingshot
- call getridoftemptext
- mov volumeto,7
- mov volumedirection,1
- mov cx,200
- call hangon
- ret
-
- endp
-
-
- if cd
-
-Monkspeaking proc near
-
- mov roomssample,35
- call loadroomssample
- mov dx,offset cs:monkface
- call loadintotemp
- call clearwork ;createpanel2
- call showmonk
- call worktoscreen
- mov volume,7
- mov volumedirection,-1
- mov volumeto,5
- mov al,12
- mov ah,255
- call playchannel0
- call fadescreenups
- mov cx,300
- call hangon
-
- mov al,40
-loadspeech2: push ax
- mov dl,"T"
- mov dh,83
- mov cl,"T"
- mov ah,0
- call loadspeech
- mov al,50+12
- call playchannel1
+
+Titles proc near
+
+ if demo
+ ret
+ else
+ call clearpalette
+ call biblequote
+ call intro
+ ret
+ endif
+
+ endp
+
+
+
+
+Endgame proc near
+
+ mov dx,offset cs:endtextname
+ call loadtemptext
+ call monkspeaking
+ call gettingshot
+ call getridoftemptext
+ mov volumeto,7
+ mov volumedirection,1
+ mov cx,200
+ call hangon
+ ret
+
+ endp
+
+
+ if cd
+
+Monkspeaking proc near
+
+ mov roomssample,35
+ call loadroomssample
+ mov dx,offset cs:monkface
+ call loadintotemp
+ call clearwork ;createpanel2
+ call showmonk
+ call worktoscreen
+ mov volume,7
+ mov volumedirection,-1
+ mov volumeto,5
+ mov al,12
+ mov ah,255
+ call playchannel0
+ call fadescreenups
+ mov cx,300
+ call hangon
+
+ mov al,40
+loadspeech2: push ax
+ mov dl,"T"
+ mov dh,83
+ mov cl,"T"
+ mov ah,0
+ call loadspeech
+ mov al,50+12
+ call playchannel1
notloadspeech2:
call vsync
- cmp ch1playing,255
- jnz notloadspeech2
- pop ax
- inc al
- cmp al,48
- jnz loadspeech2
-
- mov volumedirection,1
- mov volumeto,7
- call fadescreendowns
- mov cx,300
- call hangon
- call getridoftemp
- ret
-
- endp
-
- else
-
-Monkspeaking proc near
-
- mov roomssample,35
- call loadroomssample
- mov dx,offset cs:monkface
- call loadintotemp
- call clearwork ;createpanel2
- call showmonk
- call worktoscreen
- mov volume,7
- mov volumedirection,-1
- mov volumeto,0
- mov al,12
- mov ah,255
- call playchannel0
- call fadescreenups
- mov cx,300
- call hangon
-
- mov al,40
-nextmonkspeak: push ax
- mov ah,0
- mov si,ax
- add si,si
- mov es,textfile1
- mov ax,[es:si]
- add ax,textstart
- mov si,ax
-nextbit: mov di,36
- mov bx,140
- mov dl,239
- call printdirect
- push ax si es
- call worktoscreen
- call clearwork
- call showmonk
- mov cx,240
- call hangon
- pop es si ax
- cmp al,0
- jnz nextbit
- pop ax
- inc al
- cmp al,44
- jnz nextmonkspeak
-
- mov volumedirection,1
- mov volumeto,7
- call fadescreendowns
- mov cx,300
- call hangon
- call getridoftemp
- ret
-
- endp
-
- endif
-
-
-
-
-Showmonk proc near
-
- mov al,0
- mov ah,128
- mov di,160
- mov bx,72
- mov ds,tempgraphics
- call showframe
- ret
-
- endp
-
-
-Gettingshot proc near
-
- mov newlocation,55
- call clearpalette
- call loadintroroom
- call fadescreenups
- mov volumeto,0
- mov volumedirection,-1
- call runendseq
- call clearbeforeload
- ret
-
- endp
-
-
-
-
-
-
-Credits proc near
-
- call clearpalette
- call realcredits
- ret
-
- endp
-
-
-
-Biblequote proc near
-
- call mode640x480
- mov dx,offset cs:title0graphics
- call showpcx
- call fadescreenups
- mov cx,80
- call hangone
- cmp lasthardkey,1
- jz biblequotearly
- mov cx,560
- call hangone
- cmp lasthardkey,1
- jz biblequotearly
- call fadescreendowns
- mov cx,200 ;128
- call hangone
- cmp lasthardkey,1
- jz biblequotearly
- call cancelch0
-biblequotearly:
+ cmp ch1playing,255
+ jnz notloadspeech2
+ pop ax
+ inc al
+ cmp al,48
+ jnz loadspeech2
+
+ mov volumedirection,1
+ mov volumeto,7
+ call fadescreendowns
+ mov cx,300
+ call hangon
+ call getridoftemp
+ ret
+
+ endp
+
+ else
+
+Monkspeaking proc near
+
+ mov roomssample,35
+ call loadroomssample
+ mov dx,offset cs:monkface
+ call loadintotemp
+ call clearwork ;createpanel2
+ call showmonk
+ call worktoscreen
+ mov volume,7
+ mov volumedirection,-1
+ mov volumeto,0
+ mov al,12
+ mov ah,255
+ call playchannel0
+ call fadescreenups
+ mov cx,300
+ call hangon
+
+ mov al,40
+nextmonkspeak: push ax
+ mov ah,0
+ mov si,ax
+ add si,si
+ mov es,textfile1
+ mov ax,[es:si]
+ add ax,textstart
+ mov si,ax
+nextbit: mov di,36
+ mov bx,140
+ mov dl,239
+ call printdirect
+ push ax si es
+ call worktoscreen
+ call clearwork
+ call showmonk
+ mov cx,240
+ call hangon
+ pop es si ax
+ cmp al,0
+ jnz nextbit
+ pop ax
+ inc al
+ cmp al,44
+ jnz nextmonkspeak
+
+ mov volumedirection,1
+ mov volumeto,7
+ call fadescreendowns
+ mov cx,300
+ call hangon
+ call getridoftemp
+ ret
+
+ endp
+
+ endif
+
+
+
+
+Showmonk proc near
+
+ mov al,0
+ mov ah,128
+ mov di,160
+ mov bx,72
+ mov ds,tempgraphics
+ call showframe
+ ret
+
+ endp
+
+
+Gettingshot proc near
+
+ mov newlocation,55
+ call clearpalette
+ call loadintroroom
+ call fadescreenups
+ mov volumeto,0
+ mov volumedirection,-1
+ call runendseq
+ call clearbeforeload
+ ret
+
+ endp
+
+
+
+
+
+
+Credits proc near
+
+ call clearpalette
+ call realcredits
+ ret
+
+ endp
+
+
+
+Biblequote proc near
+
+ call mode640x480
+ mov dx,offset cs:title0graphics
+ call showpcx
+ call fadescreenups
+ mov cx,80
+ call hangone
+ cmp lasthardkey,1
+ jz biblequotearly
+ mov cx,560
+ call hangone
+ cmp lasthardkey,1
+ jz biblequotearly
+ call fadescreendowns
+ mov cx,200 ;128
+ call hangone
+ cmp lasthardkey,1
+ jz biblequotearly
+ call cancelch0
+biblequotearly:
mov lasthardkey,0
- ret
-
- endp
-
-
-
-
-Hangone proc near
-
-hangonloope: push cx
- call vsync
- pop cx
- cmp lasthardkey,1
- jz hangonearly
- loop hangonloope
-hangonearly:
- ret
-
- endp
-
-
-
-
-
-
-Intro proc near
-
- mov dx,offset cs:introtextname
- call loadtemptext
-
- call loadpalfromiff
- call setmode
-
- mov newlocation,50
- call clearpalette
- call loadintroroom
- mov volume,7
- mov volumedirection,-1
- if cd
- mov volumeto,4
- else
- mov volumeto,0
- endif
- mov al,12 ;4
- mov ah,255
- call playchannel0
- call fadescreenups
- call runintroseq
- cmp lasthardkey,1
- jz introearly
-
-;waitsound: cmp ch1blockstoplay,0
-; jnz waitsound
- call clearbeforeload
-
- mov newlocation,52
- call loadintroroom
- call runintroseq
- cmp lasthardkey,1
- jz introearly
- call clearbeforeload
-
- mov newlocation,53
- call loadintroroom
- call runintroseq
- cmp lasthardkey,1
- jz introearly
- call clearbeforeload
-
- call allpalette
- mov newlocation,54
- call loadintroroom
- ;mov al,12
- ;mov ah,255
- ;call playchannel0
- call runintroseq
- cmp lasthardkey,1
- jz introearly
-
- call getridoftemptext
- call clearbeforeload
-introearly:
+ ret
+
+ endp
+
+
+
+
+Hangone proc near
+
+hangonloope: push cx
+ call vsync
+ pop cx
+ cmp lasthardkey,1
+ jz hangonearly
+ loop hangonloope
+hangonearly:
+ ret
+
+ endp
+
+
+
+
+
+
+Intro proc near
+
+ mov dx,offset cs:introtextname
+ call loadtemptext
+
+ call loadpalfromiff
+ call setmode
+
+ mov newlocation,50
+ call clearpalette
+ call loadintroroom
+ mov volume,7
+ mov volumedirection,-1
+ if cd
+ mov volumeto,4
+ else
+ mov volumeto,0
+ endif
+ mov al,12 ;4
+ mov ah,255
+ call playchannel0
+ call fadescreenups
+ call runintroseq
+ cmp lasthardkey,1
+ jz introearly
+
+;waitsound: cmp ch1blockstoplay,0
+; jnz waitsound
+ call clearbeforeload
+
+ mov newlocation,52
+ call loadintroroom
+ call runintroseq
+ cmp lasthardkey,1
+ jz introearly
+ call clearbeforeload
+
+ mov newlocation,53
+ call loadintroroom
+ call runintroseq
+ cmp lasthardkey,1
+ jz introearly
+ call clearbeforeload
+
+ call allpalette
+ mov newlocation,54
+ call loadintroroom
+ ;mov al,12
+ ;mov ah,255
+ ;call playchannel0
+ call runintroseq
+ cmp lasthardkey,1
+ jz introearly
+
+ call getridoftemptext
+ call clearbeforeload
+introearly:
mov lasthardkey, 0
- ret
-
- endp
-
-
-
-
-
-
-
-
-Runintroseq proc near
-
- mov getback,0
-
-moreintroseq: call vsync
- cmp lasthardkey,1
- jz earlyendrun
- call spriteupdate
- call vsync
- cmp lasthardkey,1
- jz earlyendrun
- call deleverything
- call printsprites
- call reelsonscreen
- call afterintroroom
- call usetimedtext
- call vsync
- cmp lasthardkey,1
- jz earlyendrun
- call dumpmap
- call dumptimedtext
- call vsync
- cmp lasthardkey,1
- jz earlyendrun
- cmp getback,1
- jnz moreintroseq
- ret
-earlyendrun:
- call getridoftemptext
- call clearbeforeload
- ret
-
- endp
-
-
-
-
-
-Runendseq proc near
-
- call atmospheres
- mov getback,0
-moreendseq: call vsync
- call spriteupdate
- call vsync
- call deleverything
- call printsprites
- call reelsonscreen
- call afterintroroom
- call usetimedtext
- call vsync
- call dumpmap
- call dumptimedtext
- call vsync
- cmp getback,1
- jnz moreendseq
- ret
-
- endp
-
-
-
-
-Loadintroroom proc near
-
- mov introcount,0
- mov location,255
- call loadroom
- mov mapoffsetx,72
- mov mapoffsety,16
- call clearsprites
- mov throughdoor,0
- mov currentkey,"0"
- mov mainmode,0
- call clearwork
- mov newobs,1
- call drawfloor
- call reelsonscreen
- call spriteupdate
- call printsprites
- call worktoscreen
- ret
-
- endp
-
-
-
-
-
-
-Mode640x480 proc near
-
- mov al,12h+128
- mov ah,0
- int 10h
- ;call clearpalette
- ret
-
- endp
-
-
-
-Set16colpalette proc near
-
- mov cx,16
- mov bl,0
- mov bh,0
- mov al,0
- mov ah,10h
-set16palloop2: push ax bx cx
- int 10h
- pop cx bx ax
- inc bl
- inc bh
- loop set16palloop2
-
- mov bl,31h
- mov al,1
- mov ah,12h
- int 10h
- ret
-
- endp
-
-
-
-
-
-RealCredits proc near
-
- mov roomssample,33
- call loadroomssample
- mov volume,0
-
- call mode640x480
- mov cx,35
- call hangon
-
- mov dx,offset cs:title1graphics
- call showpcx
- mov al,12
- mov ah,0
- call playchannel0
- mov cx,2
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
- call allpalette
- mov cx,80
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
- call fadescreendowns
- mov cx,256
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
-
- mov dx,offset cs:title2graphics
- call showpcx
- mov al,12
- mov ah,0
- call playchannel0
- mov cx,2
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
- call allpalette
- mov cx,80
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
- call fadescreendowns
- mov cx,256
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
-
- if demo
- else
- mov dx,offset cs:title3graphics
- call showpcx
- mov al,12
- mov ah,0
- call playchannel0
- mov cx,2
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
- call allpalette
- mov cx,80
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
- call fadescreendowns
- mov cx,256
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
-
- mov dx,offset cs:title4graphics
- call showpcx
- mov al,12
- mov ah,0
- call playchannel0
- mov cx,2
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
- call allpalette
- mov cx,80
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
- call fadescreendowns
- mov cx,256
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
-
- mov dx,offset cs:title5graphics
- call showpcx
- mov al,12
- mov ah,0
- call playchannel0
- mov cx,2
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
- call allpalette
- mov cx,80
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
- call fadescreendowns
- mov cx,256
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
- endif
-
- mov dx,offset cs:title6graphics
- call showpcx
- call fadescreenups
- mov cx,60
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
- mov al,13
- mov ah,0
- call playchannel0
- mov cx,350
- call hangone
- cmp lasthardkey,1
- jz realcreditsearly
- call fadescreendowns
- mov cx,256
- call hangone
-realcreditsearly:
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Runintroseq proc near
+
+ mov getback,0
+
+moreintroseq: call vsync
+ cmp lasthardkey,1
+ jz earlyendrun
+ call spriteupdate
+ call vsync
+ cmp lasthardkey,1
+ jz earlyendrun
+ call deleverything
+ call printsprites
+ call reelsonscreen
+ call afterintroroom
+ call usetimedtext
+ call vsync
+ cmp lasthardkey,1
+ jz earlyendrun
+ call dumpmap
+ call dumptimedtext
+ call vsync
+ cmp lasthardkey,1
+ jz earlyendrun
+ cmp getback,1
+ jnz moreintroseq
+ ret
+earlyendrun:
+ call getridoftemptext
+ call clearbeforeload
+ ret
+
+ endp
+
+
+
+
+
+Runendseq proc near
+
+ call atmospheres
+ mov getback,0
+moreendseq: call vsync
+ call spriteupdate
+ call vsync
+ call deleverything
+ call printsprites
+ call reelsonscreen
+ call afterintroroom
+ call usetimedtext
+ call vsync
+ call dumpmap
+ call dumptimedtext
+ call vsync
+ cmp getback,1
+ jnz moreendseq
+ ret
+
+ endp
+
+
+
+
+Loadintroroom proc near
+
+ mov introcount,0
+ mov location,255
+ call loadroom
+ mov mapoffsetx,72
+ mov mapoffsety,16
+ call clearsprites
+ mov throughdoor,0
+ mov currentkey,"0"
+ mov mainmode,0
+ call clearwork
+ mov newobs,1
+ call drawfloor
+ call reelsonscreen
+ call spriteupdate
+ call printsprites
+ call worktoscreen
+ ret
+
+ endp
+
+
+
+
+
+
+Mode640x480 proc near
+
+ mov al,12h+128
+ mov ah,0
+ int 10h
+ ;call clearpalette
+ ret
+
+ endp
+
+
+
+Set16colpalette proc near
+
+ mov cx,16
+ mov bl,0
+ mov bh,0
+ mov al,0
+ mov ah,10h
+set16palloop2: push ax bx cx
+ int 10h
+ pop cx bx ax
+ inc bl
+ inc bh
+ loop set16palloop2
+
+ mov bl,31h
+ mov al,1
+ mov ah,12h
+ int 10h
+ ret
+
+ endp
+
+
+
+
+
+RealCredits proc near
+
+ mov roomssample,33
+ call loadroomssample
+ mov volume,0
+
+ call mode640x480
+ mov cx,35
+ call hangon
+
+ mov dx,offset cs:title1graphics
+ call showpcx
+ mov al,12
+ mov ah,0
+ call playchannel0
+ mov cx,2
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+ call allpalette
+ mov cx,80
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+ call fadescreendowns
+ mov cx,256
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+
+ mov dx,offset cs:title2graphics
+ call showpcx
+ mov al,12
+ mov ah,0
+ call playchannel0
+ mov cx,2
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+ call allpalette
+ mov cx,80
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+ call fadescreendowns
+ mov cx,256
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+
+ if demo
+ else
+ mov dx,offset cs:title3graphics
+ call showpcx
+ mov al,12
+ mov ah,0
+ call playchannel0
+ mov cx,2
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+ call allpalette
+ mov cx,80
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+ call fadescreendowns
+ mov cx,256
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+
+ mov dx,offset cs:title4graphics
+ call showpcx
+ mov al,12
+ mov ah,0
+ call playchannel0
+ mov cx,2
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+ call allpalette
+ mov cx,80
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+ call fadescreendowns
+ mov cx,256
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+
+ mov dx,offset cs:title5graphics
+ call showpcx
+ mov al,12
+ mov ah,0
+ call playchannel0
+ mov cx,2
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+ call allpalette
+ mov cx,80
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+ call fadescreendowns
+ mov cx,256
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+ endif
+
+ mov dx,offset cs:title6graphics
+ call showpcx
+ call fadescreenups
+ mov cx,60
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+ mov al,13
+ mov ah,0
+ call playchannel0
+ mov cx,350
+ call hangone
+ cmp lasthardkey,1
+ jz realcreditsearly
+ call fadescreendowns
+ mov cx,256
+ call hangone
+realcreditsearly:
mov lasthardkey, 0
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/use.asm b/devtools/tasmrecover/dreamweb/use.asm
index 4b82f946f0..250aa00240 100644
--- a/devtools/tasmrecover/dreamweb/use.asm
+++ b/devtools/tasmrecover/dreamweb/use.asm
@@ -1,3810 +1,3810 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-
-Useobject proc near
-
- mov withobject,255
-
- cmp commandtype,229
- jz alreadyuse
- mov commandtype,229
-
- mov bl,command
- mov bh,objecttype
- mov al,51
- call commandwithob
-alreadyuse: mov ax,mousebutton
- cmp ax,oldbutton
- jz nouse
- and ax,1
- jnz douse
-nouse: ret
-
-douse: call useroutine
- ret
-
- endp
-
-
-
-
-
-
-
-Useroutine proc near
-
- cmp reallocation,50
- jc nodream7
- cmp pointerpower,0
- jnz powerok
- ret
-powerok: mov pointerpower,0
-
-nodream7: call getanyad
- mov dx,seg uselist
- mov ds,dx
- mov si,offset uselist
-checkuselist: push si
- lodsb
- sub al,"A"
- cmp al,[es:bx+12]
- jnz failed
- lodsb
- sub al,"A"
- cmp al,[es:bx+13]
- jnz failed
- lodsb
- sub al,"A"
- cmp al,[es:bx+14]
- jnz failed
- lodsb
- sub al,"A"
- cmp al,[es:bx+15]
- jnz failed
- lodsw
- pop si
- call ax
- ret
-failed: pop si
- add si,6
- cmp byte ptr [si],140
- jnz checkuselist
-
- call delpointer
- call getobtextstart
- call findnextcolon
- cmp al,0
- jz cantuse2
- call findnextcolon
- cmp al,0
- jz cantuse2
- mov al,[es:si]
- cmp al,0
- jz cantuse2
- call usetext
- mov cx,400
- call hangonp
- call putbackobstuff
- ret
-cantuse2: call createpanel
- call showpanel
- call showman
- call showexit
- call obicons
- mov di,33
- mov bx,100
- mov al,63
- mov dl,241
- call printmessage
- call worktoscreenm
- mov cx,50
- call hangonp
- call putbackobstuff
- mov commandtype,255
- ret
-
-Uselist: db "NETW"
- dw usemon
- db "ELVA"
- dw useelevator1
- db "ELVB"
- dw useelevator2
- db "ELVC"
- dw useelevator3
- db "ELVE"
- dw useelevator4
- db "ELVF"
- dw useelevator5
- db "CGAT"
- dw usechurchgate
- db "REMO"
- dw usestereo
- db "BUTA"
- dw usebuttona
- db "CBOX"
- dw usewinch
- db "LITE"
- dw uselighter
- db "PLAT"
- dw useplate
- db "LIFT"
- dw usecontrol
- db "WIRE"
- dw usewire
- db "HNDL"
- dw usehandle
- db "HACH"
- dw usehatch
- db "DOOR"
- dw useelvdoor
- db "CSHR"
- dw usecashcard
- db "GUNA"
- dw usegun
- db "CRAA"
- dw usecardreader1
- db "CRBB"
- dw usecardreader2
- db "CRCC"
- dw usecardreader3
- db "SEAT"
- dw sitdowninbar
- db "MENU"
- dw usemenu
- db "COOK"
- dw usecooker
- db "ELCA"
- dw callhotellift
- db "EDCA"
- dw calledenslift
- db "DDCA"
- dw calledensdlift
- db "ALTR"
- dw usealtar
- db "LOKA"
- dw openhoteldoor
- db "LOKB"
- dw openhoteldoor2
- db "ENTA"
- dw openlouis
- db "ENTB"
- dw openryan
- db "ENTE"
- dw openpoolboss
- db "ENTC"
- dw openyourneighbour
- db "ENTD"
- dw openeden
- db "ENTH"
- dw opensarters
- db "WWAT"
- dw wearwatch
- db "POOL"
- dw usepoolreader
- db "WSHD"
- dw wearshades
- db "GRAF"
- dw grafittidoor
- db "TRAP"
- dw trapdoor
- db "CDPE"
- dw edenscdplayer
-
- db "DLOK"
- dw opentvdoor
-
- db "HOLE"
- dw usehole
-
- db "DRYR"
- dw usedryer
-
- db "HOLY"
- dw usechurchhole
-
- db "WALL"
- dw usewall
- db "BOOK"
- dw usediary
-
- db "AXED"
- dw useaxe
- db "SHLD"
- dw useshield
-
- db "BCNY"
- dw userailing
- db "LIDC"
- dw usecoveredbox
- db "LIDU"
- dw useclearbox
- db "LIDO"
- dw useopenbox
- db "PIPE"
- dw usepipe
-
- db "BALC"
- dw usebalcony
- db "WIND"
- dw usewindow
- db "PAPR"
- dw viewfolder
-
- db "UWTA"
- dw usetrainer
- db "UWTB"
- dw usetrainer
-
- db "STAT"
- dw entersymbol
- db "TLID"
- dw opentomb
- db "SLAB"
- dw useslab
- db "CART"
- dw usecart
- db "FCAR"
- dw usefullcart
-
-
- db "SLBA"
- dw slabdoora
- db "SLBB"
- dw slabdoorb
- db "SLBC"
- dw slabdoorc
- db "SLBD"
- dw slabdoord
- db "SLBE"
- dw slabdoore
- db "SLBF"
- dw slabdoorf
- db "PLIN"
- dw useplinth
-
- db "LADD"
- dw useladder
- db "LADB"
- dw useladderb
-
- db "GUMA"
- dw chewy
-
- db "SQEE"
- dw wheelsound
- db "TAPP"
- dw runtap
- db "GUIT"
- dw playguitar
- db "CONT"
- dw hotelcontrol
-
- db "BELL"
- dw hotelbell
-
- db 140,140,140,140
-
- endp
-
-
-
-
-
-
-;-----------------------------------------------------------Puzzle routines----
-
-
-Wheelsound proc near
-
- mov al,17
- call playchannel1
- call showfirstuse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-Runtap proc near
-
- cmp withobject,255
- jnz tapwith
- call withwhat
- ret
-tapwith: mov al,withobject
- mov ah,withtype
- mov cl,"C"
- mov ch,"U"
- mov dl,"P"
- mov dh,"E"
- call compare
- jz fillcupfromtap
- mov al,withobject
- mov ah,withtype
- mov cl,"C"
- mov ch,"U"
- mov dl,"P"
- mov dh,"F"
- call compare
- jz cupfromtapfull
- mov cx,300
- mov al,56
- call showpuztext
- call putbackobstuff
- ret
-
-fillcupfromtap: mov al,withobject
- call getexad
- mov byte ptr [es:bx+15],"F"-"A"
- mov al,8
- call playchannel1
- mov cx,300
- mov al,57
- call showpuztext
- call putbackobstuff
- ret
-
-cupfromtapfull: mov cx,300
- mov al,58
- call showpuztext
- call putbackobstuff
- ret
-
-
- endp
-
-
-
-Playguitar proc near
-
- mov al,14
- call playchannel1
- call showfirstuse
- call putbackobstuff
- ret
-
- endp
-
-
-
-Hotelcontrol proc near
-
- cmp reallocation,21
- jnz notrightcont
- cmp mapx,33
- jnz notrightcont
- call showfirstuse
- call putbackobstuff
- ret
-notrightcont: call showseconduse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-Hotelbell proc near
-
- if demo
- mov al,24
- else
- mov al,12
- endif
- call playchannel1
- call showfirstuse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-Opentomb proc near
-
- inc progresspoints
- call showfirstuse
- mov watchingtime,35*2
- mov reeltowatch,1
- mov endwatchreel,33
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- ret
-
- endp
-
-
-
-Usetrainer proc near
-
- call getanyad
- cmp byte ptr [es:bx+2],4
- jnz notheldtrainer
- inc progresspoints
- call makeworn
- call showseconduse
- call putbackobstuff
- ret
-notheldtrainer: call nothelderror
- ret
-
- endp
-
-
-
-Nothelderror proc near
-
- call createpanel
- call showpanel
- call showman
- call showexit
- call obicons
- mov di,64
- mov bx,100
- mov al,63
- mov ah,1
- mov dl,201
- call printmessage2
- call worktoscreenm
- mov cx,50
- call hangonp
- call putbackobstuff
- ret
-
- endp
-
-
-
-Usepipe proc near
-
- cmp withobject,255
- jnz pipewith
- call withwhat
- ret
-pipewith: mov al,withobject
- mov ah,withtype
- mov cl,"C"
- mov ch,"U"
- mov dl,"P"
- mov dh,"E"
- call compare
- jz fillcup
- mov al,withobject
- mov ah,withtype
- mov cl,"C"
- mov ch,"U"
- mov dl,"P"
- mov dh,"F"
- call compare
- jz alreadyfull
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-
-fillcup: mov cx,300
- mov al,36
- call showpuztext
- call putbackobstuff
- mov al,withobject
- call getexad
- mov byte ptr [es:bx+15],"F"-"A"
- ret
-
-alreadyfull: mov cx,300
- mov al,35
- call showpuztext
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-
-Usefullcart proc near
-
- inc progresspoints
- mov al,2
- mov ah,roomnum
- add ah,6
- call turnanypathon
- mov manspath,4
- mov facing,4
- mov turntoface,4
- mov finaldest,4
- call findxyfrompath
- mov resetmanxy,1
- call showfirstuse
- mov watchingtime,72*2
- mov reeltowatch,58
- mov endwatchreel,142
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-
-
-Useplinth proc near
-
- cmp withobject,255
- jnz plinthwith
- call withwhat
- ret
-
-plinthwith: mov al,withobject
- mov ah,withtype
- mov cl,"D"
- mov ch,"K"
- mov dl,"E"
- mov dh,"Y"
- call compare
- jz isrightkey
- call showfirstuse
- call putbackobstuff
- ret
-
-isrightkey: inc progresspoints
- call showseconduse
- mov watchingtime,220
- mov reeltowatch,0
- mov endwatchreel,104
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- mov al,roomafterdream
- mov newlocation,al
- ret
-
- endp
-
-
-
-Chewy proc near
-
- call showfirstuse
- call getanyad
- mov byte ptr [es:bx+2],255
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-Useladder proc near
-
- call showfirstuse
- sub mapx,11
- call findroominloc
- mov facing,6
- mov turntoface,6
- mov manspath,0
- mov destination,0
- mov finaldest,0
- call findxyfrompath
- mov resetmanxy,1
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-Useladderb proc near
-
- call showfirstuse
- add mapx,11
- call findroominloc
- mov facing,2
- mov turntoface,2
- mov manspath,1
- mov destination,1
- mov finaldest,1
- call findxyfrompath
- mov resetmanxy,1
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-Slabdoora proc near
-
- call showfirstuse
- mov getback,1
- mov watchspeed,1
- mov speedcount,1
- mov reeltowatch,13
- cmp dreamnumber,3
- jnz slabawrong
- inc progresspoints
- mov watchingtime,60
- mov endwatchreel,42
- mov newlocation,47
- ret
-slabawrong: mov watchingtime,40
- mov endwatchreel,34
- mov watchspeed,1
- mov speedcount,1
- ret
-
- endp
-
-
-
-
-Slabdoorb proc near
-
- cmp dreamnumber,1
- jnz slabbwrong
- mov al,"S"
- mov ah,"H"
- mov cl,"L"
- mov ch,"D"
- call isryanholding
- jnz gotcrystal
- mov al,44
- mov cx,200
- call showpuztext
- call putbackobstuff
- ret
-gotcrystal: call showfirstuse
- inc progresspoints
- mov getback,1
- mov watchspeed,1
- mov speedcount,1
- mov reeltowatch,44
- mov watchingtime,60
- mov endwatchreel,71
- mov newlocation,47
- ret
-slabbwrong: call showfirstuse
- mov getback,1
- mov watchspeed,1
- mov speedcount,1
- mov reeltowatch,44
- mov watchingtime,40
- mov endwatchreel,63
- mov watchspeed,1
- mov speedcount,1
- ret
-
- endp
-
-
-
-Slabdoord proc near
-
- call showfirstuse
- mov getback,1
- mov watchspeed,1
- mov speedcount,1
- mov reeltowatch,75
- cmp dreamnumber,0
- jnz slabcwrong
- inc progresspoints
- mov watchingtime,60
- mov endwatchreel,102
- mov newlocation,47
- ret
-slabcwrong: mov watchingtime,40
- mov endwatchreel,94
- mov watchspeed,1
- mov speedcount,1
- ret
-
- endp
-
-
-
-Slabdoorc proc near
-
- call showfirstuse
- mov getback,1
- mov watchspeed,1
- mov speedcount,1
- mov reeltowatch,108
- cmp dreamnumber,4
- jnz slabdwrong
- inc progresspoints
- mov watchingtime,60
- mov endwatchreel,135
- mov newlocation,47
- ret
-slabdwrong: mov watchingtime,40
- mov endwatchreel,127
- mov watchspeed,1
- mov speedcount,1
- ret
-
- endp
-
-
-
-Slabdoore proc near
-
- call showfirstuse
- mov getback,1
- mov watchspeed,1
- mov speedcount,1
- mov reeltowatch,141
- cmp dreamnumber,5
- jnz slabewrong
- inc progresspoints
- mov watchingtime,60
- mov endwatchreel,168
- mov newlocation,47
- ret
-slabewrong: mov watchingtime,40
- mov endwatchreel,160
- mov watchspeed,1
- mov speedcount,1
- ret
-
- endp
-
-
-
-Slabdoorf proc near
-
- call showfirstuse
- mov getback,1
- mov watchspeed,1
- mov speedcount,1
- mov reeltowatch,171
- cmp dreamnumber,2
- jnz slabfwrong
- inc progresspoints
- mov watchingtime,60
- mov endwatchreel,197
- mov newlocation,47
- ret
-slabfwrong: mov watchingtime,40
- mov endwatchreel,189
- mov watchspeed,1
- mov speedcount,1
- ret
-
- endp
-
-
-
-
-
-
-Useslab proc near
-
- cmp withobject,255
- jnz slabwith
- call withwhat
- ret
-slabwith: mov al,withobject
- mov ah,withtype
- mov cl,"J"
- mov ch,"E"
- mov dl,"W"
- mov dh,"L"
- call compare
- jz nextslab
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-nextslab: mov al,withobject
- call getexad
- mov byte ptr [es:bx+2],0
- mov al,command
- push ax
- call removesetobject
- pop ax
- inc al
- push ax
- call placesetobject
- pop ax
- cmp al,54
- jnz notlastslab
- mov al,0
- call turnpathon
- mov watchingtime,22
- mov reeltowatch,35
- mov endwatchreel,48
- mov watchspeed,1
- mov speedcount,1
-notlastslab: inc progresspoints
- call showfirstuse
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-Usecart proc near
-
- cmp withobject,255
- jnz cartwith
- call withwhat
- ret
-cartwith: mov al,withobject
- mov ah,withtype
- mov cl,"R"
- mov ch,"O"
- mov dl,"C"
- mov dh,"K"
- call compare
- jz nextcart
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-nextcart: mov al,withobject
- call getexad
- mov byte ptr [es:bx+2],0
- mov al,command
- push ax
- call removesetobject
- pop ax
- inc al
- call placesetobject
- inc progresspoints
- mov al,17
- call playchannel1
- call showfirstuse
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-
-
-
-Useclearbox proc near
-
- cmp withobject,255
- jnz clearboxwith
- call withwhat
- ret
-clearboxwith: mov al,withobject
- mov ah,withtype
- mov cl,"R"
- mov ch,"A"
- mov dl,"I"
- mov dh,"L"
- call compare
- jz openbox
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-
-openbox: inc progresspoints
- call showfirstuse
- mov watchingtime,80
- mov reeltowatch,67
- mov endwatchreel,105
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-Usecoveredbox proc near
-
- inc progresspoints
- call showfirstuse
- mov watchingtime,50
- mov reeltowatch,41
- mov endwatchreel,66
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- ret
-
- endp
-
-
-
-Userailing proc near
-
- call showfirstuse
- mov watchingtime,80
- mov reeltowatch,0
- mov endwatchreel,30
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- mov mandead,4
- ret
-
- endp
-
-
-
-
-
-Useopenbox proc near
-
- cmp withobject,255
- jnz openboxwith
- call withwhat
- ret
-openboxwith: mov al,withobject
- mov ah,withtype
- mov cl,"C"
- mov ch,"U"
- mov dl,"P"
- mov dh,"F"
- call compare
- jz destoryopenbox
- mov al,withobject
- mov ah,withtype
- mov cl,"C"
- mov ch,"U"
- mov dl,"P"
- mov dh,"E"
- call compare
- jz openboxwrong
- call showfirstuse
- ret
-
-destoryopenbox: inc progresspoints
- mov cx,300
- mov al,37
- call showpuztext
- mov al,withobject
- call getexad
- mov byte ptr [es:bx+15],"E"-"A"
- mov watchingtime,140
- mov reeltowatch,105
- mov endwatchreel,181
- mov watchspeed,1
- mov speedcount,1
- mov al,4
- call turnpathon
- mov getback,1
- ret
-
-openboxwrong: mov cx,300
- mov al,38
- call showpuztext
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Wearwatch proc near
-
- cmp watchon,1
- jz wearingwatch
- call showfirstuse
- mov watchon,1
- mov getback,1
- call getanyad
- call makeworn
- ret
-wearingwatch: call showseconduse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-Wearshades proc near
-
- cmp shadeson,1
- jz wearingshades
- mov shadeson,1
- call showfirstuse
- mov getback,1
- call getanyad
- call makeworn
- ret
-wearingshades: call showseconduse
- call putbackobstuff
- ret
-
- endp
-
-
-
-Sitdowninbar proc near
-
- cmp watchmode,-1
- jnz satdown
- call showfirstuse
- mov watchingtime,50
- mov reeltowatch,55
- mov endwatchreel,71
- mov reeltohold,73
- mov endofholdreel,83
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- ret
-satdown: call showseconduse
- call putbackobstuff
- ret
-
- endp
-
-
-
-Usechurchhole proc near
-
- call showfirstuse
- mov getback,1
- mov watchingtime,28
- mov reeltowatch,13
- mov endwatchreel,26
- mov watchspeed,1
- mov speedcount,1
- ret
-
- endp
-
-
-
-Usehole proc near
-
- cmp withobject,255
- jnz holewith
- call withwhat
- ret
-holewith: mov al,withobject
- mov ah,withtype
- mov cl,"H"
- mov ch,"N"
- mov dl,"D"
- mov dh,"A"
- call compare
- jz righthand
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-
-righthand: call showfirstuse
- mov al,86
- call removesetobject
- mov al,withobject
- call getexad
- mov byte ptr [es:bx+2],255
- mov canmovealtar,1
- mov getback,1
- ret
-
- endp
-
-
-
-
-Usealtar proc near
-
- mov al,"C"
- mov ah,"N"
- mov cl,"D"
- mov ch,"A"
- call findexobject
- cmp al,numexobjects
- jz thingsonaltar
- mov al,"C"
- mov ah,"N"
- mov cl,"D"
- mov ch,"B"
- call findexobject
- cmp al,numexobjects
- jz thingsonaltar
- cmp canmovealtar,1
- jz movealtar
- mov cx,300
- mov al,23
- call showpuztext
- mov getback,1
- ret
-
-movealtar: inc progresspoints
- call showseconduse
- mov watchingtime,160
- mov reeltowatch,81
- mov endwatchreel,174
- mov watchspeed,1
- mov speedcount,1
-
- mov al,47 ;message number
- mov bl,52 ;x pos of message
- mov bh,76 ;and y pos
- mov cx,32 ;time on screen
- mov dx,98 ;pause before show
- call setuptimeduse
- mov getback,1
- ret
-
-thingsonaltar: call showfirstuse
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Opentvdoor proc near
-
- cmp withobject,255
- jnz tvdoorwith
- call withwhat
- ret
-tvdoorwith: mov al,withobject
- mov ah,withtype
- mov cl,"U"
- mov ch,"L"
- mov dl,"O"
- mov dh,"K"
- call compare
- jz keyontv
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-
-keyontv: call showfirstuse
- mov lockstatus,0
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-
-
-Usedryer proc near
-
- mov al,12
- call playchannel1
- call showfirstuse
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-Openlouis proc near
-
- mov al,5
- mov ah,2
- mov cl,3
- mov ch,8
- call entercode
- mov getback,1
- ret
-
- endp
-
-
-
-
-Nextcolon proc near
-
-lookcolon: mov al,[es:si]
- inc si
- cmp al,":"
- jnz lookcolon
- ret
-
- endp
-
-
-
-
-Openyourneighbour proc near
-
- mov al,255
- mov ah,255
- mov cl,255
- mov ch,255
- call entercode
- mov getback,1
- ret
-
- endp
-
-
-
-Usewindow proc near
-
- cmp manspath,6
- jnz notonbalc
- inc progresspoints
- call showfirstuse
- mov newlocation,29
- mov getback,1
- ret
-notonbalc: call showseconduse
- call putbackobstuff
- ret
-
- endp
-
-
-
-Usebalcony proc near
-
- call showfirstuse
- mov al,6
- call turnpathon
- mov al,0
- call turnpathoff
- mov al,1
- call turnpathoff
- mov al,2
- call turnpathoff
- mov al,3
- call turnpathoff
- mov al,4
- call turnpathoff
- mov al,5
- call turnpathoff
- inc progresspoints
- mov manspath,6
- mov destination,6
- mov finaldest,6
- call findxyfrompath
- call switchryanoff
- mov resetmanxy,1
-
- mov watchingtime,30*2
- mov reeltowatch,183
- mov endwatchreel,212
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- ret
-
- endp
-
-
-
-Openryan proc near
-
- mov al,5
- mov ah,1
- mov cl,0
- mov ch,6
- call entercode
- mov getback,1
- ret
-
- endp
-
-
-
-Openpoolboss proc near
-
- mov al,5
- mov ah,2
- mov cl,2
- mov ch,2
- call entercode
- mov getback,1
- ret
-
- endp
-
-
-
-
-Openeden proc near
-
- mov al,2
- mov ah,8
- mov cl,6
- mov ch,5
- call entercode
- mov getback,1
- ret
-
- endp
-
-
-Opensarters proc near
-
- mov al,7
- mov ah,8
- mov cl,3
- mov ch,3
- call entercode
- mov getback,1
- ret
-
- endp
-
-
-
-
-Isitright proc near
-
- mov bx,seg presslist
- mov es,bx
- mov bx,offset es:presslist
- cmp [es:bx+0],al
- jnz notright
- cmp [es:bx+1],ah
- jnz notright
- cmp [es:bx+2],cl
- jnz notright
- cmp [es:bx+3],ch
-notright: ret
-
- endp
-
-
-
-
-Drawitall proc near
-
- call createpanel
- call drawfloor
- ;call dumpallmap
- call printsprites
- call showicon
- ret
-
- endp
-
-
-
-
-Openhoteldoor proc near
-
- cmp withobject,255
- jnz hoteldoorwith
- call withwhat
- ret
-hoteldoorwith: mov al,withobject
- mov ah,withtype
- mov cl,"K"
- mov ch,"E"
- mov dl,"Y"
- mov dh,"A"
- call compare
- jz keyonhotel1
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-
-keyonhotel1: if demo
- mov al,27
- else
- mov al,16
- endif
- call playchannel1
- call showfirstuse
- ;mov destination,1
- ;mov finaldest,1
- ;call autosetwalk
- mov lockstatus,0
- mov getback,1
- ret
-
- endp
-
-
-
-Openhoteldoor2 proc near
-
- cmp withobject,255
- jnz hoteldoorwith2
- call withwhat
- ret
-hoteldoorwith2: mov al,withobject
- mov ah,withtype
- mov cl,"K"
- mov ch,"E"
- mov dl,"Y"
- mov dh,"A"
- call compare
- jz keyonhotel2
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-
-keyonhotel2: if demo
- mov al,27
- else
- mov al,16
- endif
- call playchannel1
- call showfirstuse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-
-Grafittidoor proc near
-
- cmp withobject,255
- jnz grafwith
- call withwhat
- ret
-grafwith: mov al,withobject
- mov ah,withtype
- mov cl,"A"
- mov ch,"P"
- mov dl,"E"
- mov dh,"N"
- call compare
- jz dograf
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-
-dograf: call showfirstuse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-Trapdoor proc near
-
- inc progresspoints
- call showfirstuse
- call switchryanoff
- mov watchingtime,20*2
- mov reeltowatch,181
- mov endwatchreel,197
- mov newlocation,26
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- ret
-
- endp
-
-
-
-
-Callhotellift proc near
-
- if demo
- mov al,24
- else
- mov al,12
- endif
- call playchannel1
- call showfirstuse
- mov counttoopen,8
- mov getback,1
- mov destination,5
- mov finaldest,5
- call autosetwalk
- mov al,4
- call turnpathon
- ret
-
- endp
-
-
-
-
-Calledenslift proc near
-
- call showfirstuse
- mov counttoopen,8
- mov getback,1
- mov al,2
- call turnpathon
- ret
-
- endp
-
-
-
-Calledensdlift proc near
-
- cmp liftflag,1
- jz edensdhere
- call showfirstuse
- mov counttoopen,8
- mov getback,1
- mov al,2
- call turnpathon
- ret
-edensdhere: call showseconduse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-
-Usepoolreader proc near
-
- cmp withobject,255
- jnz poolwith
- call withwhat
- ret
-poolwith: mov al,withobject
- mov ah,withtype
- mov cl,"M"
- mov ch,"E"
- mov dl,"M"
- mov dh,"B"
- call compare
- jz openpool
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-
-openpool: cmp talkedtoattendant,1
- jz canopenpool
- call showseconduse
- call putbackobstuff
- ret
-
-canopenpool: mov al,17
- call playchannel1
- call showfirstuse
- mov counttoopen,6
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-Uselighter proc near
-
- cmp withobject,255
- jnz gotlighterwith
- call withwhat
- ret
-gotlighterwith: mov al,withobject
- mov ah,withtype
- mov cl,"S"
- mov ch,"M"
- mov dl,"K"
- mov dh,"E"
- call compare
- jz cigarette
- call showfirstuse
- call putbackobstuff
- ret
-cigarette: mov cx,300
- mov al,9
- call showpuztext
- mov al,withobject
- call getexad
- mov byte ptr [es:bx+2],255
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-Showseconduse proc near
-
- call getobtextstart
- call nextcolon
- call nextcolon
- call nextcolon
- call usetext
- mov cx,400
- call hangonp
- ret
-
- endp
-
-
-
-
-
-
-Usecardreader1 proc near
-
- cmp withobject,255
- jnz gotreader1with
- call withwhat
- ret
-gotreader1with: mov al,withobject
- mov ah,withtype
- mov cl,"C"
- mov ch,"S"
- mov dl,"H"
- mov dh,"R"
- call compare
- jz correctcard
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-correctcard: cmp talkedtosparky,0
- jz notyet
- cmp card1money,0
- jz getscash
- mov cx,300
- mov al,17
- call showpuztext
- call putbackobstuff
- ret
-getscash: mov al,16
- call playchannel1
- mov cx,300
- mov al,18
- call showpuztext
- inc progresspoints
- mov card1money,12432
- mov getback,1
- ret
-notyet: call showfirstuse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-Usecardreader2 proc near
-
- cmp withobject,255
- jnz gotreader2with
- call withwhat
- ret
-gotreader2with: mov al,withobject
- mov ah,withtype
- mov cl,"C"
- mov ch,"S"
- mov dl,"H"
- mov dh,"R"
- call compare
- jz correctcard2
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-
-correctcard2: cmp talkedtoboss,0
- jz notyetboss
- cmp card1money,0
- jz nocash
- cmp gunpassflag,2
- jz alreadygotnew
- mov al,18
- call playchannel1
- mov cx,300
- mov al,19
- call showpuztext
- mov al,94
- call placesetobject
- mov gunpassflag,1
- sub card1money,2000
- inc progresspoints
- mov getback,1
- ret
-nocash: mov cx,300
- mov al,20
- call showpuztext
- call putbackobstuff
- ret
-alreadygotnew: mov cx,300
- mov al,22
- call showpuztext
- call putbackobstuff
- ret
-notyetboss: call showfirstuse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-
-
-Usecardreader3 proc near
-
- cmp withobject,255
- jnz gotreader3with
- call withwhat
- ret
-gotreader3with: mov al,withobject
- mov ah,withtype
- mov cl,"C"
- mov ch,"S"
- mov dl,"H"
- mov dh,"R"
- call compare
- jz rightcard
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-
-rightcard: cmp talkedtorecep,0
- jz notyetrecep
- cmp cardpassflag,0
- jnz alreadyusedit
- if demo
- mov al,27
- else
- mov al,16
- endif
- call playchannel1
- mov cx,300
- mov al,25
- call showpuztext
- inc progresspoints
- sub card1money,8300
- mov cardpassflag,1
- mov getback,1
- ret
-alreadyusedit: mov cx,300
- mov al,26
- call showpuztext
- call putbackobstuff
- ret
-notyetrecep: call showfirstuse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-
-
-
-Usecashcard proc near
-
- call getridofreels
- call loadkeypad
- call createpanel
- call showpanel
- call showexit
- call showman
-
- mov di,114
- if foreign
- mov bx,120-3
- else
- mov bx,120
- endif
- mov ds,tempgraphics
- mov al,39
- mov ah,0
- call showframe
-
- mov ax,card1money
- call moneypoke
-
- call getobtextstart
- call nextcolon
- call nextcolon
-
- mov di,36
- mov bx,98
- mov dl,241
- mov al,0
- mov ah,0
- call printdirect
-
- mov di,160
- mov bx,155
- push cs
- pop es
- mov si,offset cs:money1poke
- mov charshift,91*2+75
- mov al,0
- mov ah,0
- mov dl,240
- call printdirect
- mov di,187
- mov bx,155
- push cs
- pop es
- mov si,offset cs:money2poke
- mov charshift,91*2+85
- mov al,0
- mov ah,0
- mov dl,240
- call printdirect
- mov charshift,0
- call worktoscreenm
- mov cx,400
- call hangonp
- call getridoftemp
- call restorereels
- call putbackobstuff
- ret
-
-money1poke: db "0000",0
-money2poke: db "00",0
-
- endp
-
-
-
-
-Lookatcard proc near
-
- mov manisoffscreen,1
- call getridofreels
- call loadkeypad
-
- call createpanel2
- mov di,160
- mov bx,80
- mov ds,tempgraphics
- mov al,42
- mov ah,128
- call showframe
-
- call getobtextstart
- call findnextcolon
- call findnextcolon
- call findnextcolon
- mov di,36
- mov bx,124
- mov dl,241
- mov al,0
- mov ah,0
- call printdirect
-
- push es si
- call worktoscreenm
- mov cx,280
- call hangonw
- call createpanel2
- mov di,160
- mov bx,80
- mov ds,tempgraphics
- mov al,42
- mov ah,128
- call showframe
- pop si es
-
- mov di,36
- mov bx,130
- mov dl,241
- mov al,0
- mov ah,0
- call printdirect
- call worktoscreenm
-
- mov cx,200
- call hangonw
- mov manisoffscreen,0
- call getridoftemp
- call restorereels
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-Moneypoke proc near
-
- mov bx,offset cs:money1poke
- mov cl,48-1
-numberpoke0: inc cl
- sub ax,10000
- jnc numberpoke0
- add ax,10000
- mov [cs:bx],cl
- inc bx
-
- mov cl,48-1
-numberpoke1: inc cl
- sub ax,1000
- jnc numberpoke1
- add ax,1000
- mov [cs:bx],cl
- inc bx
-
- mov cl,48-1
-numberpoke2: inc cl
- sub ax,100
- jnc numberpoke2
- add ax,100
- mov [cs:bx],cl
- inc bx
-
- mov cl,48-1
-numberpoke3: inc cl
- sub ax,10
- jnc numberpoke3
- add ax,10
- mov [cs:bx],cl
-
- mov bx,offset cs:money2poke
- add al,48
- mov [cs:bx],al
- ret
-
- endp
-
-
-
-
-
-
-
-Usecontrol proc near
-
- cmp withobject,255
- jnz gotcontrolwith
- call withwhat
- ret
-gotcontrolwith: mov al,withobject
- mov ah,withtype
- mov cl,"K"
- mov ch,"E"
- mov dl,"Y"
- mov dh,"A"
- call compare
- jz rightkey
- cmp reallocation,21
- jnz balls
- mov al,withobject
- mov ah,withtype
- mov cl,"K"
- mov ch,"N"
- mov dl,"F"
- mov dh,"E"
- call compare
- jz jimmycontrols
- mov al,withobject
- mov ah,withtype
- mov cl,"A"
- mov ch,"X"
- mov dl,"E"
- mov dh,"D"
- call compare
- jz axeoncontrols
-
-balls: call showfirstuse
- call putbackobstuff
- ret
-
-rightkey: mov al,16
- call playchannel1
- cmp location,21
- jz goingdown
- mov cx,300
- mov al,0
- call showpuztext
- mov newlocation,21
- mov counttoclose,8
- mov counttoopen,0
- mov watchingtime,80
- mov getback,1
- ret
-
-goingdown: mov cx,300
- mov al,3
- call showpuztext
- mov newlocation,30
- mov counttoclose,8
- mov counttoopen,0
- mov watchingtime,80
- mov getback,1
- ret
-
-jimmycontrols: mov al,50
- call placesetobject
- mov al,51
- call placesetobject
- mov al,26
- call placesetobject
- mov al,30
- call placesetobject
- mov al,16
- call removesetobject
- mov al,17
- call removesetobject
- if demo
- mov al,26
- else
- mov al,14
- endif
- call playchannel1
- mov cx,300
- mov al,10
- call showpuztext
- inc progresspoints
- mov getback,1
- ret
-
-axeoncontrols: mov cx,300
- mov al,16
- call showpuztext
- inc progresspoints
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-
-Usehatch proc near
-
- call showfirstuse
- mov newlocation,40
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-Usewire proc near
-
- cmp withobject,255
- jnz gotwirewith
- call withwhat
- ret
-gotwirewith: mov al,withobject
- mov ah,withtype
- mov cl,"K"
- mov ch,"N"
- mov dl,"F"
- mov dh,"E"
- call compare
- jz wireknife
- mov al,withobject
- mov ah,withtype
- mov cl,"A"
- mov ch,"X"
- mov dl,"E"
- mov dh,"D"
- call compare
- jz wireaxe
-
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-
-wireaxe: mov cx,300
- mov al,16
- call showpuztext
- call putbackobstuff
- ret
-
-wireknife: mov al,51
- call removesetobject
- mov al,52
- call placesetobject
- mov cx,300
- mov al,11
- call showpuztext
- inc progresspoints
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-
-
-Usehandle proc near
-
- mov al,"C"
- mov ah,"U"
- mov cl,"T"
- mov ch,"W"
- call findsetobject
- mov al,[es:bx+58]
- cmp al,255
- jnz havecutwire
- mov cx,300
- mov al,12
- call showpuztext
- mov getback,1
- ret
-
-havecutwire: mov cx,300
- mov al,13
- call showpuztext
- mov newlocation,22
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-
-
-
-Useelevator1 proc near
-
- call showfirstuse
- call selectlocation
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-
-Showfirstuse proc near ;shows but does not delete the
- ;first bit of text after the
- call getobtextstart ;description
- call findnextcolon
- call findnextcolon
- call usetext
- mov cx,400
- call hangonp
- ret
-
- endp
-
-
-
-
-
-Useelevator3 proc near
-
- call showfirstuse
- mov counttoclose,20
- mov newlocation,34
- mov reeltowatch,46
- mov endwatchreel,63
- mov watchspeed,1
- mov speedcount,1
- mov watchingtime,80 ;40
- mov getback,1
- ret
-
- endp
-
-
-
-
-Useelevator4 proc near
-
- call showfirstuse
- mov reeltowatch,0
- mov endwatchreel,11
- mov watchspeed,1
- mov speedcount,1
- mov counttoclose,20
- mov watchingtime,80 ;40
- mov getback,1
- mov newlocation,24
- ret
-
- endp
-
-
-
-Useelevator2 proc near
-
- cmp location,23
- jz inpoolhall
- call showfirstuse
- mov newlocation,23
- mov counttoclose,20
- mov counttoopen,0
- mov watchingtime,80
- mov getback,1
- ret
-inpoolhall: call showfirstuse
- mov newlocation,31
- mov counttoclose,20
- mov counttoopen,0
- mov watchingtime,80
- mov getback,1
- ret
-
- endp
-
-
-
-
-Useelevator5 proc near
-
- mov al,4
- call placesetobject
- mov al,0
- call removesetobject
- mov newlocation,20
- mov watchingtime,80
- mov liftflag,1
- mov counttoclose,8
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-Usekey proc near
-
- cmp location,5
- jz usekey1
- cmp location,30
- jz usekey1
- cmp location,21
- jz usekey2
- mov cx,200
- mov al,1
- call showpuztext
- call putbackobstuff
- ret
-
-usekey1: cmp mapx,22
- jnz wrongroom1
- cmp mapy,10
- jnz wrongroom1
- mov cx,300
- mov al,0
- call showpuztext
- mov counttoclose,100
- mov getback,1
- ret
-
-usekey2: cmp mapx,11
- jnz wrongroom1
- cmp mapy,10
- jnz wrongroom1
- mov cx,300
- mov al,3
- call showpuztext
- mov newlocation,30
- mov al,2
- call fadescreendown
- call showfirstuse
- call putbackobstuff
- ret
-
-wrongroom1: mov cx,200
- mov al,2
- call showpuztext
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-
-
-Usestereo proc near
-
- cmp location,0
- jz stereook
- mov cx,400 ;Ryan isn't in his flat.
- mov al,4
- call showpuztext
- call putbackobstuff
- ret
-
-stereook: cmp mapx,11
- jnz stereonotok
- cmp mapy,0
- jz stereook2
-stereonotok: mov cx,400 ;Ryan isn't in his bedroom.
- mov al,5
- call showpuztext
- call putbackobstuff
- ret
-
-stereook2: mov al,"C"
- mov ah,"D"
- mov cl,"P"
- mov ch,"L"
- call findsetobject ;find object number of CD player
- mov ah,1 ;searching for inside a set ob
- call checkinside ;see if there is anything inside
- cmp cl,numexobjects
- jnz cdinside
- mov al,6 ;Need a CD inside
- mov cx,400
- call showpuztext
- call putbackobstuff
- call getanyad ;if the CD's been taken out,
- mov al,255 ;make sure the player isn't still
- mov [es:bx+10],al ;playing, ie:reset the puzzle
- ret ;flag for the remote.
-
-cdinside: call getanyad
- mov al,[es:bx+10]
- xor al,1
- mov [es:bx+10],al
- cmp al,255
- jz stereoon
- mov al,7 ;The stereo works
- mov cx,400
- call showpuztext
- call putbackobstuff
- ret
-
-stereoon: mov al,8 ;Stereo was already on,
- mov cx,400 ;so switch it off
- call showpuztext
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Usecooker proc near
-
- mov al,command
- mov ah,objecttype
- call checkinside ;see if there is anything inside
- cmp cl,numexobjects
- jnz foodinside
- call showfirstuse
- call putbackobstuff
- ret ;flag for the remote.
-
-foodinside: call showseconduse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-
-Useaxe proc near
-
- cmp reallocation,22
- jnz notinpool
- cmp mapy,10
- jz axeondoor
- call showseconduse
- inc progresspoints
- mov lastweapon,2
- mov getback,1
- call removeobfrominv
- ret
-
-notinpool: call showfirstuse
- ret
-
- endp
-
-
-
-
-
-
-
-
-Useelvdoor proc near
-
- cmp withobject,255
- jnz gotdoorwith
- call withwhat
- ret
-gotdoorwith: mov al,withobject
- mov ah,withtype
- mov cl,"A"
- mov ch,"X"
- mov dl,"E"
- mov dh,"D"
- call compare
- jz axeondoor
- mov al,14
- mov cx,300
- call showpuztext
- call putbackobstuff
- ret
-
-axeondoor: mov al,15
- mov cx,300
- call showpuztext
- inc progresspoints
-
- mov watchingtime,46*2
- mov reeltowatch,31
- mov endwatchreel,77
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- ret
-
- endp
-
-;------------------------------------------------------------------------------
-
-Withwhat proc near ;Gets player to identify object
- ;to use selected item with.
- call createpanel
- call showpanel
- call showman
- call showexit
- mov al,command
- mov ah,objecttype
- push cs
- pop es
- mov di,offset cs:commandline
- call copyname
-
- mov di,100
- mov bx,21
- mov dl,200
- mov al,63
- mov ah,2
- call printmessage2
-
- mov di,lastxpos
- add di,5
- mov bx,21
- push cs
- pop es
- mov si,offset cs:commandline
- mov dl,220
- mov al,0
- mov ah,0
- call printdirect
-
- mov di,lastxpos
- add di,5
- mov bx,21
- mov dl,200
- mov al,63
- mov ah,3
- call printmessage2
-
- call fillryan
- mov commandtype,255
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
- mov invopen,2
- ret
-
- endp
-
-
-
-
-
-Selectob proc near
-
- call findinvpos
- mov ax,[es:bx]
- cmp al,255
- jnz canselectob
- call blank
- ret
-
-canselectob: mov withobject,al
- mov withtype,ah
- cmp ax,oldsubject
- jnz diffsub3
- cmp commandtype,221
- jz alreadyselob
- mov commandtype,221
-
-diffsub3: mov oldsubject,ax
- mov bx,ax
- mov al,0
- call commandwithob
-alreadyselob: mov ax,mousebutton
- cmp ax,oldbutton
- jz notselob
- and ax,1
- jnz doselob
-notselob: ret
-
-doselob: call delpointer
- mov invopen,0
- call useroutine
- ret
-
- endp
-
-
-
-
-
-
-
-
-Compare proc near
-
- sub dl,"A"
- sub dh,"A"
- sub cl,"A"
- sub ch,"A"
- push cx dx
- call getanyaddir
- pop dx cx
- cmp [es:bx+12],cx
- jnz comparefin
- cmp [es:bx+14],dx
-comparefin: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Findsetobject proc near ;searches set object ID's
- ;for contents of ax,cx
- sub al,"A" ;returns number in al and data
- sub ah,"A" ;start point in es:bx
- sub cl,"A"
- sub ch,"A"
- mov es,setdat
- mov bx,0
- mov dl,0 ;dl counts object number
-findsetloop: cmp al,[es:bx+12]
- jnz nofind
- cmp ah,[es:bx+13]
- jnz nofind
- cmp cl,[es:bx+14]
- jnz nofind
- cmp ch,[es:bx+15]
- jnz nofind
- mov al,dl
- ret
-nofind: add bx,64
- inc dl
- cmp dl,128 ;number of objects to search
- jnz findsetloop
- mov al,dl
- ret
-
- endp
-
-
-
-
-
-
-Findexobject proc near ;searches ex object ID's
- ;for contents of ax,cx
- sub al,"A" ;returns number in al and data
- sub ah,"A" ;start point in es:bx
- sub cl,"A"
- sub ch,"A"
- mov es,extras
- mov bx,exdata
- mov dl,0 ;dl counts object number
-findexloop: cmp al,[es:bx+12]
- jnz nofindex
- cmp ah,[es:bx+13]
- jnz nofindex
- cmp cl,[es:bx+14]
- jnz nofindex
- cmp ch,[es:bx+15]
- jnz nofindex
- mov al,dl
- ret
-nofindex: add bx,16
- inc dl
- cmp dl,numexobjects ;number of objects to search
- jnz findexloop
- mov al,dl
- ret
-
- endp
-
-
-
-Isryanholding proc near
-
- sub al,"A" ;returns number in al and data
- sub ah,"A" ;start point in es:bx
- sub cl,"A"
- sub ch,"A"
- mov es,extras
- mov bx,exdata
- mov dl,0 ;dl counts object number
-searchinv: cmp byte ptr [es:bx+2],4
- jnz nofindininv
- cmp al,[es:bx+12]
- jnz nofindininv
- cmp ah,[es:bx+13]
- jnz nofindininv
- cmp cl,[es:bx+14]
- jnz nofindininv
- cmp ch,[es:bx+15]
- jnz nofindininv
- mov al,dl
- cmp al,numexobjects
- ret
-nofindininv: add bx,16
- inc dl
- cmp dl,numexobjects ;number of objects to search
- jnz searchinv
- mov al,dl
- cmp al,numexobjects ;if not zero he is holding
- ret ;if zero, he is not holding
-
- endp
-
-
-
-
-Checkinside proc near ;finds an extra object inside
- ;object number al, type ah
-
- mov es,extras
- mov bx,exdata
- mov cl,0
-insideloop: cmp al,[es:bx+3] ;OI! might need to check room number!!!
- jnz notfoundinside
- cmp ah,[es:bx+2]
- jnz notfoundinside
- ret
-notfoundinside: add bx,16
- inc cl
- cmp cl,numexobjects
- jnz insideloop
- ret ;ch returns the object number
- ;in the extras list
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-Usetext proc near
-
- push es si
- call createpanel
- call showpanel
- call showman
- call showexit
- call obicons
- pop si es
-
- mov di,36
- mov bx,104
- mov dl,241
- mov al,0
- mov ah,0
- call printdirect
-
- call worktoscreenm
- ret
-
- endp
-
-
-
-
-
-Putbackobstuff proc near
-
- call createpanel
- call showpanel
- call showman
- call obicons
- call showexit
- call obpicture
- call describeob
- call undertextline
- mov commandtype,255
- call readmouse
- call showpointer
- call worktoscreen
- call delpointer
- ret
-
- endp
-
-
-
-
-
-
-
-Showpuztext proc near
-
- push cx
- call findpuztext
- push es si
- call createpanel
- call showpanel
- call showman
- call showexit
- call obicons
- pop si es
- mov di,36
- mov bx,104
- mov dl,241
- mov ah,0
- call printdirect
- call worktoscreenm
- pop cx
- call hangonp
- ret
-
- endp
-
-
-
-Findpuztext proc near
-
- mov ah,0
- mov si,ax
- add si,si
- mov es,puzzletext
- mov ax,[es:si]
- add ax,textstart
- mov si,ax
- ret
-
- endp
-
-
-
-;-------------------------------------------------------------------------------
-
-Placesetobject proc near
-
- push es bx
- mov cl,0
- mov ch,0
- call findormake
- call getsetad
- mov byte ptr [es:bx+58],0
- pop bx es
- ret
-
- endp
-
-
-
-
-Removesetobject proc near
-
- push es bx
- mov cl,255
- mov ch,0
- call findormake
- call getsetad
- mov byte ptr [es:bx+58],255
- pop bx es
- ret
-
- endp
-
-
-
-
-Issetobonmap proc near
-
- push es bx
- call getsetad
- mov al,[es:bx+58]
- pop bx es
- cmp al,0
- ret
-
- endp
-
-
-
-
-
-
-Placefreeobject proc near
-
- push es bx
- mov cl,0
- mov ch,1
- call findormake
- call getfreead
- mov byte ptr [es:bx+2],0
- pop bx es
- ret
-
- endp
-
-
-
-
-
-Removefreeobject proc near
-
- push es bx
- ;mov cl,255
- ;mov ch,1
- ;call findormake
- call getfreead
- mov byte ptr [es:bx+2],255
- pop bx es
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Findormake proc near
-
- mov bx,listofchanges
- push ax
- mov es,buffers
- mov ah,reallocation
-changeloop: cmp byte ptr [es:bx],255
- jz haventfound
- cmp ax,[es:bx]
- jnz nofoundchange
- cmp ch,[es:bx+3]
- jz foundchange
-nofoundchange: add bx,4
- jmp changeloop
-foundchange: pop ax
- mov [es:bx+2],cl
- ret
-haventfound: mov [es:bx],ax
- mov [es:bx+2],cx
- pop ax
- ret
-
- endp
-
-
-
-
-
-
-
-
-Switchryanon proc near
-
- mov ryanon,255
- ret
-
- endp
-
-
-
-
-
-Switchryanoff proc near
-
- mov ryanon,1
- ret
-
- endp
-
-
-
-Setallchanges proc near
-
- mov es,buffers
- mov bx,listofchanges
-setallloop: mov ax,[es:bx]
- cmp al,255
- jz endsetloop
- mov cx,[es:bx+2]
- add bx,4
- cmp ah,reallocation
- jnz setallloop
- push es bx
- call dochange
- pop bx es
- jmp setallloop
-endsetloop: ret
-
- endp
-
-
-
-
-
-
-Dochange proc near
-
- cmp ch,0
- jz object
- cmp ch,1
- jz freeobject
-
-path: push cx
- mov ah,0
- add ax,ax
- add ax,ax
- add ax,ax
- push ax
- mov al,ch
- sub al,100
- mov ah,0
- mov cx,144
- mul cx
- pop bx
- add bx,ax
- add bx,pathdata
- mov es,reels
- pop cx
- mov byte ptr [es:bx+6],cl
-nopath: ret
-
-object: push cx
- call getsetad
- pop cx
- mov [es:bx+58],cl
- ret
-
-freeobject: push cx
- call getfreead
- pop cx
- cmp byte ptr [es:bx+2],255
- jnz beenpickedup
- mov [es:bx+2],cl
-beenpickedup: ret
-
- endp
-
-
-
-Autoappear proc near ;places objects that appear
- ;in rooms after certain
- cmp location,32 ;conditions are met.
- jnz notinalley
- mov al,5 ;switch off travel to
- call resetlocation ;hotel after kill
- mov al,10
- call setlocation
- mov destpos,10
- ret
-notinalley: cmp reallocation,24
- jnz notinedens
- cmp generaldead,1
- jnz edenspart2
- inc generaldead
- mov al,44
- call placesetobject
- mov al,18
- call placesetobject
- mov al,93
- call placesetobject
- mov al,92
- call removesetobject
- mov al,55
- call removesetobject
- mov al,75
- call removesetobject
- mov al,84
- call removesetobject
- mov al,85
- call removesetobject
- ret
-edenspart2: cmp sartaindead,1
- jnz notedens2
- mov al,44
- call removesetobject
- mov al,93
- call removesetobject
- mov al,55
- call placesetobject
- inc sartaindead
-notedens2: ret
-notinedens: cmp reallocation,25
- jnz notonsartroof
- mov newsitem,3
- mov al,6
- call resetlocation ;turn off Sartain Industries
- mov al,11
- call setlocation ;turn on carpark for later
- mov destpos,11
- ret
-notonsartroof: cmp reallocation,2
- jnz notinlouiss
- cmp rockstardead,0
- jz notinlouiss
- mov al,23
- call placesetobject
-notinlouiss: ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-;--------------------------------------------------------- Timed text stuff ----
-
-
-
-Getundertimed proc near
-
- mov al,timedy
- if foreign
- sub al,3
- endif
- mov ah,0
- mov bx,ax
- mov al,timedx
- mov ah,0
- mov di,ax
- mov ch,undertimedysize
- mov cl,240
- mov ds,buffers
- mov si,undertimedtext
- call multiget
- ret
-
- endp
-
-
-
-
-Putundertimed proc near
-
- mov al,timedy
- if foreign
- sub al,3
- endif
- mov ah,0
- mov bx,ax
- mov al,timedx
- mov ah,0
- mov di,ax
- mov ch,undertimedysize
- mov cl,240
- mov ds,buffers
- mov si,undertimedtext
- call multiput
- ret
-
- endp
-
-
-
-
-
-
-Dumptimedtext proc near
-
- cmp needtodumptimed,1
- jnz nodumptimed
- mov al,timedy
- if foreign
- sub al,3
- endif
- mov ah,0
- mov bx,ax
- mov al,timedx
- mov ah,0
- mov di,ax
- mov cl,240
- mov ch,undertimedysize
- call multidump
- mov needtodumptimed,0
-nodumptimed: ret
-
- endp
-
-
-
-
-
-
-
-
-Setuptimeduse proc near
-
- cmp timecount,0
- jnz cantsetup
-
- mov timedy,bh
- mov timedx,bl
- mov counttotimed,cx
- add dx,cx
- mov timecount,dx
- mov bl,al
- mov bh,0
- add bx,bx
- mov es,puzzletext
- mov cx,textstart
- mov ax,[es:bx]
- add ax,cx
- mov bx,ax
- mov timedseg,es
- mov timedoffset,bx
-cantsetup: ret
-
- endp
-
-
-
-Setuptimedtemp proc near
-
- if cd
- cmp ah,0
- jz notloadspeech3
- mov dl,"T"
- mov dh,ah
- mov cl,"T"
- mov ah,0
- call loadspeech
- cmp speechloaded,1
- jnz notloadspeech3
- mov al,50+12
- call playchannel1
- ret
-notloadspeech3:
- endif
- cmp timecount,0
- jnz cantsetup2
- mov timedy,bh
- mov timedx,bl
- mov counttotimed,cx
- add dx,cx
- mov timecount,dx
- mov bl,al
- mov bh,0
- add bx,bx
- mov es,textfile1
- mov cx,textstart
- mov ax,[es:bx]
- add ax,cx
- mov bx,ax
- mov timedseg,es
- mov timedoffset,bx
-cantsetup2: ret
-
- endp
-
-
-
-
-
-
-
-Usetimedtext proc near
-
- cmp timecount,0
- jz notext
- dec timecount
- cmp timecount,0
- jz deltimedtext
- mov ax,timecount
- cmp ax,counttotimed
- jz firsttimed
- jnc notext
- jmp notfirsttimed
-firsttimed: call getundertimed
-notfirsttimed: mov bl,timedy
- mov bh,0
- mov al,timedx
- mov ah,0
- mov di,ax
- mov es,timedseg
- mov si,timedoffset
- mov dl,237
- mov ah,0
- call printdirect
- mov needtodumptimed,1
-notext: ret
-
-deltimedtext: call putundertimed
- mov needtodumptimed,1
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-Edenscdplayer proc near
-
- call showfirstuse
- mov watchingtime,18*2
- mov reeltowatch,25
- mov endwatchreel,42
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- ret
-
- endp
-
-
-
-
-
-Usewall proc near
-
- call showfirstuse
- cmp manspath,3
- jz gobackover
- mov watchingtime,30*2
- mov reeltowatch,2
- mov endwatchreel,31
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- mov al,3
- call turnpathon
- mov al,4
- call turnpathon
- mov al,0
- call turnpathoff
- mov al,1
- call turnpathoff
- mov al,2
- call turnpathoff
- mov al,5
- call turnpathoff
- mov manspath,3
- mov finaldest,3
- call findxyfrompath
- mov resetmanxy,1
- call switchryanoff
- ret
-gobackover: mov watchingtime,30*2
- mov reeltowatch,34
- mov endwatchreel,60
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- mov al,3
- call turnpathoff
- mov al,4
- call turnpathoff
- mov al,0
- call turnpathon
- mov al,1
- call turnpathon
- mov al,2
- call turnpathon
- mov al,5
- call turnpathon
- mov manspath,5
- mov finaldest,5
- call findxyfrompath
- mov resetmanxy,1
- call switchryanoff
- ret
-
- endp
-
-
-
-
-
-
-
-Usechurchgate proc near
-
- cmp withobject,255
- jnz gatewith
- call withwhat
- ret
-gatewith: mov al,withobject
- mov ah,withtype
- mov cl,"C"
- mov ch,"U"
- mov dl,"T"
- mov dh,"T"
- call compare
- jz cutgate
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-
-cutgate: call showfirstuse
- mov watchingtime,64*2
- mov reeltowatch,4
- mov endwatchreel,70
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- inc progresspoints
- mov al,3
- call turnpathon
- cmp aidedead,0
- jz notopenchurch
- mov al,2
- call turnpathon
-notopenchurch: ret
-
- endp
-
-
-
-
-
-Usegun proc near
-
- cmp objecttype,4
- jz istakengun
- call showseconduse
- call putbackobstuff
- ret
-istakengun: cmp reallocation,22
- jnz notinpoolroom
- mov cx,300
- mov al,34
- call showpuztext
- mov lastweapon,1
- mov combatcount,39
- mov getback,1
- inc progresspoints
- ret
-notinpoolroom: cmp reallocation,25
- jnz nothelicopter
- mov cx,300
- mov al,34
- call showpuztext
- mov lastweapon,1
- mov combatcount,19
- mov getback,1
- mov dreamnumber,2
- mov roomafterdream,38
- mov sartaindead,1
- inc progresspoints
- ret
-nothelicopter: cmp reallocation,27
- jnz notinrockroom
- mov cx,300
- mov al,46
- call showpuztext
- mov pointermode,2 ;0
- mov rockstardead,1
- mov lastweapon,1
- mov newsitem,1
- mov getback,1
- mov roomafterdream,32 ; skip
- mov dreamnumber,0
- inc progresspoints
- ret
-notinrockroom: cmp reallocation,8
- jnz notbystudio
- cmp mapx,22
- jnz notbystudio
- cmp mapy,40
- jnz notbystudio
- mov al,92
- call issetobonmap
- jz notbystudio
- cmp manspath,9
- jz notbystudio
- mov destination,9
- mov finaldest,9
- call autosetwalk
- mov lastweapon,1
- mov getback,1
- inc progresspoints
- ret
-notbystudio: cmp reallocation,6
- jnz notsarters
- cmp mapx,11
- jnz notsarters
- cmp mapy,20
- jnz notsarters
- mov al,5
- call issetobonmap
- jnz notsarters
- mov destination,1
- mov finaldest,1
- call autosetwalk
- mov al,5
- call removesetobject
- mov al,6
- call placesetobject
- mov al,1
- mov ah,roomnum
- dec ah
- call turnanypathon
- mov liftflag,1
- mov watchingtime,40*2
- mov reeltowatch,4
- mov endwatchreel,43
- mov watchspeed,1
- mov speedcount,1
- mov getback,1
- inc progresspoints
- ret
-notsarters: cmp reallocation,29
- jnz notaide
- mov getback,1
- mov al,13
- call resetlocation
- mov al,12
- call setlocation
- mov destpos,12
- mov destination,2
- mov finaldest,2
- call autosetwalk
- mov watchingtime,164*2
- mov reeltowatch,3
- mov endwatchreel,164
- mov watchspeed,1
- mov speedcount,1
- mov aidedead,1
- mov dreamnumber,3
- mov roomafterdream,33
- inc progresspoints
- ret
-notaide: cmp reallocation,23
- jnz notwithboss
- cmp mapx,0
- jnz notwithboss
- cmp mapy,50
- jnz notwithboss
- cmp manspath,5
- jz pathokboss
- mov destination,5
- mov finaldest,5
- call autosetwalk
-pathokboss: mov lastweapon,1
- mov getback,1
- ret
-notwithboss: cmp reallocation,8
- jnz nottvsoldier
- cmp mapx,11
- jnz nottvsoldier
- cmp mapy,10
- jnz nottvsoldier
- cmp manspath,2
- jz pathoktv
- mov destination,2
- mov finaldest,2
- call autosetwalk
-pathoktv: mov lastweapon,1
- mov getback,1
- ret
-nottvsoldier: call showfirstuse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-
-
-Useshield proc near
-
- cmp reallocation,20
- jnz notinsartroom
- cmp combatcount,0
- jz notinsartroom
- mov lastweapon,3
- call showseconduse
- mov getback,1
- inc progresspoints
- call removeobfrominv
- ret
-notinsartroom: call showfirstuse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-
-Usebuttona proc near
-
- mov al,95
- call issetobonmap
- jz donethisbit
-
- call showfirstuse
- mov al,0
- mov ah,roomnum
- dec ah
- call turnanypathon
- mov al,9
- call removesetobject
- mov al,95
- call placesetobject
-
- mov watchingtime,15*2
- mov reeltowatch,71
- mov endwatchreel,85
- mov watchspeed,1
- mov speedcount,1
-
- mov getback,1
- inc progresspoints
- ret
-donethisbit: call showseconduse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-Useplate proc near
-
- cmp withobject,255
- jnz platewith
- call withwhat
- ret
-platewith: mov al,withobject
- mov ah,withtype
- mov cl,"S"
- mov ch,"C"
- mov dl,"R"
- mov dh,"W"
- call compare
- jz unscrewplate
- mov al,withobject
- mov ah,withtype
- mov cl,"K"
- mov ch,"N"
- mov dl,"F"
- mov dh,"E"
- call compare
- jz triedknife
- mov cx,300
- mov al,14
- call showpuztext
- call putbackobstuff
- ret
-
-unscrewplate: mov al,20
- call playchannel1
- call showfirstuse
- mov al,28
- call placesetobject
- mov al,24
- call placesetobject
- mov al,25
- call removesetobject
- mov al,0
- call placefreeobject
- inc progresspoints
- mov getback,1
- ret
-
-triedknife: mov cx,300
- mov al,54
- call showpuztext
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-Usewinch proc near
-
- mov al,40
- mov ah,1
- call checkinside
- cmp cl,numexobjects
- jz nowinch
- mov al,cl
- mov ah,4
- mov cl,"F"
- mov ch,"U"
- mov dl,"S"
- mov dh,"E"
- call compare
- jnz nowinch
-
- mov watchingtime,217*2
- mov reeltowatch,0
- mov endwatchreel,217
- mov watchspeed,1
- mov speedcount,1
- mov destpos,1
- mov newlocation,45
- mov dreamnumber,1
- mov roomafterdream,44
- mov generaldead,1
- mov newsitem,2
- mov getback,1
- inc progresspoints
- ret
-
-nowinch: call showfirstuse
- call putbackobstuff
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
+
+Useobject proc near
+
+ mov withobject,255
+
+ cmp commandtype,229
+ jz alreadyuse
+ mov commandtype,229
+
+ mov bl,command
+ mov bh,objecttype
+ mov al,51
+ call commandwithob
+alreadyuse: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz nouse
+ and ax,1
+ jnz douse
+nouse: ret
+
+douse: call useroutine
+ ret
+
+ endp
+
+
+
+
+
+
+
+Useroutine proc near
+
+ cmp reallocation,50
+ jc nodream7
+ cmp pointerpower,0
+ jnz powerok
+ ret
+powerok: mov pointerpower,0
+
+nodream7: call getanyad
+ mov dx,seg uselist
+ mov ds,dx
+ mov si,offset uselist
+checkuselist: push si
+ lodsb
+ sub al,"A"
+ cmp al,[es:bx+12]
+ jnz failed
+ lodsb
+ sub al,"A"
+ cmp al,[es:bx+13]
+ jnz failed
+ lodsb
+ sub al,"A"
+ cmp al,[es:bx+14]
+ jnz failed
+ lodsb
+ sub al,"A"
+ cmp al,[es:bx+15]
+ jnz failed
+ lodsw
+ pop si
+ call ax
+ ret
+failed: pop si
+ add si,6
+ cmp byte ptr [si],140
+ jnz checkuselist
+
+ call delpointer
+ call getobtextstart
+ call findnextcolon
+ cmp al,0
+ jz cantuse2
+ call findnextcolon
+ cmp al,0
+ jz cantuse2
+ mov al,[es:si]
+ cmp al,0
+ jz cantuse2
+ call usetext
+ mov cx,400
+ call hangonp
+ call putbackobstuff
+ ret
+cantuse2: call createpanel
+ call showpanel
+ call showman
+ call showexit
+ call obicons
+ mov di,33
+ mov bx,100
+ mov al,63
+ mov dl,241
+ call printmessage
+ call worktoscreenm
+ mov cx,50
+ call hangonp
+ call putbackobstuff
+ mov commandtype,255
+ ret
+
+Uselist: db "NETW"
+ dw usemon
+ db "ELVA"
+ dw useelevator1
+ db "ELVB"
+ dw useelevator2
+ db "ELVC"
+ dw useelevator3
+ db "ELVE"
+ dw useelevator4
+ db "ELVF"
+ dw useelevator5
+ db "CGAT"
+ dw usechurchgate
+ db "REMO"
+ dw usestereo
+ db "BUTA"
+ dw usebuttona
+ db "CBOX"
+ dw usewinch
+ db "LITE"
+ dw uselighter
+ db "PLAT"
+ dw useplate
+ db "LIFT"
+ dw usecontrol
+ db "WIRE"
+ dw usewire
+ db "HNDL"
+ dw usehandle
+ db "HACH"
+ dw usehatch
+ db "DOOR"
+ dw useelvdoor
+ db "CSHR"
+ dw usecashcard
+ db "GUNA"
+ dw usegun
+ db "CRAA"
+ dw usecardreader1
+ db "CRBB"
+ dw usecardreader2
+ db "CRCC"
+ dw usecardreader3
+ db "SEAT"
+ dw sitdowninbar
+ db "MENU"
+ dw usemenu
+ db "COOK"
+ dw usecooker
+ db "ELCA"
+ dw callhotellift
+ db "EDCA"
+ dw calledenslift
+ db "DDCA"
+ dw calledensdlift
+ db "ALTR"
+ dw usealtar
+ db "LOKA"
+ dw openhoteldoor
+ db "LOKB"
+ dw openhoteldoor2
+ db "ENTA"
+ dw openlouis
+ db "ENTB"
+ dw openryan
+ db "ENTE"
+ dw openpoolboss
+ db "ENTC"
+ dw openyourneighbour
+ db "ENTD"
+ dw openeden
+ db "ENTH"
+ dw opensarters
+ db "WWAT"
+ dw wearwatch
+ db "POOL"
+ dw usepoolreader
+ db "WSHD"
+ dw wearshades
+ db "GRAF"
+ dw grafittidoor
+ db "TRAP"
+ dw trapdoor
+ db "CDPE"
+ dw edenscdplayer
+
+ db "DLOK"
+ dw opentvdoor
+
+ db "HOLE"
+ dw usehole
+
+ db "DRYR"
+ dw usedryer
+
+ db "HOLY"
+ dw usechurchhole
+
+ db "WALL"
+ dw usewall
+ db "BOOK"
+ dw usediary
+
+ db "AXED"
+ dw useaxe
+ db "SHLD"
+ dw useshield
+
+ db "BCNY"
+ dw userailing
+ db "LIDC"
+ dw usecoveredbox
+ db "LIDU"
+ dw useclearbox
+ db "LIDO"
+ dw useopenbox
+ db "PIPE"
+ dw usepipe
+
+ db "BALC"
+ dw usebalcony
+ db "WIND"
+ dw usewindow
+ db "PAPR"
+ dw viewfolder
+
+ db "UWTA"
+ dw usetrainer
+ db "UWTB"
+ dw usetrainer
+
+ db "STAT"
+ dw entersymbol
+ db "TLID"
+ dw opentomb
+ db "SLAB"
+ dw useslab
+ db "CART"
+ dw usecart
+ db "FCAR"
+ dw usefullcart
+
+
+ db "SLBA"
+ dw slabdoora
+ db "SLBB"
+ dw slabdoorb
+ db "SLBC"
+ dw slabdoorc
+ db "SLBD"
+ dw slabdoord
+ db "SLBE"
+ dw slabdoore
+ db "SLBF"
+ dw slabdoorf
+ db "PLIN"
+ dw useplinth
+
+ db "LADD"
+ dw useladder
+ db "LADB"
+ dw useladderb
+
+ db "GUMA"
+ dw chewy
+
+ db "SQEE"
+ dw wheelsound
+ db "TAPP"
+ dw runtap
+ db "GUIT"
+ dw playguitar
+ db "CONT"
+ dw hotelcontrol
+
+ db "BELL"
+ dw hotelbell
+
+ db 140,140,140,140
+
+ endp
+
+
+
+
+
+
+;-----------------------------------------------------------Puzzle routines----
+
+
+Wheelsound proc near
+
+ mov al,17
+ call playchannel1
+ call showfirstuse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+Runtap proc near
+
+ cmp withobject,255
+ jnz tapwith
+ call withwhat
+ ret
+tapwith: mov al,withobject
+ mov ah,withtype
+ mov cl,"C"
+ mov ch,"U"
+ mov dl,"P"
+ mov dh,"E"
+ call compare
+ jz fillcupfromtap
+ mov al,withobject
+ mov ah,withtype
+ mov cl,"C"
+ mov ch,"U"
+ mov dl,"P"
+ mov dh,"F"
+ call compare
+ jz cupfromtapfull
+ mov cx,300
+ mov al,56
+ call showpuztext
+ call putbackobstuff
+ ret
+
+fillcupfromtap: mov al,withobject
+ call getexad
+ mov byte ptr [es:bx+15],"F"-"A"
+ mov al,8
+ call playchannel1
+ mov cx,300
+ mov al,57
+ call showpuztext
+ call putbackobstuff
+ ret
+
+cupfromtapfull: mov cx,300
+ mov al,58
+ call showpuztext
+ call putbackobstuff
+ ret
+
+
+ endp
+
+
+
+Playguitar proc near
+
+ mov al,14
+ call playchannel1
+ call showfirstuse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+Hotelcontrol proc near
+
+ cmp reallocation,21
+ jnz notrightcont
+ cmp mapx,33
+ jnz notrightcont
+ call showfirstuse
+ call putbackobstuff
+ ret
+notrightcont: call showseconduse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+Hotelbell proc near
+
+ if demo
+ mov al,24
+ else
+ mov al,12
+ endif
+ call playchannel1
+ call showfirstuse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+Opentomb proc near
+
+ inc progresspoints
+ call showfirstuse
+ mov watchingtime,35*2
+ mov reeltowatch,1
+ mov endwatchreel,33
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ ret
+
+ endp
+
+
+
+Usetrainer proc near
+
+ call getanyad
+ cmp byte ptr [es:bx+2],4
+ jnz notheldtrainer
+ inc progresspoints
+ call makeworn
+ call showseconduse
+ call putbackobstuff
+ ret
+notheldtrainer: call nothelderror
+ ret
+
+ endp
+
+
+
+Nothelderror proc near
+
+ call createpanel
+ call showpanel
+ call showman
+ call showexit
+ call obicons
+ mov di,64
+ mov bx,100
+ mov al,63
+ mov ah,1
+ mov dl,201
+ call printmessage2
+ call worktoscreenm
+ mov cx,50
+ call hangonp
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+Usepipe proc near
+
+ cmp withobject,255
+ jnz pipewith
+ call withwhat
+ ret
+pipewith: mov al,withobject
+ mov ah,withtype
+ mov cl,"C"
+ mov ch,"U"
+ mov dl,"P"
+ mov dh,"E"
+ call compare
+ jz fillcup
+ mov al,withobject
+ mov ah,withtype
+ mov cl,"C"
+ mov ch,"U"
+ mov dl,"P"
+ mov dh,"F"
+ call compare
+ jz alreadyfull
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+
+fillcup: mov cx,300
+ mov al,36
+ call showpuztext
+ call putbackobstuff
+ mov al,withobject
+ call getexad
+ mov byte ptr [es:bx+15],"F"-"A"
+ ret
+
+alreadyfull: mov cx,300
+ mov al,35
+ call showpuztext
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+
+Usefullcart proc near
+
+ inc progresspoints
+ mov al,2
+ mov ah,roomnum
+ add ah,6
+ call turnanypathon
+ mov manspath,4
+ mov facing,4
+ mov turntoface,4
+ mov finaldest,4
+ call findxyfrompath
+ mov resetmanxy,1
+ call showfirstuse
+ mov watchingtime,72*2
+ mov reeltowatch,58
+ mov endwatchreel,142
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+
+
+Useplinth proc near
+
+ cmp withobject,255
+ jnz plinthwith
+ call withwhat
+ ret
+
+plinthwith: mov al,withobject
+ mov ah,withtype
+ mov cl,"D"
+ mov ch,"K"
+ mov dl,"E"
+ mov dh,"Y"
+ call compare
+ jz isrightkey
+ call showfirstuse
+ call putbackobstuff
+ ret
+
+isrightkey: inc progresspoints
+ call showseconduse
+ mov watchingtime,220
+ mov reeltowatch,0
+ mov endwatchreel,104
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ mov al,roomafterdream
+ mov newlocation,al
+ ret
+
+ endp
+
+
+
+Chewy proc near
+
+ call showfirstuse
+ call getanyad
+ mov byte ptr [es:bx+2],255
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+Useladder proc near
+
+ call showfirstuse
+ sub mapx,11
+ call findroominloc
+ mov facing,6
+ mov turntoface,6
+ mov manspath,0
+ mov destination,0
+ mov finaldest,0
+ call findxyfrompath
+ mov resetmanxy,1
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+Useladderb proc near
+
+ call showfirstuse
+ add mapx,11
+ call findroominloc
+ mov facing,2
+ mov turntoface,2
+ mov manspath,1
+ mov destination,1
+ mov finaldest,1
+ call findxyfrompath
+ mov resetmanxy,1
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+Slabdoora proc near
+
+ call showfirstuse
+ mov getback,1
+ mov watchspeed,1
+ mov speedcount,1
+ mov reeltowatch,13
+ cmp dreamnumber,3
+ jnz slabawrong
+ inc progresspoints
+ mov watchingtime,60
+ mov endwatchreel,42
+ mov newlocation,47
+ ret
+slabawrong: mov watchingtime,40
+ mov endwatchreel,34
+ mov watchspeed,1
+ mov speedcount,1
+ ret
+
+ endp
+
+
+
+
+Slabdoorb proc near
+
+ cmp dreamnumber,1
+ jnz slabbwrong
+ mov al,"S"
+ mov ah,"H"
+ mov cl,"L"
+ mov ch,"D"
+ call isryanholding
+ jnz gotcrystal
+ mov al,44
+ mov cx,200
+ call showpuztext
+ call putbackobstuff
+ ret
+gotcrystal: call showfirstuse
+ inc progresspoints
+ mov getback,1
+ mov watchspeed,1
+ mov speedcount,1
+ mov reeltowatch,44
+ mov watchingtime,60
+ mov endwatchreel,71
+ mov newlocation,47
+ ret
+slabbwrong: call showfirstuse
+ mov getback,1
+ mov watchspeed,1
+ mov speedcount,1
+ mov reeltowatch,44
+ mov watchingtime,40
+ mov endwatchreel,63
+ mov watchspeed,1
+ mov speedcount,1
+ ret
+
+ endp
+
+
+
+Slabdoord proc near
+
+ call showfirstuse
+ mov getback,1
+ mov watchspeed,1
+ mov speedcount,1
+ mov reeltowatch,75
+ cmp dreamnumber,0
+ jnz slabcwrong
+ inc progresspoints
+ mov watchingtime,60
+ mov endwatchreel,102
+ mov newlocation,47
+ ret
+slabcwrong: mov watchingtime,40
+ mov endwatchreel,94
+ mov watchspeed,1
+ mov speedcount,1
+ ret
+
+ endp
+
+
+
+Slabdoorc proc near
+
+ call showfirstuse
+ mov getback,1
+ mov watchspeed,1
+ mov speedcount,1
+ mov reeltowatch,108
+ cmp dreamnumber,4
+ jnz slabdwrong
+ inc progresspoints
+ mov watchingtime,60
+ mov endwatchreel,135
+ mov newlocation,47
+ ret
+slabdwrong: mov watchingtime,40
+ mov endwatchreel,127
+ mov watchspeed,1
+ mov speedcount,1
+ ret
+
+ endp
+
+
+
+Slabdoore proc near
+
+ call showfirstuse
+ mov getback,1
+ mov watchspeed,1
+ mov speedcount,1
+ mov reeltowatch,141
+ cmp dreamnumber,5
+ jnz slabewrong
+ inc progresspoints
+ mov watchingtime,60
+ mov endwatchreel,168
+ mov newlocation,47
+ ret
+slabewrong: mov watchingtime,40
+ mov endwatchreel,160
+ mov watchspeed,1
+ mov speedcount,1
+ ret
+
+ endp
+
+
+
+Slabdoorf proc near
+
+ call showfirstuse
+ mov getback,1
+ mov watchspeed,1
+ mov speedcount,1
+ mov reeltowatch,171
+ cmp dreamnumber,2
+ jnz slabfwrong
+ inc progresspoints
+ mov watchingtime,60
+ mov endwatchreel,197
+ mov newlocation,47
+ ret
+slabfwrong: mov watchingtime,40
+ mov endwatchreel,189
+ mov watchspeed,1
+ mov speedcount,1
+ ret
+
+ endp
+
+
+
+
+
+
+Useslab proc near
+
+ cmp withobject,255
+ jnz slabwith
+ call withwhat
+ ret
+slabwith: mov al,withobject
+ mov ah,withtype
+ mov cl,"J"
+ mov ch,"E"
+ mov dl,"W"
+ mov dh,"L"
+ call compare
+ jz nextslab
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+nextslab: mov al,withobject
+ call getexad
+ mov byte ptr [es:bx+2],0
+ mov al,command
+ push ax
+ call removesetobject
+ pop ax
+ inc al
+ push ax
+ call placesetobject
+ pop ax
+ cmp al,54
+ jnz notlastslab
+ mov al,0
+ call turnpathon
+ mov watchingtime,22
+ mov reeltowatch,35
+ mov endwatchreel,48
+ mov watchspeed,1
+ mov speedcount,1
+notlastslab: inc progresspoints
+ call showfirstuse
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+Usecart proc near
+
+ cmp withobject,255
+ jnz cartwith
+ call withwhat
+ ret
+cartwith: mov al,withobject
+ mov ah,withtype
+ mov cl,"R"
+ mov ch,"O"
+ mov dl,"C"
+ mov dh,"K"
+ call compare
+ jz nextcart
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+nextcart: mov al,withobject
+ call getexad
+ mov byte ptr [es:bx+2],0
+ mov al,command
+ push ax
+ call removesetobject
+ pop ax
+ inc al
+ call placesetobject
+ inc progresspoints
+ mov al,17
+ call playchannel1
+ call showfirstuse
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Useclearbox proc near
+
+ cmp withobject,255
+ jnz clearboxwith
+ call withwhat
+ ret
+clearboxwith: mov al,withobject
+ mov ah,withtype
+ mov cl,"R"
+ mov ch,"A"
+ mov dl,"I"
+ mov dh,"L"
+ call compare
+ jz openbox
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+
+openbox: inc progresspoints
+ call showfirstuse
+ mov watchingtime,80
+ mov reeltowatch,67
+ mov endwatchreel,105
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+Usecoveredbox proc near
+
+ inc progresspoints
+ call showfirstuse
+ mov watchingtime,50
+ mov reeltowatch,41
+ mov endwatchreel,66
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ ret
+
+ endp
+
+
+
+Userailing proc near
+
+ call showfirstuse
+ mov watchingtime,80
+ mov reeltowatch,0
+ mov endwatchreel,30
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ mov mandead,4
+ ret
+
+ endp
+
+
+
+
+
+Useopenbox proc near
+
+ cmp withobject,255
+ jnz openboxwith
+ call withwhat
+ ret
+openboxwith: mov al,withobject
+ mov ah,withtype
+ mov cl,"C"
+ mov ch,"U"
+ mov dl,"P"
+ mov dh,"F"
+ call compare
+ jz destoryopenbox
+ mov al,withobject
+ mov ah,withtype
+ mov cl,"C"
+ mov ch,"U"
+ mov dl,"P"
+ mov dh,"E"
+ call compare
+ jz openboxwrong
+ call showfirstuse
+ ret
+
+destoryopenbox: inc progresspoints
+ mov cx,300
+ mov al,37
+ call showpuztext
+ mov al,withobject
+ call getexad
+ mov byte ptr [es:bx+15],"E"-"A"
+ mov watchingtime,140
+ mov reeltowatch,105
+ mov endwatchreel,181
+ mov watchspeed,1
+ mov speedcount,1
+ mov al,4
+ call turnpathon
+ mov getback,1
+ ret
+
+openboxwrong: mov cx,300
+ mov al,38
+ call showpuztext
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Wearwatch proc near
+
+ cmp watchon,1
+ jz wearingwatch
+ call showfirstuse
+ mov watchon,1
+ mov getback,1
+ call getanyad
+ call makeworn
+ ret
+wearingwatch: call showseconduse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+Wearshades proc near
+
+ cmp shadeson,1
+ jz wearingshades
+ mov shadeson,1
+ call showfirstuse
+ mov getback,1
+ call getanyad
+ call makeworn
+ ret
+wearingshades: call showseconduse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+Sitdowninbar proc near
+
+ cmp watchmode,-1
+ jnz satdown
+ call showfirstuse
+ mov watchingtime,50
+ mov reeltowatch,55
+ mov endwatchreel,71
+ mov reeltohold,73
+ mov endofholdreel,83
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ ret
+satdown: call showseconduse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+Usechurchhole proc near
+
+ call showfirstuse
+ mov getback,1
+ mov watchingtime,28
+ mov reeltowatch,13
+ mov endwatchreel,26
+ mov watchspeed,1
+ mov speedcount,1
+ ret
+
+ endp
+
+
+
+Usehole proc near
+
+ cmp withobject,255
+ jnz holewith
+ call withwhat
+ ret
+holewith: mov al,withobject
+ mov ah,withtype
+ mov cl,"H"
+ mov ch,"N"
+ mov dl,"D"
+ mov dh,"A"
+ call compare
+ jz righthand
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+
+righthand: call showfirstuse
+ mov al,86
+ call removesetobject
+ mov al,withobject
+ call getexad
+ mov byte ptr [es:bx+2],255
+ mov canmovealtar,1
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+Usealtar proc near
+
+ mov al,"C"
+ mov ah,"N"
+ mov cl,"D"
+ mov ch,"A"
+ call findexobject
+ cmp al,numexobjects
+ jz thingsonaltar
+ mov al,"C"
+ mov ah,"N"
+ mov cl,"D"
+ mov ch,"B"
+ call findexobject
+ cmp al,numexobjects
+ jz thingsonaltar
+ cmp canmovealtar,1
+ jz movealtar
+ mov cx,300
+ mov al,23
+ call showpuztext
+ mov getback,1
+ ret
+
+movealtar: inc progresspoints
+ call showseconduse
+ mov watchingtime,160
+ mov reeltowatch,81
+ mov endwatchreel,174
+ mov watchspeed,1
+ mov speedcount,1
+
+ mov al,47 ;message number
+ mov bl,52 ;x pos of message
+ mov bh,76 ;and y pos
+ mov cx,32 ;time on screen
+ mov dx,98 ;pause before show
+ call setuptimeduse
+ mov getback,1
+ ret
+
+thingsonaltar: call showfirstuse
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Opentvdoor proc near
+
+ cmp withobject,255
+ jnz tvdoorwith
+ call withwhat
+ ret
+tvdoorwith: mov al,withobject
+ mov ah,withtype
+ mov cl,"U"
+ mov ch,"L"
+ mov dl,"O"
+ mov dh,"K"
+ call compare
+ jz keyontv
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+
+keyontv: call showfirstuse
+ mov lockstatus,0
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+
+
+Usedryer proc near
+
+ mov al,12
+ call playchannel1
+ call showfirstuse
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+Openlouis proc near
+
+ mov al,5
+ mov ah,2
+ mov cl,3
+ mov ch,8
+ call entercode
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+Nextcolon proc near
+
+lookcolon: mov al,[es:si]
+ inc si
+ cmp al,":"
+ jnz lookcolon
+ ret
+
+ endp
+
+
+
+
+Openyourneighbour proc near
+
+ mov al,255
+ mov ah,255
+ mov cl,255
+ mov ch,255
+ call entercode
+ mov getback,1
+ ret
+
+ endp
+
+
+
+Usewindow proc near
+
+ cmp manspath,6
+ jnz notonbalc
+ inc progresspoints
+ call showfirstuse
+ mov newlocation,29
+ mov getback,1
+ ret
+notonbalc: call showseconduse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+Usebalcony proc near
+
+ call showfirstuse
+ mov al,6
+ call turnpathon
+ mov al,0
+ call turnpathoff
+ mov al,1
+ call turnpathoff
+ mov al,2
+ call turnpathoff
+ mov al,3
+ call turnpathoff
+ mov al,4
+ call turnpathoff
+ mov al,5
+ call turnpathoff
+ inc progresspoints
+ mov manspath,6
+ mov destination,6
+ mov finaldest,6
+ call findxyfrompath
+ call switchryanoff
+ mov resetmanxy,1
+
+ mov watchingtime,30*2
+ mov reeltowatch,183
+ mov endwatchreel,212
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ ret
+
+ endp
+
+
+
+Openryan proc near
+
+ mov al,5
+ mov ah,1
+ mov cl,0
+ mov ch,6
+ call entercode
+ mov getback,1
+ ret
+
+ endp
+
+
+
+Openpoolboss proc near
+
+ mov al,5
+ mov ah,2
+ mov cl,2
+ mov ch,2
+ call entercode
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+Openeden proc near
+
+ mov al,2
+ mov ah,8
+ mov cl,6
+ mov ch,5
+ call entercode
+ mov getback,1
+ ret
+
+ endp
+
+
+Opensarters proc near
+
+ mov al,7
+ mov ah,8
+ mov cl,3
+ mov ch,3
+ call entercode
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+Isitright proc near
+
+ mov bx,seg presslist
+ mov es,bx
+ mov bx,offset es:presslist
+ cmp [es:bx+0],al
+ jnz notright
+ cmp [es:bx+1],ah
+ jnz notright
+ cmp [es:bx+2],cl
+ jnz notright
+ cmp [es:bx+3],ch
+notright: ret
+
+ endp
+
+
+
+
+Drawitall proc near
+
+ call createpanel
+ call drawfloor
+ ;call dumpallmap
+ call printsprites
+ call showicon
+ ret
+
+ endp
+
+
+
+
+Openhoteldoor proc near
+
+ cmp withobject,255
+ jnz hoteldoorwith
+ call withwhat
+ ret
+hoteldoorwith: mov al,withobject
+ mov ah,withtype
+ mov cl,"K"
+ mov ch,"E"
+ mov dl,"Y"
+ mov dh,"A"
+ call compare
+ jz keyonhotel1
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+
+keyonhotel1: if demo
+ mov al,27
+ else
+ mov al,16
+ endif
+ call playchannel1
+ call showfirstuse
+ ;mov destination,1
+ ;mov finaldest,1
+ ;call autosetwalk
+ mov lockstatus,0
+ mov getback,1
+ ret
+
+ endp
+
+
+
+Openhoteldoor2 proc near
+
+ cmp withobject,255
+ jnz hoteldoorwith2
+ call withwhat
+ ret
+hoteldoorwith2: mov al,withobject
+ mov ah,withtype
+ mov cl,"K"
+ mov ch,"E"
+ mov dl,"Y"
+ mov dh,"A"
+ call compare
+ jz keyonhotel2
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+
+keyonhotel2: if demo
+ mov al,27
+ else
+ mov al,16
+ endif
+ call playchannel1
+ call showfirstuse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+
+Grafittidoor proc near
+
+ cmp withobject,255
+ jnz grafwith
+ call withwhat
+ ret
+grafwith: mov al,withobject
+ mov ah,withtype
+ mov cl,"A"
+ mov ch,"P"
+ mov dl,"E"
+ mov dh,"N"
+ call compare
+ jz dograf
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+
+dograf: call showfirstuse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+Trapdoor proc near
+
+ inc progresspoints
+ call showfirstuse
+ call switchryanoff
+ mov watchingtime,20*2
+ mov reeltowatch,181
+ mov endwatchreel,197
+ mov newlocation,26
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+Callhotellift proc near
+
+ if demo
+ mov al,24
+ else
+ mov al,12
+ endif
+ call playchannel1
+ call showfirstuse
+ mov counttoopen,8
+ mov getback,1
+ mov destination,5
+ mov finaldest,5
+ call autosetwalk
+ mov al,4
+ call turnpathon
+ ret
+
+ endp
+
+
+
+
+Calledenslift proc near
+
+ call showfirstuse
+ mov counttoopen,8
+ mov getback,1
+ mov al,2
+ call turnpathon
+ ret
+
+ endp
+
+
+
+Calledensdlift proc near
+
+ cmp liftflag,1
+ jz edensdhere
+ call showfirstuse
+ mov counttoopen,8
+ mov getback,1
+ mov al,2
+ call turnpathon
+ ret
+edensdhere: call showseconduse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+
+Usepoolreader proc near
+
+ cmp withobject,255
+ jnz poolwith
+ call withwhat
+ ret
+poolwith: mov al,withobject
+ mov ah,withtype
+ mov cl,"M"
+ mov ch,"E"
+ mov dl,"M"
+ mov dh,"B"
+ call compare
+ jz openpool
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+
+openpool: cmp talkedtoattendant,1
+ jz canopenpool
+ call showseconduse
+ call putbackobstuff
+ ret
+
+canopenpool: mov al,17
+ call playchannel1
+ call showfirstuse
+ mov counttoopen,6
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+Uselighter proc near
+
+ cmp withobject,255
+ jnz gotlighterwith
+ call withwhat
+ ret
+gotlighterwith: mov al,withobject
+ mov ah,withtype
+ mov cl,"S"
+ mov ch,"M"
+ mov dl,"K"
+ mov dh,"E"
+ call compare
+ jz cigarette
+ call showfirstuse
+ call putbackobstuff
+ ret
+cigarette: mov cx,300
+ mov al,9
+ call showpuztext
+ mov al,withobject
+ call getexad
+ mov byte ptr [es:bx+2],255
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+Showseconduse proc near
+
+ call getobtextstart
+ call nextcolon
+ call nextcolon
+ call nextcolon
+ call usetext
+ mov cx,400
+ call hangonp
+ ret
+
+ endp
+
+
+
+
+
+
+Usecardreader1 proc near
+
+ cmp withobject,255
+ jnz gotreader1with
+ call withwhat
+ ret
+gotreader1with: mov al,withobject
+ mov ah,withtype
+ mov cl,"C"
+ mov ch,"S"
+ mov dl,"H"
+ mov dh,"R"
+ call compare
+ jz correctcard
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+correctcard: cmp talkedtosparky,0
+ jz notyet
+ cmp card1money,0
+ jz getscash
+ mov cx,300
+ mov al,17
+ call showpuztext
+ call putbackobstuff
+ ret
+getscash: mov al,16
+ call playchannel1
+ mov cx,300
+ mov al,18
+ call showpuztext
+ inc progresspoints
+ mov card1money,12432
+ mov getback,1
+ ret
+notyet: call showfirstuse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+Usecardreader2 proc near
+
+ cmp withobject,255
+ jnz gotreader2with
+ call withwhat
+ ret
+gotreader2with: mov al,withobject
+ mov ah,withtype
+ mov cl,"C"
+ mov ch,"S"
+ mov dl,"H"
+ mov dh,"R"
+ call compare
+ jz correctcard2
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+
+correctcard2: cmp talkedtoboss,0
+ jz notyetboss
+ cmp card1money,0
+ jz nocash
+ cmp gunpassflag,2
+ jz alreadygotnew
+ mov al,18
+ call playchannel1
+ mov cx,300
+ mov al,19
+ call showpuztext
+ mov al,94
+ call placesetobject
+ mov gunpassflag,1
+ sub card1money,2000
+ inc progresspoints
+ mov getback,1
+ ret
+nocash: mov cx,300
+ mov al,20
+ call showpuztext
+ call putbackobstuff
+ ret
+alreadygotnew: mov cx,300
+ mov al,22
+ call showpuztext
+ call putbackobstuff
+ ret
+notyetboss: call showfirstuse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+
+
+Usecardreader3 proc near
+
+ cmp withobject,255
+ jnz gotreader3with
+ call withwhat
+ ret
+gotreader3with: mov al,withobject
+ mov ah,withtype
+ mov cl,"C"
+ mov ch,"S"
+ mov dl,"H"
+ mov dh,"R"
+ call compare
+ jz rightcard
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+
+rightcard: cmp talkedtorecep,0
+ jz notyetrecep
+ cmp cardpassflag,0
+ jnz alreadyusedit
+ if demo
+ mov al,27
+ else
+ mov al,16
+ endif
+ call playchannel1
+ mov cx,300
+ mov al,25
+ call showpuztext
+ inc progresspoints
+ sub card1money,8300
+ mov cardpassflag,1
+ mov getback,1
+ ret
+alreadyusedit: mov cx,300
+ mov al,26
+ call showpuztext
+ call putbackobstuff
+ ret
+notyetrecep: call showfirstuse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Usecashcard proc near
+
+ call getridofreels
+ call loadkeypad
+ call createpanel
+ call showpanel
+ call showexit
+ call showman
+
+ mov di,114
+ if foreign
+ mov bx,120-3
+ else
+ mov bx,120
+ endif
+ mov ds,tempgraphics
+ mov al,39
+ mov ah,0
+ call showframe
+
+ mov ax,card1money
+ call moneypoke
+
+ call getobtextstart
+ call nextcolon
+ call nextcolon
+
+ mov di,36
+ mov bx,98
+ mov dl,241
+ mov al,0
+ mov ah,0
+ call printdirect
+
+ mov di,160
+ mov bx,155
+ push cs
+ pop es
+ mov si,offset cs:money1poke
+ mov charshift,91*2+75
+ mov al,0
+ mov ah,0
+ mov dl,240
+ call printdirect
+ mov di,187
+ mov bx,155
+ push cs
+ pop es
+ mov si,offset cs:money2poke
+ mov charshift,91*2+85
+ mov al,0
+ mov ah,0
+ mov dl,240
+ call printdirect
+ mov charshift,0
+ call worktoscreenm
+ mov cx,400
+ call hangonp
+ call getridoftemp
+ call restorereels
+ call putbackobstuff
+ ret
+
+money1poke: db "0000",0
+money2poke: db "00",0
+
+ endp
+
+
+
+
+Lookatcard proc near
+
+ mov manisoffscreen,1
+ call getridofreels
+ call loadkeypad
+
+ call createpanel2
+ mov di,160
+ mov bx,80
+ mov ds,tempgraphics
+ mov al,42
+ mov ah,128
+ call showframe
+
+ call getobtextstart
+ call findnextcolon
+ call findnextcolon
+ call findnextcolon
+ mov di,36
+ mov bx,124
+ mov dl,241
+ mov al,0
+ mov ah,0
+ call printdirect
+
+ push es si
+ call worktoscreenm
+ mov cx,280
+ call hangonw
+ call createpanel2
+ mov di,160
+ mov bx,80
+ mov ds,tempgraphics
+ mov al,42
+ mov ah,128
+ call showframe
+ pop si es
+
+ mov di,36
+ mov bx,130
+ mov dl,241
+ mov al,0
+ mov ah,0
+ call printdirect
+ call worktoscreenm
+
+ mov cx,200
+ call hangonw
+ mov manisoffscreen,0
+ call getridoftemp
+ call restorereels
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+Moneypoke proc near
+
+ mov bx,offset cs:money1poke
+ mov cl,48-1
+numberpoke0: inc cl
+ sub ax,10000
+ jnc numberpoke0
+ add ax,10000
+ mov [cs:bx],cl
+ inc bx
+
+ mov cl,48-1
+numberpoke1: inc cl
+ sub ax,1000
+ jnc numberpoke1
+ add ax,1000
+ mov [cs:bx],cl
+ inc bx
+
+ mov cl,48-1
+numberpoke2: inc cl
+ sub ax,100
+ jnc numberpoke2
+ add ax,100
+ mov [cs:bx],cl
+ inc bx
+
+ mov cl,48-1
+numberpoke3: inc cl
+ sub ax,10
+ jnc numberpoke3
+ add ax,10
+ mov [cs:bx],cl
+
+ mov bx,offset cs:money2poke
+ add al,48
+ mov [cs:bx],al
+ ret
+
+ endp
+
+
+
+
+
+
+
+Usecontrol proc near
+
+ cmp withobject,255
+ jnz gotcontrolwith
+ call withwhat
+ ret
+gotcontrolwith: mov al,withobject
+ mov ah,withtype
+ mov cl,"K"
+ mov ch,"E"
+ mov dl,"Y"
+ mov dh,"A"
+ call compare
+ jz rightkey
+ cmp reallocation,21
+ jnz balls
+ mov al,withobject
+ mov ah,withtype
+ mov cl,"K"
+ mov ch,"N"
+ mov dl,"F"
+ mov dh,"E"
+ call compare
+ jz jimmycontrols
+ mov al,withobject
+ mov ah,withtype
+ mov cl,"A"
+ mov ch,"X"
+ mov dl,"E"
+ mov dh,"D"
+ call compare
+ jz axeoncontrols
+
+balls: call showfirstuse
+ call putbackobstuff
+ ret
+
+rightkey: mov al,16
+ call playchannel1
+ cmp location,21
+ jz goingdown
+ mov cx,300
+ mov al,0
+ call showpuztext
+ mov newlocation,21
+ mov counttoclose,8
+ mov counttoopen,0
+ mov watchingtime,80
+ mov getback,1
+ ret
+
+goingdown: mov cx,300
+ mov al,3
+ call showpuztext
+ mov newlocation,30
+ mov counttoclose,8
+ mov counttoopen,0
+ mov watchingtime,80
+ mov getback,1
+ ret
+
+jimmycontrols: mov al,50
+ call placesetobject
+ mov al,51
+ call placesetobject
+ mov al,26
+ call placesetobject
+ mov al,30
+ call placesetobject
+ mov al,16
+ call removesetobject
+ mov al,17
+ call removesetobject
+ if demo
+ mov al,26
+ else
+ mov al,14
+ endif
+ call playchannel1
+ mov cx,300
+ mov al,10
+ call showpuztext
+ inc progresspoints
+ mov getback,1
+ ret
+
+axeoncontrols: mov cx,300
+ mov al,16
+ call showpuztext
+ inc progresspoints
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+
+Usehatch proc near
+
+ call showfirstuse
+ mov newlocation,40
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+Usewire proc near
+
+ cmp withobject,255
+ jnz gotwirewith
+ call withwhat
+ ret
+gotwirewith: mov al,withobject
+ mov ah,withtype
+ mov cl,"K"
+ mov ch,"N"
+ mov dl,"F"
+ mov dh,"E"
+ call compare
+ jz wireknife
+ mov al,withobject
+ mov ah,withtype
+ mov cl,"A"
+ mov ch,"X"
+ mov dl,"E"
+ mov dh,"D"
+ call compare
+ jz wireaxe
+
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+
+wireaxe: mov cx,300
+ mov al,16
+ call showpuztext
+ call putbackobstuff
+ ret
+
+wireknife: mov al,51
+ call removesetobject
+ mov al,52
+ call placesetobject
+ mov cx,300
+ mov al,11
+ call showpuztext
+ inc progresspoints
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+
+
+Usehandle proc near
+
+ mov al,"C"
+ mov ah,"U"
+ mov cl,"T"
+ mov ch,"W"
+ call findsetobject
+ mov al,[es:bx+58]
+ cmp al,255
+ jnz havecutwire
+ mov cx,300
+ mov al,12
+ call showpuztext
+ mov getback,1
+ ret
+
+havecutwire: mov cx,300
+ mov al,13
+ call showpuztext
+ mov newlocation,22
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Useelevator1 proc near
+
+ call showfirstuse
+ call selectlocation
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+
+Showfirstuse proc near ;shows but does not delete the
+ ;first bit of text after the
+ call getobtextstart ;description
+ call findnextcolon
+ call findnextcolon
+ call usetext
+ mov cx,400
+ call hangonp
+ ret
+
+ endp
+
+
+
+
+
+Useelevator3 proc near
+
+ call showfirstuse
+ mov counttoclose,20
+ mov newlocation,34
+ mov reeltowatch,46
+ mov endwatchreel,63
+ mov watchspeed,1
+ mov speedcount,1
+ mov watchingtime,80 ;40
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+Useelevator4 proc near
+
+ call showfirstuse
+ mov reeltowatch,0
+ mov endwatchreel,11
+ mov watchspeed,1
+ mov speedcount,1
+ mov counttoclose,20
+ mov watchingtime,80 ;40
+ mov getback,1
+ mov newlocation,24
+ ret
+
+ endp
+
+
+
+Useelevator2 proc near
+
+ cmp location,23
+ jz inpoolhall
+ call showfirstuse
+ mov newlocation,23
+ mov counttoclose,20
+ mov counttoopen,0
+ mov watchingtime,80
+ mov getback,1
+ ret
+inpoolhall: call showfirstuse
+ mov newlocation,31
+ mov counttoclose,20
+ mov counttoopen,0
+ mov watchingtime,80
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+Useelevator5 proc near
+
+ mov al,4
+ call placesetobject
+ mov al,0
+ call removesetobject
+ mov newlocation,20
+ mov watchingtime,80
+ mov liftflag,1
+ mov counttoclose,8
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+Usekey proc near
+
+ cmp location,5
+ jz usekey1
+ cmp location,30
+ jz usekey1
+ cmp location,21
+ jz usekey2
+ mov cx,200
+ mov al,1
+ call showpuztext
+ call putbackobstuff
+ ret
+
+usekey1: cmp mapx,22
+ jnz wrongroom1
+ cmp mapy,10
+ jnz wrongroom1
+ mov cx,300
+ mov al,0
+ call showpuztext
+ mov counttoclose,100
+ mov getback,1
+ ret
+
+usekey2: cmp mapx,11
+ jnz wrongroom1
+ cmp mapy,10
+ jnz wrongroom1
+ mov cx,300
+ mov al,3
+ call showpuztext
+ mov newlocation,30
+ mov al,2
+ call fadescreendown
+ call showfirstuse
+ call putbackobstuff
+ ret
+
+wrongroom1: mov cx,200
+ mov al,2
+ call showpuztext
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+
+
+Usestereo proc near
+
+ cmp location,0
+ jz stereook
+ mov cx,400 ;Ryan isn't in his flat.
+ mov al,4
+ call showpuztext
+ call putbackobstuff
+ ret
+
+stereook: cmp mapx,11
+ jnz stereonotok
+ cmp mapy,0
+ jz stereook2
+stereonotok: mov cx,400 ;Ryan isn't in his bedroom.
+ mov al,5
+ call showpuztext
+ call putbackobstuff
+ ret
+
+stereook2: mov al,"C"
+ mov ah,"D"
+ mov cl,"P"
+ mov ch,"L"
+ call findsetobject ;find object number of CD player
+ mov ah,1 ;searching for inside a set ob
+ call checkinside ;see if there is anything inside
+ cmp cl,numexobjects
+ jnz cdinside
+ mov al,6 ;Need a CD inside
+ mov cx,400
+ call showpuztext
+ call putbackobstuff
+ call getanyad ;if the CD's been taken out,
+ mov al,255 ;make sure the player isn't still
+ mov [es:bx+10],al ;playing, ie:reset the puzzle
+ ret ;flag for the remote.
+
+cdinside: call getanyad
+ mov al,[es:bx+10]
+ xor al,1
+ mov [es:bx+10],al
+ cmp al,255
+ jz stereoon
+ mov al,7 ;The stereo works
+ mov cx,400
+ call showpuztext
+ call putbackobstuff
+ ret
+
+stereoon: mov al,8 ;Stereo was already on,
+ mov cx,400 ;so switch it off
+ call showpuztext
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Usecooker proc near
+
+ mov al,command
+ mov ah,objecttype
+ call checkinside ;see if there is anything inside
+ cmp cl,numexobjects
+ jnz foodinside
+ call showfirstuse
+ call putbackobstuff
+ ret ;flag for the remote.
+
+foodinside: call showseconduse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+
+Useaxe proc near
+
+ cmp reallocation,22
+ jnz notinpool
+ cmp mapy,10
+ jz axeondoor
+ call showseconduse
+ inc progresspoints
+ mov lastweapon,2
+ mov getback,1
+ call removeobfrominv
+ ret
+
+notinpool: call showfirstuse
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Useelvdoor proc near
+
+ cmp withobject,255
+ jnz gotdoorwith
+ call withwhat
+ ret
+gotdoorwith: mov al,withobject
+ mov ah,withtype
+ mov cl,"A"
+ mov ch,"X"
+ mov dl,"E"
+ mov dh,"D"
+ call compare
+ jz axeondoor
+ mov al,14
+ mov cx,300
+ call showpuztext
+ call putbackobstuff
+ ret
+
+axeondoor: mov al,15
+ mov cx,300
+ call showpuztext
+ inc progresspoints
+
+ mov watchingtime,46*2
+ mov reeltowatch,31
+ mov endwatchreel,77
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ ret
+
+ endp
+
+;------------------------------------------------------------------------------
+
+Withwhat proc near ;Gets player to identify object
+ ;to use selected item with.
+ call createpanel
+ call showpanel
+ call showman
+ call showexit
+ mov al,command
+ mov ah,objecttype
+ push cs
+ pop es
+ mov di,offset cs:commandline
+ call copyname
+
+ mov di,100
+ mov bx,21
+ mov dl,200
+ mov al,63
+ mov ah,2
+ call printmessage2
+
+ mov di,lastxpos
+ add di,5
+ mov bx,21
+ push cs
+ pop es
+ mov si,offset cs:commandline
+ mov dl,220
+ mov al,0
+ mov ah,0
+ call printdirect
+
+ mov di,lastxpos
+ add di,5
+ mov bx,21
+ mov dl,200
+ mov al,63
+ mov ah,3
+ call printmessage2
+
+ call fillryan
+ mov commandtype,255
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+ mov invopen,2
+ ret
+
+ endp
+
+
+
+
+
+Selectob proc near
+
+ call findinvpos
+ mov ax,[es:bx]
+ cmp al,255
+ jnz canselectob
+ call blank
+ ret
+
+canselectob: mov withobject,al
+ mov withtype,ah
+ cmp ax,oldsubject
+ jnz diffsub3
+ cmp commandtype,221
+ jz alreadyselob
+ mov commandtype,221
+
+diffsub3: mov oldsubject,ax
+ mov bx,ax
+ mov al,0
+ call commandwithob
+alreadyselob: mov ax,mousebutton
+ cmp ax,oldbutton
+ jz notselob
+ and ax,1
+ jnz doselob
+notselob: ret
+
+doselob: call delpointer
+ mov invopen,0
+ call useroutine
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Compare proc near
+
+ sub dl,"A"
+ sub dh,"A"
+ sub cl,"A"
+ sub ch,"A"
+ push cx dx
+ call getanyaddir
+ pop dx cx
+ cmp [es:bx+12],cx
+ jnz comparefin
+ cmp [es:bx+14],dx
+comparefin: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Findsetobject proc near ;searches set object ID's
+ ;for contents of ax,cx
+ sub al,"A" ;returns number in al and data
+ sub ah,"A" ;start point in es:bx
+ sub cl,"A"
+ sub ch,"A"
+ mov es,setdat
+ mov bx,0
+ mov dl,0 ;dl counts object number
+findsetloop: cmp al,[es:bx+12]
+ jnz nofind
+ cmp ah,[es:bx+13]
+ jnz nofind
+ cmp cl,[es:bx+14]
+ jnz nofind
+ cmp ch,[es:bx+15]
+ jnz nofind
+ mov al,dl
+ ret
+nofind: add bx,64
+ inc dl
+ cmp dl,128 ;number of objects to search
+ jnz findsetloop
+ mov al,dl
+ ret
+
+ endp
+
+
+
+
+
+
+Findexobject proc near ;searches ex object ID's
+ ;for contents of ax,cx
+ sub al,"A" ;returns number in al and data
+ sub ah,"A" ;start point in es:bx
+ sub cl,"A"
+ sub ch,"A"
+ mov es,extras
+ mov bx,exdata
+ mov dl,0 ;dl counts object number
+findexloop: cmp al,[es:bx+12]
+ jnz nofindex
+ cmp ah,[es:bx+13]
+ jnz nofindex
+ cmp cl,[es:bx+14]
+ jnz nofindex
+ cmp ch,[es:bx+15]
+ jnz nofindex
+ mov al,dl
+ ret
+nofindex: add bx,16
+ inc dl
+ cmp dl,numexobjects ;number of objects to search
+ jnz findexloop
+ mov al,dl
+ ret
+
+ endp
+
+
+
+Isryanholding proc near
+
+ sub al,"A" ;returns number in al and data
+ sub ah,"A" ;start point in es:bx
+ sub cl,"A"
+ sub ch,"A"
+ mov es,extras
+ mov bx,exdata
+ mov dl,0 ;dl counts object number
+searchinv: cmp byte ptr [es:bx+2],4
+ jnz nofindininv
+ cmp al,[es:bx+12]
+ jnz nofindininv
+ cmp ah,[es:bx+13]
+ jnz nofindininv
+ cmp cl,[es:bx+14]
+ jnz nofindininv
+ cmp ch,[es:bx+15]
+ jnz nofindininv
+ mov al,dl
+ cmp al,numexobjects
+ ret
+nofindininv: add bx,16
+ inc dl
+ cmp dl,numexobjects ;number of objects to search
+ jnz searchinv
+ mov al,dl
+ cmp al,numexobjects ;if not zero he is holding
+ ret ;if zero, he is not holding
+
+ endp
+
+
+
+
+Checkinside proc near ;finds an extra object inside
+ ;object number al, type ah
+
+ mov es,extras
+ mov bx,exdata
+ mov cl,0
+insideloop: cmp al,[es:bx+3] ;OI! might need to check room number!!!
+ jnz notfoundinside
+ cmp ah,[es:bx+2]
+ jnz notfoundinside
+ ret
+notfoundinside: add bx,16
+ inc cl
+ cmp cl,numexobjects
+ jnz insideloop
+ ret ;ch returns the object number
+ ;in the extras list
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+Usetext proc near
+
+ push es si
+ call createpanel
+ call showpanel
+ call showman
+ call showexit
+ call obicons
+ pop si es
+
+ mov di,36
+ mov bx,104
+ mov dl,241
+ mov al,0
+ mov ah,0
+ call printdirect
+
+ call worktoscreenm
+ ret
+
+ endp
+
+
+
+
+
+Putbackobstuff proc near
+
+ call createpanel
+ call showpanel
+ call showman
+ call obicons
+ call showexit
+ call obpicture
+ call describeob
+ call undertextline
+ mov commandtype,255
+ call readmouse
+ call showpointer
+ call worktoscreen
+ call delpointer
+ ret
+
+ endp
+
+
+
+
+
+
+
+Showpuztext proc near
+
+ push cx
+ call findpuztext
+ push es si
+ call createpanel
+ call showpanel
+ call showman
+ call showexit
+ call obicons
+ pop si es
+ mov di,36
+ mov bx,104
+ mov dl,241
+ mov ah,0
+ call printdirect
+ call worktoscreenm
+ pop cx
+ call hangonp
+ ret
+
+ endp
+
+
+
+Findpuztext proc near
+
+ mov ah,0
+ mov si,ax
+ add si,si
+ mov es,puzzletext
+ mov ax,[es:si]
+ add ax,textstart
+ mov si,ax
+ ret
+
+ endp
+
+
+
+;-------------------------------------------------------------------------------
+
+Placesetobject proc near
+
+ push es bx
+ mov cl,0
+ mov ch,0
+ call findormake
+ call getsetad
+ mov byte ptr [es:bx+58],0
+ pop bx es
+ ret
+
+ endp
+
+
+
+
+Removesetobject proc near
+
+ push es bx
+ mov cl,255
+ mov ch,0
+ call findormake
+ call getsetad
+ mov byte ptr [es:bx+58],255
+ pop bx es
+ ret
+
+ endp
+
+
+
+
+Issetobonmap proc near
+
+ push es bx
+ call getsetad
+ mov al,[es:bx+58]
+ pop bx es
+ cmp al,0
+ ret
+
+ endp
+
+
+
+
+
+
+Placefreeobject proc near
+
+ push es bx
+ mov cl,0
+ mov ch,1
+ call findormake
+ call getfreead
+ mov byte ptr [es:bx+2],0
+ pop bx es
+ ret
+
+ endp
+
+
+
+
+
+Removefreeobject proc near
+
+ push es bx
+ ;mov cl,255
+ ;mov ch,1
+ ;call findormake
+ call getfreead
+ mov byte ptr [es:bx+2],255
+ pop bx es
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Findormake proc near
+
+ mov bx,listofchanges
+ push ax
+ mov es,buffers
+ mov ah,reallocation
+changeloop: cmp byte ptr [es:bx],255
+ jz haventfound
+ cmp ax,[es:bx]
+ jnz nofoundchange
+ cmp ch,[es:bx+3]
+ jz foundchange
+nofoundchange: add bx,4
+ jmp changeloop
+foundchange: pop ax
+ mov [es:bx+2],cl
+ ret
+haventfound: mov [es:bx],ax
+ mov [es:bx+2],cx
+ pop ax
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Switchryanon proc near
+
+ mov ryanon,255
+ ret
+
+ endp
+
+
+
+
+
+Switchryanoff proc near
+
+ mov ryanon,1
+ ret
+
+ endp
+
+
+
+Setallchanges proc near
+
+ mov es,buffers
+ mov bx,listofchanges
+setallloop: mov ax,[es:bx]
+ cmp al,255
+ jz endsetloop
+ mov cx,[es:bx+2]
+ add bx,4
+ cmp ah,reallocation
+ jnz setallloop
+ push es bx
+ call dochange
+ pop bx es
+ jmp setallloop
+endsetloop: ret
+
+ endp
+
+
+
+
+
+
+Dochange proc near
+
+ cmp ch,0
+ jz object
+ cmp ch,1
+ jz freeobject
+
+path: push cx
+ mov ah,0
+ add ax,ax
+ add ax,ax
+ add ax,ax
+ push ax
+ mov al,ch
+ sub al,100
+ mov ah,0
+ mov cx,144
+ mul cx
+ pop bx
+ add bx,ax
+ add bx,pathdata
+ mov es,reels
+ pop cx
+ mov byte ptr [es:bx+6],cl
+nopath: ret
+
+object: push cx
+ call getsetad
+ pop cx
+ mov [es:bx+58],cl
+ ret
+
+freeobject: push cx
+ call getfreead
+ pop cx
+ cmp byte ptr [es:bx+2],255
+ jnz beenpickedup
+ mov [es:bx+2],cl
+beenpickedup: ret
+
+ endp
+
+
+
+Autoappear proc near ;places objects that appear
+ ;in rooms after certain
+ cmp location,32 ;conditions are met.
+ jnz notinalley
+ mov al,5 ;switch off travel to
+ call resetlocation ;hotel after kill
+ mov al,10
+ call setlocation
+ mov destpos,10
+ ret
+notinalley: cmp reallocation,24
+ jnz notinedens
+ cmp generaldead,1
+ jnz edenspart2
+ inc generaldead
+ mov al,44
+ call placesetobject
+ mov al,18
+ call placesetobject
+ mov al,93
+ call placesetobject
+ mov al,92
+ call removesetobject
+ mov al,55
+ call removesetobject
+ mov al,75
+ call removesetobject
+ mov al,84
+ call removesetobject
+ mov al,85
+ call removesetobject
+ ret
+edenspart2: cmp sartaindead,1
+ jnz notedens2
+ mov al,44
+ call removesetobject
+ mov al,93
+ call removesetobject
+ mov al,55
+ call placesetobject
+ inc sartaindead
+notedens2: ret
+notinedens: cmp reallocation,25
+ jnz notonsartroof
+ mov newsitem,3
+ mov al,6
+ call resetlocation ;turn off Sartain Industries
+ mov al,11
+ call setlocation ;turn on carpark for later
+ mov destpos,11
+ ret
+notonsartroof: cmp reallocation,2
+ jnz notinlouiss
+ cmp rockstardead,0
+ jz notinlouiss
+ mov al,23
+ call placesetobject
+notinlouiss: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+;--------------------------------------------------------- Timed text stuff ----
+
+
+
+Getundertimed proc near
+
+ mov al,timedy
+ if foreign
+ sub al,3
+ endif
+ mov ah,0
+ mov bx,ax
+ mov al,timedx
+ mov ah,0
+ mov di,ax
+ mov ch,undertimedysize
+ mov cl,240
+ mov ds,buffers
+ mov si,undertimedtext
+ call multiget
+ ret
+
+ endp
+
+
+
+
+Putundertimed proc near
+
+ mov al,timedy
+ if foreign
+ sub al,3
+ endif
+ mov ah,0
+ mov bx,ax
+ mov al,timedx
+ mov ah,0
+ mov di,ax
+ mov ch,undertimedysize
+ mov cl,240
+ mov ds,buffers
+ mov si,undertimedtext
+ call multiput
+ ret
+
+ endp
+
+
+
+
+
+
+Dumptimedtext proc near
+
+ cmp needtodumptimed,1
+ jnz nodumptimed
+ mov al,timedy
+ if foreign
+ sub al,3
+ endif
+ mov ah,0
+ mov bx,ax
+ mov al,timedx
+ mov ah,0
+ mov di,ax
+ mov cl,240
+ mov ch,undertimedysize
+ call multidump
+ mov needtodumptimed,0
+nodumptimed: ret
+
+ endp
+
+
+
+
+
+
+
+
+Setuptimeduse proc near
+
+ cmp timecount,0
+ jnz cantsetup
+
+ mov timedy,bh
+ mov timedx,bl
+ mov counttotimed,cx
+ add dx,cx
+ mov timecount,dx
+ mov bl,al
+ mov bh,0
+ add bx,bx
+ mov es,puzzletext
+ mov cx,textstart
+ mov ax,[es:bx]
+ add ax,cx
+ mov bx,ax
+ mov timedseg,es
+ mov timedoffset,bx
+cantsetup: ret
+
+ endp
+
+
+
+Setuptimedtemp proc near
+
+ if cd
+ cmp ah,0
+ jz notloadspeech3
+ mov dl,"T"
+ mov dh,ah
+ mov cl,"T"
+ mov ah,0
+ call loadspeech
+ cmp speechloaded,1
+ jnz notloadspeech3
+ mov al,50+12
+ call playchannel1
+ ret
+notloadspeech3:
+ endif
+ cmp timecount,0
+ jnz cantsetup2
+ mov timedy,bh
+ mov timedx,bl
+ mov counttotimed,cx
+ add dx,cx
+ mov timecount,dx
+ mov bl,al
+ mov bh,0
+ add bx,bx
+ mov es,textfile1
+ mov cx,textstart
+ mov ax,[es:bx]
+ add ax,cx
+ mov bx,ax
+ mov timedseg,es
+ mov timedoffset,bx
+cantsetup2: ret
+
+ endp
+
+
+
+
+
+
+
+Usetimedtext proc near
+
+ cmp timecount,0
+ jz notext
+ dec timecount
+ cmp timecount,0
+ jz deltimedtext
+ mov ax,timecount
+ cmp ax,counttotimed
+ jz firsttimed
+ jnc notext
+ jmp notfirsttimed
+firsttimed: call getundertimed
+notfirsttimed: mov bl,timedy
+ mov bh,0
+ mov al,timedx
+ mov ah,0
+ mov di,ax
+ mov es,timedseg
+ mov si,timedoffset
+ mov dl,237
+ mov ah,0
+ call printdirect
+ mov needtodumptimed,1
+notext: ret
+
+deltimedtext: call putundertimed
+ mov needtodumptimed,1
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+Edenscdplayer proc near
+
+ call showfirstuse
+ mov watchingtime,18*2
+ mov reeltowatch,25
+ mov endwatchreel,42
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ ret
+
+ endp
+
+
+
+
+
+Usewall proc near
+
+ call showfirstuse
+ cmp manspath,3
+ jz gobackover
+ mov watchingtime,30*2
+ mov reeltowatch,2
+ mov endwatchreel,31
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ mov al,3
+ call turnpathon
+ mov al,4
+ call turnpathon
+ mov al,0
+ call turnpathoff
+ mov al,1
+ call turnpathoff
+ mov al,2
+ call turnpathoff
+ mov al,5
+ call turnpathoff
+ mov manspath,3
+ mov finaldest,3
+ call findxyfrompath
+ mov resetmanxy,1
+ call switchryanoff
+ ret
+gobackover: mov watchingtime,30*2
+ mov reeltowatch,34
+ mov endwatchreel,60
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ mov al,3
+ call turnpathoff
+ mov al,4
+ call turnpathoff
+ mov al,0
+ call turnpathon
+ mov al,1
+ call turnpathon
+ mov al,2
+ call turnpathon
+ mov al,5
+ call turnpathon
+ mov manspath,5
+ mov finaldest,5
+ call findxyfrompath
+ mov resetmanxy,1
+ call switchryanoff
+ ret
+
+ endp
+
+
+
+
+
+
+
+Usechurchgate proc near
+
+ cmp withobject,255
+ jnz gatewith
+ call withwhat
+ ret
+gatewith: mov al,withobject
+ mov ah,withtype
+ mov cl,"C"
+ mov ch,"U"
+ mov dl,"T"
+ mov dh,"T"
+ call compare
+ jz cutgate
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+
+cutgate: call showfirstuse
+ mov watchingtime,64*2
+ mov reeltowatch,4
+ mov endwatchreel,70
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ inc progresspoints
+ mov al,3
+ call turnpathon
+ cmp aidedead,0
+ jz notopenchurch
+ mov al,2
+ call turnpathon
+notopenchurch: ret
+
+ endp
+
+
+
+
+
+Usegun proc near
+
+ cmp objecttype,4
+ jz istakengun
+ call showseconduse
+ call putbackobstuff
+ ret
+istakengun: cmp reallocation,22
+ jnz notinpoolroom
+ mov cx,300
+ mov al,34
+ call showpuztext
+ mov lastweapon,1
+ mov combatcount,39
+ mov getback,1
+ inc progresspoints
+ ret
+notinpoolroom: cmp reallocation,25
+ jnz nothelicopter
+ mov cx,300
+ mov al,34
+ call showpuztext
+ mov lastweapon,1
+ mov combatcount,19
+ mov getback,1
+ mov dreamnumber,2
+ mov roomafterdream,38
+ mov sartaindead,1
+ inc progresspoints
+ ret
+nothelicopter: cmp reallocation,27
+ jnz notinrockroom
+ mov cx,300
+ mov al,46
+ call showpuztext
+ mov pointermode,2 ;0
+ mov rockstardead,1
+ mov lastweapon,1
+ mov newsitem,1
+ mov getback,1
+ mov roomafterdream,32 ; skip
+ mov dreamnumber,0
+ inc progresspoints
+ ret
+notinrockroom: cmp reallocation,8
+ jnz notbystudio
+ cmp mapx,22
+ jnz notbystudio
+ cmp mapy,40
+ jnz notbystudio
+ mov al,92
+ call issetobonmap
+ jz notbystudio
+ cmp manspath,9
+ jz notbystudio
+ mov destination,9
+ mov finaldest,9
+ call autosetwalk
+ mov lastweapon,1
+ mov getback,1
+ inc progresspoints
+ ret
+notbystudio: cmp reallocation,6
+ jnz notsarters
+ cmp mapx,11
+ jnz notsarters
+ cmp mapy,20
+ jnz notsarters
+ mov al,5
+ call issetobonmap
+ jnz notsarters
+ mov destination,1
+ mov finaldest,1
+ call autosetwalk
+ mov al,5
+ call removesetobject
+ mov al,6
+ call placesetobject
+ mov al,1
+ mov ah,roomnum
+ dec ah
+ call turnanypathon
+ mov liftflag,1
+ mov watchingtime,40*2
+ mov reeltowatch,4
+ mov endwatchreel,43
+ mov watchspeed,1
+ mov speedcount,1
+ mov getback,1
+ inc progresspoints
+ ret
+notsarters: cmp reallocation,29
+ jnz notaide
+ mov getback,1
+ mov al,13
+ call resetlocation
+ mov al,12
+ call setlocation
+ mov destpos,12
+ mov destination,2
+ mov finaldest,2
+ call autosetwalk
+ mov watchingtime,164*2
+ mov reeltowatch,3
+ mov endwatchreel,164
+ mov watchspeed,1
+ mov speedcount,1
+ mov aidedead,1
+ mov dreamnumber,3
+ mov roomafterdream,33
+ inc progresspoints
+ ret
+notaide: cmp reallocation,23
+ jnz notwithboss
+ cmp mapx,0
+ jnz notwithboss
+ cmp mapy,50
+ jnz notwithboss
+ cmp manspath,5
+ jz pathokboss
+ mov destination,5
+ mov finaldest,5
+ call autosetwalk
+pathokboss: mov lastweapon,1
+ mov getback,1
+ ret
+notwithboss: cmp reallocation,8
+ jnz nottvsoldier
+ cmp mapx,11
+ jnz nottvsoldier
+ cmp mapy,10
+ jnz nottvsoldier
+ cmp manspath,2
+ jz pathoktv
+ mov destination,2
+ mov finaldest,2
+ call autosetwalk
+pathoktv: mov lastweapon,1
+ mov getback,1
+ ret
+nottvsoldier: call showfirstuse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+
+
+Useshield proc near
+
+ cmp reallocation,20
+ jnz notinsartroom
+ cmp combatcount,0
+ jz notinsartroom
+ mov lastweapon,3
+ call showseconduse
+ mov getback,1
+ inc progresspoints
+ call removeobfrominv
+ ret
+notinsartroom: call showfirstuse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+
+Usebuttona proc near
+
+ mov al,95
+ call issetobonmap
+ jz donethisbit
+
+ call showfirstuse
+ mov al,0
+ mov ah,roomnum
+ dec ah
+ call turnanypathon
+ mov al,9
+ call removesetobject
+ mov al,95
+ call placesetobject
+
+ mov watchingtime,15*2
+ mov reeltowatch,71
+ mov endwatchreel,85
+ mov watchspeed,1
+ mov speedcount,1
+
+ mov getback,1
+ inc progresspoints
+ ret
+donethisbit: call showseconduse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+Useplate proc near
+
+ cmp withobject,255
+ jnz platewith
+ call withwhat
+ ret
+platewith: mov al,withobject
+ mov ah,withtype
+ mov cl,"S"
+ mov ch,"C"
+ mov dl,"R"
+ mov dh,"W"
+ call compare
+ jz unscrewplate
+ mov al,withobject
+ mov ah,withtype
+ mov cl,"K"
+ mov ch,"N"
+ mov dl,"F"
+ mov dh,"E"
+ call compare
+ jz triedknife
+ mov cx,300
+ mov al,14
+ call showpuztext
+ call putbackobstuff
+ ret
+
+unscrewplate: mov al,20
+ call playchannel1
+ call showfirstuse
+ mov al,28
+ call placesetobject
+ mov al,24
+ call placesetobject
+ mov al,25
+ call removesetobject
+ mov al,0
+ call placefreeobject
+ inc progresspoints
+ mov getback,1
+ ret
+
+triedknife: mov cx,300
+ mov al,54
+ call showpuztext
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+Usewinch proc near
+
+ mov al,40
+ mov ah,1
+ call checkinside
+ cmp cl,numexobjects
+ jz nowinch
+ mov al,cl
+ mov ah,4
+ mov cl,"F"
+ mov ch,"U"
+ mov dl,"S"
+ mov dh,"E"
+ call compare
+ jnz nowinch
+
+ mov watchingtime,217*2
+ mov reeltowatch,0
+ mov endwatchreel,217
+ mov watchspeed,1
+ mov speedcount,1
+ mov destpos,1
+ mov newlocation,45
+ mov dreamnumber,1
+ mov roomafterdream,44
+ mov generaldead,1
+ mov newsitem,2
+ mov getback,1
+ inc progresspoints
+ ret
+
+nowinch: call showfirstuse
+ call putbackobstuff
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/vars.asm b/devtools/tasmrecover/dreamweb/vars.asm
index b72f180d74..e38470a7de 100644
--- a/devtools/tasmrecover/dreamweb/vars.asm
+++ b/devtools/tasmrecover/dreamweb/vars.asm
@@ -1,564 +1,564 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-;---------------------------------------------------Equates and definitions----
-
-Inputport equ 63h
-Mapwidth equ 66 ;132/2
-Maplength equ 60 ;6/2
-Tablesize equ 32 ;size of each entry in spritetable
-Itempicsize equ 44 ;size of inventory slots
-Opsy equ 52
-Opsx equ 60
-Inventx equ 80
-Inventy equ 58
-Zoomx equ 8
-Zoomy equ 132
-Keypadx equ 36+112
-Keypady equ 72
-Diaryx equ 68+24
-Diaryy equ 48+12
-Symbolx equ 64
-Symboly equ 56
-Menux equ 80+40
-Menuy equ 60
-
- if foreign
-Undertextsizex equ 228
-Undertextsizey equ 13
-Undertimedysize equ 30
- else
-Undertextsizex equ 180
-Undertextsizey equ 10
-Undertimedysize equ 24
- endif
-
-Numchanges equ 250
-
-Textunder equ 0 ;offsets for items in buffer segment
-Openinvlist equ textunder+(undertextsizex*undertextsizey)
-Ryaninvlist equ openinvlist+32
-Pointerback equ ryaninvlist+60
-Mapflags equ pointerback+(32*32)
-Startpal equ mapflags+(11*10*3)
-Endpal equ startpal+768
-Maingamepal equ endpal+768
-Spritetable equ maingamepal+768
-Setlist equ spritetable+(32*tablesize)
-Freelist equ setlist+(128*5)
-Exlist equ freelist+(80*5)
-Peoplelist equ exlist+(100*5)
-Zoomspace equ peoplelist+(12*5)
-Printedlist equ zoomspace+(46*40)
-Listofchanges equ printedlist+(5*80)
-Undertimedtext equ listofchanges+(numchanges*4)
-Rainlist equ undertimedtext+(256*undertimedysize)
-Initialreelrouts equ rainlist+(6*64)
-Initialvars equ initialreelrouts+lenofreelrouts
-Lengthofbuffer equ initialvars+lengthofvars
-
-Flags equ 0 ;offsets of items in backdrop segment
-Blocks equ flags+192
-Map equ 0
-Lengthofmap equ map+(mapwidth*maplength)
-
-Intextdat equ 0
-Intext equ intextdat+(38*2)
-Blocktextdat equ 0
-Blocktext equ blocktextdat+(98*2)
-Settextdat equ 0
-Settext equ settextdat+(130*2)
-Freetextdat equ 0
-Freetext equ freetextdat+(82*2)
-
-Numexobjects equ 114
-Exframeslen equ 30000
-Extextlen equ 18000
-
-Exframedata equ 0
-Exframes equ exframedata+2080
-Exdata equ exframes+exframeslen
-Extextdat equ exdata+(16*numexobjects)
-Extext equ extextdat+((numexobjects+2)*2)
-Lengthofextra equ extext+extextlen
-
-Framedata equ 0
-Frames equ framedata+2080
-
-Frframedata equ 0
-Frframes equ frframedata+2080
-
-Personframes equ 0
-Persontxtdat equ personframes+24
-Persontext equ persontxtdat+(1026*2)
-
-Pathdata equ 0
-Reellist equ pathdata+(36*144)
-
-Lenofmapstore equ 22*8*20*8
-Maplen equ mapwidth*maplength
-Freedatlen equ 16*80
-Setdatlen equ 64*128
-Textstart equ 66*2
-
-;-----------------------------------------------------------------Variables----
-
-
-startvars db 0
-progresspoints db 0
-watchon db 0
-shadeson db 0
-secondcount db 0
-minutecount db 30
-hourcount db 19
-zoomon db 1
-location db 0
-expos db 0
-exframepos dw 0
-extextpos dw 0
-card1money dw 0
-listpos dw 0
-ryanpage db 0
-
-
-watchingtime dw 0
-reeltowatch dw -1 ;reel plays from here in mode 0
-endwatchreel dw 0 ;and stops here. Mode set to 1
-speedcount db 0
-watchspeed db 0
-reeltohold dw -1 ;if mode is 1 hold on this reel
-endofholdreel dw -1 ;if mode is 2 then play to end of
-watchmode db -1 ;hold reel. Set mode back to -1
-destafterhold db 0 ;set walking destination.
-
-newsitem db 0
-
-liftflag db 0
-liftpath db 0
-lockstatus db 1
-doorpath db 0
-counttoopen db 0
-counttoclose db 0
-rockstardead db 0
-generaldead db 0
-sartaindead db 0
-aidedead db 0
-beenmugged db 0
-
-gunpassflag db 0
-canmovealtar db 0
-talkedtoattendant db 0
-talkedtosparky db 0
-talkedtoboss db 0
-talkedtorecep db 0
-cardpassflag db 0
-madmanflag db 0
-keeperflag db 0
-lasttrigger db 0
-mandead db 0
-seed db 1,2,3
-needtotravel db 0
-throughdoor db 0
-newobs db 0
-ryanon db 255
-combatcount db 0
-lastweapon db -1
-
-dreamnumber db 0
-roomafterdream db 0
-
-shakecounter db 48
-
-lengthofvars equ $-startvars
-
-
-speechcount db 0
-
-charshift dw 0
-kerning db 0
-
-brightness db 0
-
-roomloaded db 0
-
-didzoom db 0
-
-linespacing dw 10
-textaddressx dw 13
-textaddressy dw 182 ;address on screen for text
-textlen db 0
-lastxpos dw 0
-
-icontop dw 0
-iconleft dw 0
-itemframe db 0
-itemtotran db 0
-roomad dw 0
-oldsubject dw 0
-
-withobject db 0
-withtype db 0
-
-lookcounter dw 0
-
-command db 0
-commandtype db 0
-oldcommandtype db 0
-objecttype db 0
-getback db 0
-invopen db 0
-mainmode db 0
-pickup db 0
-lastinvpos db 0
-examagain db 0
-newtextline db 0
-
-openedob db 0
-openedtype db 0
-
-oldmapadx dw 0
-oldmapady dw 0
-mapadx dw 0
-mapady dw 0
-mapoffsetx dw 104
-mapoffsety dw 38
-
-mapxstart dw 0
-mapystart dw 0
-mapxsize db 0
-mapysize db 0
-
-havedoneobs db 0
-manisoffscreen db 0
-rainspace db 0
-
-facing db 0
-leavedirection db 0
-turntoface db 0
-turndirection db 0
-
-maintimer dw 0
-introcount db 0
-arrowad dw 0
-currentkey db 0
-oldkey db 0
-useddirection db 0
-currentkey2 db 0
-
-timercount db 0
-oldtimercount db 0
-
-mapx db 0
-mapy db 0
-newscreen db 0
-ryanx db 0
-ryany db 0
-lastflag db 0
-lastflagex db 0
-flagx db 0
-flagy db 0
-
-currentex db 0
-currentfree db 0
-currentframe dw 0
-framesad dw 0
-dataad dw 0
-frsegment dw 0
-objectx dw 0
-objecty dw 0
-offsetx dw 0
-offsety dw 0
-savesize dw 0
-savesource dw 0
-savex db 0
-savey db 0
-currentob db 0
-priority db 0
-
-destpos db 0
-
-reallocation db 0 ;----------;some rooms have more than one
-roomnum db 0 ;place in the Roomdata list, to
- ;account for different start points
-nowinnewroom db 0 ;this variable holds the rooms
-resetmanxy db 0 ;real value - ie:which file it's in
-newlocation db -1 ;if set then room is loaded at end of watch mode, or straight away if not in watch mode
-autolocation db -1
-mustload db 0
-answered db 0
-saidno db 0
-
-doorcheck1 db 0
-doorcheck2 db 0
-doorcheck3 db 0
-doorcheck4 db 0
-
-mousex dw 0
-mousey dw 0
-mousebutton dw 0
-mousebutton1 dw 0
-mousebutton2 dw 0
-mousebutton3 dw 0
-mousebutton4 dw 0
-oldbutton dw 0
-oldx dw 0
-oldy dw 0
-lastbutton dw 0
-oldpointerx dw 0
-oldpointery dw 0
-delherex dw 0
-delherey dw 0
-pointerxs db 32
-pointerys db 32
-delxs db 0
-delys db 0
-pointerframe db 0
-pointerpower db 0
-auxpointerframe db 0
-pointermode db 0
-pointerspeed db 0
-pointercount db 0
-inmaparea db 0
-
-reelpointer dw 0
-slotdata db 0
-thisslot db 0
-slotflags db 0
-takeoff dw 0
-
-talkmode db 0
-talkpos db 0
-character db 0
-persondata dw 0
-talknum db 0
-numberinroom db 0
-
-currentcel db 0
-oldselection db 0
-
-stopwalking db 0
-
-mouseon db 0
-played dw 0
-timer1 db 0
-timer2 db 0
-timer3 db 0
-wholetimer dw 0
-timer1to db 0
-timer2to db 0
-timer3to db 0
-
-watchdump db 0
-
-currentset dw 0
-
-logonum db 0
-oldlogonum db 0
-newlogonum db 0
-netseg dw 0
-netpoint dw 0
-keynum db 0
-cursorstate db 0
-
-pressed db 0
-presspointer dw 0
-graphicpress db 0
-presscount db 0
-keypadax dw 0
-keypadcx dw 0
-lightcount db 0
-folderpage db 0
-diarypage db 0
-menucount db 0
-symboltopx db 0
-symboltopnum db 0
-symboltopdir db 0
-symbolbotx db 0
-symbolbotnum db 0
-symbolbotdir db 0
-
-symboltolight db 0
-symbol1 db 0
-symbol2 db 0
-symbol3 db 0
-symbolnum db 0
-dumpx dw 0
-dumpy dw 0
-
-walkandexam db 0
-walkexamtype db 0
-walkexamnum db 0
-
-cursloc dw 0
-curslocx dw 0
-curslocy dw 0
-curpos dw 0
-monadx dw 0
-monady dw 0
-gotfrom dw 0
-
-monsource dw 0
-numtodo dw 0
-
-timecount dw 0
-counttotimed dw 0
-timedseg dw 0
-timedoffset dw 0
-timedy db 0
-timedx db 0
-needtodumptimed db 0
-
-;recordpos dw 0
-;rechandle dw 0
-handle dw 0
-
-loadingorsave db 0 ;1 if load 2 if save
-currentslot db 0
-cursorpos db 0
-
-colourpos db 0
-fadedirection db 0
-numtofade db 0
-fadecount db 0
-addtogreen db 0
-addtored db 0
-addtoblue db 0
-
-
-lastsoundreel dw 0
-
-soundbuffer dw 0
-soundbufferad dw 0
-soundbufferpage db 0
-soundtimes db 0
-needsoundbuff db 0
-
-oldint9seg dw -1
-oldint9add dw -1
-oldint8seg dw -1
-oldint8add dw -1
-oldsoundintseg dw 0
-oldsoundintadd dw 0
-soundbaseadd dw 0
-dsp_status dw 0
-dsp_write dw 0
-dmaaddress db 0
-soundint db 5
-sounddmachannel db 1
-sampleplaying db 255
-testresult db 0
-currentirq db 0
-speechloaded db 0
-speechlength dw 0
-volume db 0
-volumeto db 0
-volumedirection db 0
-volumecount db 0
-
-playblock db 0
-
-wongame db 0
-
-lasthardkey db 0
-bufferin dw 0
-bufferout dw 0
-
-extras dw 0 ;for allocated memory
-workspace dw 0 ;allocated mem for screen buffer
-mapstore dw 0 ;allocated mem for copy of room
-charset1 dw 0 ;allocated mem for normal charset
-tempcharset dw 0 ;monitor char set
-icons1 dw 0 ;allocated mem for on screen stuff
-icons2 dw 0
-buffers dw 0 ;allocated mem for buffers
-mainsprites dw 0 ;allocated mem for Ryan sprites
-backdrop dw 0
-mapdata dw 0
-
-sounddata dw 0
-sounddata2 dw 0
-
-recordspace dw 0
-
-freedat dw 0
-setdat dw 0
-
-reel1 dw -1
-reel2 dw -1
-reel3 dw -1
-roomdesc dw -1
-freedesc dw -1
-setdesc dw -1
-blockdesc dw -1
-setframes dw -1
-freeframes dw -1
-people dw -1
-reels dw -1
-commandtext dw -1
-puzzletext dw -1
-traveltext dw -1
-tempgraphics dw -1
-tempgraphics2 dw -1
-tempgraphics3 dw -1
-tempsprites dw -1
-
-textfile1 dw -1
-textfile2 dw -1
-textfile3 dw -1
-
-blinkframe db 23
-blinkcount db 0
-
-
-reasseschanges db 0 ; if it's a 1 then obname will assume that
-pointerspath db 0 ;the command has changed.
-manspath db 0 ;ie. from "walk to" to "Examine"
-pointerfirstpath db 0
-finaldest db 0
-destination db 0
-linestartx dw 0
-linestarty dw 0
-lineendx dw 0
-lineendy dw 0
-increment1 dw 0
-increment2 dw 0
-lineroutine db 0
-linepointer db 0
-linedirection db 0
-linelength db 0
-
-liftsoundcount db 0
-
-emmhandle dw 0
-emmpageframe dw 0
-emmhardwarepage db 0
-
-ch0emmpage dw 0
-ch0offset dw 0
-ch0blockstocopy dw 0
-
-ch0playing db 0
-ch0repeat db 0
-ch0oldemmpage dw 0
-ch0oldoffset dw 0
-ch0oldblockstocopy dw 0
-
-ch1playing db 255
-ch1emmpage dw 0
-ch1offset dw 0
-ch1blockstocopy dw 0
-ch1blocksplayed dw 0
-
-soundbufferwrite dw 0
-
-soundemmpage dw 0
-speechemmpage dw 0
-
-currentsample db -1
-roomssample db 0
-
-gameerror db 0
-
-howmuchalloc dw 0
-
+;---------------------------------------------------Equates and definitions----
+
+Inputport equ 63h
+Mapwidth equ 66 ;132/2
+Maplength equ 60 ;6/2
+Tablesize equ 32 ;size of each entry in spritetable
+Itempicsize equ 44 ;size of inventory slots
+Opsy equ 52
+Opsx equ 60
+Inventx equ 80
+Inventy equ 58
+Zoomx equ 8
+Zoomy equ 132
+Keypadx equ 36+112
+Keypady equ 72
+Diaryx equ 68+24
+Diaryy equ 48+12
+Symbolx equ 64
+Symboly equ 56
+Menux equ 80+40
+Menuy equ 60
+
+ if foreign
+Undertextsizex equ 228
+Undertextsizey equ 13
+Undertimedysize equ 30
+ else
+Undertextsizex equ 180
+Undertextsizey equ 10
+Undertimedysize equ 24
+ endif
+
+Numchanges equ 250
+
+Textunder equ 0 ;offsets for items in buffer segment
+Openinvlist equ textunder+(undertextsizex*undertextsizey)
+Ryaninvlist equ openinvlist+32
+Pointerback equ ryaninvlist+60
+Mapflags equ pointerback+(32*32)
+Startpal equ mapflags+(11*10*3)
+Endpal equ startpal+768
+Maingamepal equ endpal+768
+Spritetable equ maingamepal+768
+Setlist equ spritetable+(32*tablesize)
+Freelist equ setlist+(128*5)
+Exlist equ freelist+(80*5)
+Peoplelist equ exlist+(100*5)
+Zoomspace equ peoplelist+(12*5)
+Printedlist equ zoomspace+(46*40)
+Listofchanges equ printedlist+(5*80)
+Undertimedtext equ listofchanges+(numchanges*4)
+Rainlist equ undertimedtext+(256*undertimedysize)
+Initialreelrouts equ rainlist+(6*64)
+Initialvars equ initialreelrouts+lenofreelrouts
+Lengthofbuffer equ initialvars+lengthofvars
+
+Flags equ 0 ;offsets of items in backdrop segment
+Blocks equ flags+192
+Map equ 0
+Lengthofmap equ map+(mapwidth*maplength)
+
+Intextdat equ 0
+Intext equ intextdat+(38*2)
+Blocktextdat equ 0
+Blocktext equ blocktextdat+(98*2)
+Settextdat equ 0
+Settext equ settextdat+(130*2)
+Freetextdat equ 0
+Freetext equ freetextdat+(82*2)
+
+Numexobjects equ 114
+Exframeslen equ 30000
+Extextlen equ 18000
+
+Exframedata equ 0
+Exframes equ exframedata+2080
+Exdata equ exframes+exframeslen
+Extextdat equ exdata+(16*numexobjects)
+Extext equ extextdat+((numexobjects+2)*2)
+Lengthofextra equ extext+extextlen
+
+Framedata equ 0
+Frames equ framedata+2080
+
+Frframedata equ 0
+Frframes equ frframedata+2080
+
+Personframes equ 0
+Persontxtdat equ personframes+24
+Persontext equ persontxtdat+(1026*2)
+
+Pathdata equ 0
+Reellist equ pathdata+(36*144)
+
+Lenofmapstore equ 22*8*20*8
+Maplen equ mapwidth*maplength
+Freedatlen equ 16*80
+Setdatlen equ 64*128
+Textstart equ 66*2
+
+;-----------------------------------------------------------------Variables----
+
+
+startvars db 0
+progresspoints db 0
+watchon db 0
+shadeson db 0
+secondcount db 0
+minutecount db 30
+hourcount db 19
+zoomon db 1
+location db 0
+expos db 0
+exframepos dw 0
+extextpos dw 0
+card1money dw 0
+listpos dw 0
+ryanpage db 0
+
+
+watchingtime dw 0
+reeltowatch dw -1 ;reel plays from here in mode 0
+endwatchreel dw 0 ;and stops here. Mode set to 1
+speedcount db 0
+watchspeed db 0
+reeltohold dw -1 ;if mode is 1 hold on this reel
+endofholdreel dw -1 ;if mode is 2 then play to end of
+watchmode db -1 ;hold reel. Set mode back to -1
+destafterhold db 0 ;set walking destination.
+
+newsitem db 0
+
+liftflag db 0
+liftpath db 0
+lockstatus db 1
+doorpath db 0
+counttoopen db 0
+counttoclose db 0
+rockstardead db 0
+generaldead db 0
+sartaindead db 0
+aidedead db 0
+beenmugged db 0
+
+gunpassflag db 0
+canmovealtar db 0
+talkedtoattendant db 0
+talkedtosparky db 0
+talkedtoboss db 0
+talkedtorecep db 0
+cardpassflag db 0
+madmanflag db 0
+keeperflag db 0
+lasttrigger db 0
+mandead db 0
+seed db 1,2,3
+needtotravel db 0
+throughdoor db 0
+newobs db 0
+ryanon db 255
+combatcount db 0
+lastweapon db -1
+
+dreamnumber db 0
+roomafterdream db 0
+
+shakecounter db 48
+
+lengthofvars equ $-startvars
+
+
+speechcount db 0
+
+charshift dw 0
+kerning db 0
+
+brightness db 0
+
+roomloaded db 0
+
+didzoom db 0
+
+linespacing dw 10
+textaddressx dw 13
+textaddressy dw 182 ;address on screen for text
+textlen db 0
+lastxpos dw 0
+
+icontop dw 0
+iconleft dw 0
+itemframe db 0
+itemtotran db 0
+roomad dw 0
+oldsubject dw 0
+
+withobject db 0
+withtype db 0
+
+lookcounter dw 0
+
+command db 0
+commandtype db 0
+oldcommandtype db 0
+objecttype db 0
+getback db 0
+invopen db 0
+mainmode db 0
+pickup db 0
+lastinvpos db 0
+examagain db 0
+newtextline db 0
+
+openedob db 0
+openedtype db 0
+
+oldmapadx dw 0
+oldmapady dw 0
+mapadx dw 0
+mapady dw 0
+mapoffsetx dw 104
+mapoffsety dw 38
+
+mapxstart dw 0
+mapystart dw 0
+mapxsize db 0
+mapysize db 0
+
+havedoneobs db 0
+manisoffscreen db 0
+rainspace db 0
+
+facing db 0
+leavedirection db 0
+turntoface db 0
+turndirection db 0
+
+maintimer dw 0
+introcount db 0
+arrowad dw 0
+currentkey db 0
+oldkey db 0
+useddirection db 0
+currentkey2 db 0
+
+timercount db 0
+oldtimercount db 0
+
+mapx db 0
+mapy db 0
+newscreen db 0
+ryanx db 0
+ryany db 0
+lastflag db 0
+lastflagex db 0
+flagx db 0
+flagy db 0
+
+currentex db 0
+currentfree db 0
+currentframe dw 0
+framesad dw 0
+dataad dw 0
+frsegment dw 0
+objectx dw 0
+objecty dw 0
+offsetx dw 0
+offsety dw 0
+savesize dw 0
+savesource dw 0
+savex db 0
+savey db 0
+currentob db 0
+priority db 0
+
+destpos db 0
+
+reallocation db 0 ;----------;some rooms have more than one
+roomnum db 0 ;place in the Roomdata list, to
+ ;account for different start points
+nowinnewroom db 0 ;this variable holds the rooms
+resetmanxy db 0 ;real value - ie:which file it's in
+newlocation db -1 ;if set then room is loaded at end of watch mode, or straight away if not in watch mode
+autolocation db -1
+mustload db 0
+answered db 0
+saidno db 0
+
+doorcheck1 db 0
+doorcheck2 db 0
+doorcheck3 db 0
+doorcheck4 db 0
+
+mousex dw 0
+mousey dw 0
+mousebutton dw 0
+mousebutton1 dw 0
+mousebutton2 dw 0
+mousebutton3 dw 0
+mousebutton4 dw 0
+oldbutton dw 0
+oldx dw 0
+oldy dw 0
+lastbutton dw 0
+oldpointerx dw 0
+oldpointery dw 0
+delherex dw 0
+delherey dw 0
+pointerxs db 32
+pointerys db 32
+delxs db 0
+delys db 0
+pointerframe db 0
+pointerpower db 0
+auxpointerframe db 0
+pointermode db 0
+pointerspeed db 0
+pointercount db 0
+inmaparea db 0
+
+reelpointer dw 0
+slotdata db 0
+thisslot db 0
+slotflags db 0
+takeoff dw 0
+
+talkmode db 0
+talkpos db 0
+character db 0
+persondata dw 0
+talknum db 0
+numberinroom db 0
+
+currentcel db 0
+oldselection db 0
+
+stopwalking db 0
+
+mouseon db 0
+played dw 0
+timer1 db 0
+timer2 db 0
+timer3 db 0
+wholetimer dw 0
+timer1to db 0
+timer2to db 0
+timer3to db 0
+
+watchdump db 0
+
+currentset dw 0
+
+logonum db 0
+oldlogonum db 0
+newlogonum db 0
+netseg dw 0
+netpoint dw 0
+keynum db 0
+cursorstate db 0
+
+pressed db 0
+presspointer dw 0
+graphicpress db 0
+presscount db 0
+keypadax dw 0
+keypadcx dw 0
+lightcount db 0
+folderpage db 0
+diarypage db 0
+menucount db 0
+symboltopx db 0
+symboltopnum db 0
+symboltopdir db 0
+symbolbotx db 0
+symbolbotnum db 0
+symbolbotdir db 0
+
+symboltolight db 0
+symbol1 db 0
+symbol2 db 0
+symbol3 db 0
+symbolnum db 0
+dumpx dw 0
+dumpy dw 0
+
+walkandexam db 0
+walkexamtype db 0
+walkexamnum db 0
+
+cursloc dw 0
+curslocx dw 0
+curslocy dw 0
+curpos dw 0
+monadx dw 0
+monady dw 0
+gotfrom dw 0
+
+monsource dw 0
+numtodo dw 0
+
+timecount dw 0
+counttotimed dw 0
+timedseg dw 0
+timedoffset dw 0
+timedy db 0
+timedx db 0
+needtodumptimed db 0
+
+;recordpos dw 0
+;rechandle dw 0
+handle dw 0
+
+loadingorsave db 0 ;1 if load 2 if save
+currentslot db 0
+cursorpos db 0
+
+colourpos db 0
+fadedirection db 0
+numtofade db 0
+fadecount db 0
+addtogreen db 0
+addtored db 0
+addtoblue db 0
+
+
+lastsoundreel dw 0
+
+soundbuffer dw 0
+soundbufferad dw 0
+soundbufferpage db 0
+soundtimes db 0
+needsoundbuff db 0
+
+oldint9seg dw -1
+oldint9add dw -1
+oldint8seg dw -1
+oldint8add dw -1
+oldsoundintseg dw 0
+oldsoundintadd dw 0
+soundbaseadd dw 0
+dsp_status dw 0
+dsp_write dw 0
+dmaaddress db 0
+soundint db 5
+sounddmachannel db 1
+sampleplaying db 255
+testresult db 0
+currentirq db 0
+speechloaded db 0
+speechlength dw 0
+volume db 0
+volumeto db 0
+volumedirection db 0
+volumecount db 0
+
+playblock db 0
+
+wongame db 0
+
+lasthardkey db 0
+bufferin dw 0
+bufferout dw 0
+
+extras dw 0 ;for allocated memory
+workspace dw 0 ;allocated mem for screen buffer
+mapstore dw 0 ;allocated mem for copy of room
+charset1 dw 0 ;allocated mem for normal charset
+tempcharset dw 0 ;monitor char set
+icons1 dw 0 ;allocated mem for on screen stuff
+icons2 dw 0
+buffers dw 0 ;allocated mem for buffers
+mainsprites dw 0 ;allocated mem for Ryan sprites
+backdrop dw 0
+mapdata dw 0
+
+sounddata dw 0
+sounddata2 dw 0
+
+recordspace dw 0
+
+freedat dw 0
+setdat dw 0
+
+reel1 dw -1
+reel2 dw -1
+reel3 dw -1
+roomdesc dw -1
+freedesc dw -1
+setdesc dw -1
+blockdesc dw -1
+setframes dw -1
+freeframes dw -1
+people dw -1
+reels dw -1
+commandtext dw -1
+puzzletext dw -1
+traveltext dw -1
+tempgraphics dw -1
+tempgraphics2 dw -1
+tempgraphics3 dw -1
+tempsprites dw -1
+
+textfile1 dw -1
+textfile2 dw -1
+textfile3 dw -1
+
+blinkframe db 23
+blinkcount db 0
+
+
+reasseschanges db 0 ; if it's a 1 then obname will assume that
+pointerspath db 0 ;the command has changed.
+manspath db 0 ;ie. from "walk to" to "Examine"
+pointerfirstpath db 0
+finaldest db 0
+destination db 0
+linestartx dw 0
+linestarty dw 0
+lineendx dw 0
+lineendy dw 0
+increment1 dw 0
+increment2 dw 0
+lineroutine db 0
+linepointer db 0
+linedirection db 0
+linelength db 0
+
+liftsoundcount db 0
+
+emmhandle dw 0
+emmpageframe dw 0
+emmhardwarepage db 0
+
+ch0emmpage dw 0
+ch0offset dw 0
+ch0blockstocopy dw 0
+
+ch0playing db 0
+ch0repeat db 0
+ch0oldemmpage dw 0
+ch0oldoffset dw 0
+ch0oldblockstocopy dw 0
+
+ch1playing db 255
+ch1emmpage dw 0
+ch1offset dw 0
+ch1blockstocopy dw 0
+ch1blocksplayed dw 0
+
+soundbufferwrite dw 0
+
+soundemmpage dw 0
+speechemmpage dw 0
+
+currentsample db -1
+roomssample db 0
+
+gameerror db 0
+
+howmuchalloc dw 0
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/vgafades.asm b/devtools/tasmrecover/dreamweb/vgafades.asm
index e4a5b97c45..26874a428f 100644
--- a/devtools/tasmrecover/dreamweb/vgafades.asm
+++ b/devtools/tasmrecover/dreamweb/vgafades.asm
@@ -1,867 +1,867 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-Fadedos proc near
-
- call vsync
- mov es,buffers
- mov di,startpal
- mov al,0
- mov dx,3c7h
- out dx,al
- mov dx,3c9h
- mov cx,768/4
-dos1: in al,dx
- stosb
- loop dos1
-
- mov cx,64
-fadedosloop: push cx
-
- mov ds,buffers
- mov si,startpal
- mov cx,768
-dos3: lodsb
- cmp al,0
- jz nodown
- dec al
-nodown: mov [si-1],al
- loop dos3
-
- call vsync
- mov ds,buffers
- mov si,startpal
- mov al,0
- mov dx,3c8h
- out dx,al
- inc dx
- mov cx,768/4
-dos2: lodsb
- out dx,al
- loop dos2
-
- pop cx
- loop fadedosloop
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Dofade proc near
-
- cmp fadedirection,0
- jz finishfade
- mov cl,numtofade
- mov ch,0
- mov al,colourpos
- mov ah,0
- mov ds,buffers
- mov si,startpal
- add si,ax
- add si,ax
- add si,ax
- call showgroup
- mov al,numtofade
- add al,colourpos
- mov colourpos,al
- cmp al,0
- jnz finishfade
- call fadecalculation
-finishfade: ret
-
- endp
-
-
-
-
-
-
-
-Clearendpal proc near
-
- mov es,buffers
- mov di,endpal
- mov cx,768
- mov al,0
- rep stosb
- ret
-
- endp
-
-
-
-
-Clearpalette proc near
-
- mov fadedirection,0
- call clearstartpal
- call dumpcurrent
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Fadescreenup proc near
-
- call clearstartpal
- call paltoendpal
- mov fadedirection,1
- mov fadecount,63
- mov colourpos,0
- mov numtofade,128
- ret
-
- endp
-
-
-
-
-Fadetowhite proc near
-
- mov es,buffers
- mov di,endpal
- mov cx,768
- mov al,63
- rep stosb
- mov di,endpal
- mov al,0
- stosb
- stosb
- stosb
- call paltostartpal
- mov fadedirection,1
- mov fadecount,63
- mov colourpos,0
- mov numtofade,128
- ret
-
- endp
-
-
-
-Fadefromwhite proc near
-
- mov es,buffers
- mov di,startpal
- mov cx,768
- mov al,63
- rep stosb
- mov di,startpal
- mov al,0
- stosb
- stosb
- stosb
- call paltoendpal
- mov fadedirection,1
- mov fadecount,63
- mov colourpos,0
- mov numtofade,128
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Fadescreenups proc near
-
- call clearstartpal
- call paltoendpal
- mov fadedirection,1
- mov fadecount,63
- mov colourpos,0
- mov numtofade,64
- ret
-
- endp
-
-
-
-Fadescreendownhalf proc near
-
- call paltostartpal
- call paltoendpal
- mov cx,768
- mov es,buffers
- mov bx,endpal
-halfend: mov al,[es:bx]
- shr al,1
- mov [es:bx],al
- inc bx
- loop halfend
-
- mov ds,buffers
- mov es,buffers
- mov si,startpal+(56*3)
- mov di,endpal+(56*3)
- mov cx,3*5
- rep movsb
- mov si,startpal+(77*3)
- mov di,endpal+(77*3)
- mov cx,3*2
- rep movsb
-
- mov fadedirection,1
- mov fadecount,31
- mov colourpos,0
- mov numtofade,32
- ret
-
- endp
-
-
-Fadescreenuphalf proc near
-
- call endpaltostart
- call paltoendpal
- mov fadedirection,1
- mov fadecount,31
- mov colourpos,0
- mov numtofade,32
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Fadescreendown proc near
-
- call paltostartpal
- call clearendpal
- mov fadedirection,1
- mov fadecount,63
- mov colourpos,0
- mov numtofade,128
- ret
-
- endp
-
-
-
-Fadescreendowns proc near
-
- call paltostartpal
- call clearendpal
- mov fadedirection,1
- mov fadecount,63
- mov colourpos,0
- mov numtofade,64
- ret
-
- endp
-
-
-
-
-
-
-
-
-Clearstartpal proc near
-
- mov es,buffers
- mov di,startpal
- mov cx,256
-wholeloop1: mov ax,0
- stosw
- mov al,0
- stosb
- loop wholeloop1
- ret
-
- endp
-
-
-
-
-
-
-Showgun proc near
-
- mov addtored,0 ;12
- mov addtogreen,0
- mov addtoblue,0
- call paltostartpal
- call paltoendpal
- call greyscalesum
-
-; mov es,buffers
-; mov di,endpal+3
-; mov cx,255
-; mov ax,0
-;reds: mov byte ptr [es:di],63
-; inc di
-; stosw
-; loop reds
-
- mov fadedirection,1
- mov fadecount,63
- mov colourpos,0
- mov numtofade,128
- mov cx,130
- call hangon
- call endpaltostart
- call clearendpal
- mov fadedirection,1
- mov fadecount,63
- mov colourpos,0
- mov numtofade,128
- mov cx,200
- call hangon
- mov roomssample,34
- call loadroomssample
- mov volume,0
- mov dx,offset cs:gungraphic
- call loadintotemp
- call createpanel2
- mov ds,tempgraphics
- mov al,0
- mov ah,0
- mov di,100
- mov bx,4
- call showframe
- mov ds,tempgraphics
- mov al,1
- mov ah,0
- mov di,158
- mov bx,106
- call showframe
- call worktoscreen
- call getridoftemp
- call fadescreenup
- mov cx,160
- call hangon
- mov al,12
- mov ah,0
- call playchannel0
- mov dx,offset cs:endtextname
- call loadtemptext
- call rollendcredits2
- call getridoftemptext
- ret
-
- endp
-
-
-
-
-
-Rollendcredits2 proc near
-
- call rollem
- ret
-
- endp
-
-
-
-
-Rollem proc near
-
- mov cl,160
- mov ch,160
- mov di,25
- mov bx,20
- mov ds,mapstore
- mov si,0
- call multiget
-
- mov es,textfile1
- mov si,49*2
- mov ax,[es:si]
- mov si,ax
- add si,textstart
-
- mov cx,80
-endcredits21: push cx
-
- mov bx,10
- mov cx,linespacing
-endcredits22: push cx si di es bx
-
- call vsync
- mov cl,160
- mov ch,160
- mov di,25
- mov bx,20
- mov ds,mapstore
- mov si,0
- call multiput
- call vsync
- pop bx es di si
- push si di es bx
-
- mov cx,18
-onelot2: push cx
- mov di,25 ;75
- mov dx,161
- mov ax,0
- call printdirect
- add bx,linespacing
- pop cx
- loop onelot2
-
- call vsync
- mov cl,160
- mov ch,160
- mov di,25 ;75
- mov bx,20
- call multidump
-
- pop bx es di si cx
- cmp lasthardkey,1
- jz endearly2
- dec bx
- loop endcredits22
- pop cx
-looknext2: mov al,[es:si]
- inc si
- cmp al,":"
- jz gotnext2
- cmp al,0
- jz gotnext2
- jmp looknext2
-gotnext2: cmp lasthardkey,1
- jz endearly
- loop endcredits21
-
- mov cx,120
- call hangone
- ret
-endearly2: pop cx
-endearly: ret
-
- endp
-
-
-
-
-
-
-
-
-
-Fadecalculation proc near
-
- cmp fadecount,0
- jz nomorefading
- mov bl,fadecount
- mov es,buffers
- mov si,startpal
- mov di,endpal
- mov cx,768
-fadecolloop: mov al,[es:si]
- mov ah,[es:di]
- cmp al,ah
- jz gotthere
- jc lesscolour
- dec byte ptr [es:si]
- jmp gotthere
-lesscolour: cmp bl,ah
- jz withit
- jnc gotthere
-withit: inc byte ptr [es:si]
-gotthere: inc si
- inc di
- loop fadecolloop
- dec fadecount
- ret
-nomorefading: mov fadedirection,0
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Greyscalesum proc near ;converts palette to grey scale
- ;summed using formula:
- mov es,buffers ; .20xred + .59xGreen + .11xBlue
- mov si,maingamepal
- mov di,endpal
- mov cx,256 ;convert 256 colours
-
-greysumloop1: push cx
- mov bx,0
- mov al,[es:si]
- mov ah,0
- mov cx,20
- mul cx
- add bx,ax
- mov al,[es:si+1]
- mov ah,0
- mov cx,59
- mul cx
- add bx,ax
- mov al,[es:si+2]
- mov ah,0
- mov cx,11
- mul cx
- add bx,ax ;bx holds equationx100
-
- mov al,-1 ;divide result by 100
-greysumloop2: inc al
- sub bx,100
- jnc greysumloop2 ;ah holds grey scale number
- mov bl,al
-
- mov al,bl
- mov ah,addtored
- cmp al,0
- ;jz noaddr
- add al,ah
-noaddr: stosb
- mov ah,addtogreen
- mov al,bl
- cmp al,0
- jz noaddg
- add al,ah
-noaddg: stosb ;store result in red, green and
- mov ah,addtoblue
- mov al,bl
- cmp al,0
- jz noaddb
- add al,ah
-noaddb: stosb ;blue portions of palette.
-
- add si,3
- pop cx
- loop greysumloop1
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Showgroup proc near
-
- mov dx,3c8h
- out dx,al
- mov dx,3c9h
-showgroup1: lodsb
- out dx,al
- lodsb
- out dx,al
- lodsb
- out dx,al
- loop showgroup1
- ret
-
- endp
-
-
-
-
-
-Paltostartpal proc near
-
- mov es,buffers
- mov ds,buffers
- mov si,maingamepal
- mov di,startpal
- mov cx,768/2
- rep movsw
- ret
-
- endp
-
-
-
-Endpaltostart proc near
-
- mov es,buffers
- mov ds,buffers
- mov si,endpal
- mov di,startpal
- mov cx,768/2
- rep movsw
- ret
-
- endp
-
-
-Startpaltoend proc near
-
- mov es,buffers
- mov ds,buffers
- mov di,endpal
- mov si,startpal
- mov cx,768/2
- rep movsw
- ret
-
- endp
-
-
-
-
-
-
-
-
-Paltoendpal proc near
-
- mov es,buffers
- mov ds,buffers
- mov di,endpal
- mov si,maingamepal
- mov cx,768/2
- rep movsw
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-
-Allpalette proc near
-
- mov es,buffers
- mov ds,buffers
- mov di,startpal
- mov si,maingamepal
- mov cx,768/2
- rep movsw
- call dumpcurrent
- ret
-
- endp
-
-
-
-
-
-Dumpcurrent proc near
-
- mov si,startpal
- mov ds,buffers
- call vsync
- mov al,0
- mov cx,128
- call showgroup
- call vsync
- mov al,128
- mov cx,128
- call showgroup
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-Fadedownmon proc near
-
- call paltostartpal
- call paltoendpal
- mov es,buffers
- mov di,endpal+(231*3)
- mov cx,3*8
- mov ax,0
- rep stosb
- mov di,endpal+(246*3)
- stosb
- stosw
- mov fadedirection,1
- mov fadecount,63
- mov colourpos,0
- mov numtofade,128
- mov cx,64 ;100
- call hangon ;curs
- ret
-
- endp
-
-
-
-
-
-Fadeupmon proc near
-
- call paltostartpal
- call paltoendpal
- mov es,buffers
- mov di,startpal+(231*3)
- mov cx,3*8
- mov ax,0
- rep stosb
- mov di,startpal+(246*3)
- stosb
- stosw
- mov fadedirection,1
- mov fadecount,63
- mov colourpos,0
- mov numtofade,128
- mov cx,128
- call hangon ;curs
- ret
-
- endp
-
-
-
-
-
-Fadeupmonfirst proc near
-
- call paltostartpal
- call paltoendpal
- mov es,buffers
- mov di,startpal+(231*3)
- mov cx,3*8
- mov ax,0
- rep stosb
- mov di,startpal+(246*3)
- stosb
- stosw
- mov fadedirection,1
- mov fadecount,63
- mov colourpos,0
- mov numtofade,128
- mov cx,64
- call hangon
- mov al,26
- call playchannel1
- mov cx,64
- call hangon
-
- ret
-
- endp
-
-
-
-
-
-
-
-Fadeupyellows proc near
-
- ;call startpaltoend
- call paltoendpal
- mov es,buffers
- mov di,endpal+(231*3)
- mov cx,3*8
- mov ax,0
- rep stosb
- mov di,endpal+(246*3)
- stosb
- stosw
- mov fadedirection,1
- mov fadecount,63
- mov colourpos,0
- mov numtofade,128
- mov cx,128
- call hangon
- ret
-
- endp
-
-
-
-Initialmoncols proc near
-
- call paltostartpal
- mov es,buffers
- mov di,startpal+(230*3)
- mov cx,3*9
- mov ax,0
- rep stosb
- mov di,startpal+(246*3)
- stosb
- stosw
- mov ds,buffers
- mov si,startpal+(230*3)
- mov al,230
- mov cx,18
- call showgroup
- ret
-
- endp
-
-
+Fadedos proc near
+
+ call vsync
+ mov es,buffers
+ mov di,startpal
+ mov al,0
+ mov dx,3c7h
+ out dx,al
+ mov dx,3c9h
+ mov cx,768/4
+dos1: in al,dx
+ stosb
+ loop dos1
+
+ mov cx,64
+fadedosloop: push cx
+
+ mov ds,buffers
+ mov si,startpal
+ mov cx,768
+dos3: lodsb
+ cmp al,0
+ jz nodown
+ dec al
+nodown: mov [si-1],al
+ loop dos3
+
+ call vsync
+ mov ds,buffers
+ mov si,startpal
+ mov al,0
+ mov dx,3c8h
+ out dx,al
+ inc dx
+ mov cx,768/4
+dos2: lodsb
+ out dx,al
+ loop dos2
+
+ pop cx
+ loop fadedosloop
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Dofade proc near
+
+ cmp fadedirection,0
+ jz finishfade
+ mov cl,numtofade
+ mov ch,0
+ mov al,colourpos
+ mov ah,0
+ mov ds,buffers
+ mov si,startpal
+ add si,ax
+ add si,ax
+ add si,ax
+ call showgroup
+ mov al,numtofade
+ add al,colourpos
+ mov colourpos,al
+ cmp al,0
+ jnz finishfade
+ call fadecalculation
+finishfade: ret
+
+ endp
+
+
+
+
+
+
+
+Clearendpal proc near
+
+ mov es,buffers
+ mov di,endpal
+ mov cx,768
+ mov al,0
+ rep stosb
+ ret
+
+ endp
+
+
+
+
+Clearpalette proc near
+
+ mov fadedirection,0
+ call clearstartpal
+ call dumpcurrent
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Fadescreenup proc near
+
+ call clearstartpal
+ call paltoendpal
+ mov fadedirection,1
+ mov fadecount,63
+ mov colourpos,0
+ mov numtofade,128
+ ret
+
+ endp
+
+
+
+
+Fadetowhite proc near
+
+ mov es,buffers
+ mov di,endpal
+ mov cx,768
+ mov al,63
+ rep stosb
+ mov di,endpal
+ mov al,0
+ stosb
+ stosb
+ stosb
+ call paltostartpal
+ mov fadedirection,1
+ mov fadecount,63
+ mov colourpos,0
+ mov numtofade,128
+ ret
+
+ endp
+
+
+
+Fadefromwhite proc near
+
+ mov es,buffers
+ mov di,startpal
+ mov cx,768
+ mov al,63
+ rep stosb
+ mov di,startpal
+ mov al,0
+ stosb
+ stosb
+ stosb
+ call paltoendpal
+ mov fadedirection,1
+ mov fadecount,63
+ mov colourpos,0
+ mov numtofade,128
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Fadescreenups proc near
+
+ call clearstartpal
+ call paltoendpal
+ mov fadedirection,1
+ mov fadecount,63
+ mov colourpos,0
+ mov numtofade,64
+ ret
+
+ endp
+
+
+
+Fadescreendownhalf proc near
+
+ call paltostartpal
+ call paltoendpal
+ mov cx,768
+ mov es,buffers
+ mov bx,endpal
+halfend: mov al,[es:bx]
+ shr al,1
+ mov [es:bx],al
+ inc bx
+ loop halfend
+
+ mov ds,buffers
+ mov es,buffers
+ mov si,startpal+(56*3)
+ mov di,endpal+(56*3)
+ mov cx,3*5
+ rep movsb
+ mov si,startpal+(77*3)
+ mov di,endpal+(77*3)
+ mov cx,3*2
+ rep movsb
+
+ mov fadedirection,1
+ mov fadecount,31
+ mov colourpos,0
+ mov numtofade,32
+ ret
+
+ endp
+
+
+Fadescreenuphalf proc near
+
+ call endpaltostart
+ call paltoendpal
+ mov fadedirection,1
+ mov fadecount,31
+ mov colourpos,0
+ mov numtofade,32
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Fadescreendown proc near
+
+ call paltostartpal
+ call clearendpal
+ mov fadedirection,1
+ mov fadecount,63
+ mov colourpos,0
+ mov numtofade,128
+ ret
+
+ endp
+
+
+
+Fadescreendowns proc near
+
+ call paltostartpal
+ call clearendpal
+ mov fadedirection,1
+ mov fadecount,63
+ mov colourpos,0
+ mov numtofade,64
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Clearstartpal proc near
+
+ mov es,buffers
+ mov di,startpal
+ mov cx,256
+wholeloop1: mov ax,0
+ stosw
+ mov al,0
+ stosb
+ loop wholeloop1
+ ret
+
+ endp
+
+
+
+
+
+
+Showgun proc near
+
+ mov addtored,0 ;12
+ mov addtogreen,0
+ mov addtoblue,0
+ call paltostartpal
+ call paltoendpal
+ call greyscalesum
+
+; mov es,buffers
+; mov di,endpal+3
+; mov cx,255
+; mov ax,0
+;reds: mov byte ptr [es:di],63
+; inc di
+; stosw
+; loop reds
+
+ mov fadedirection,1
+ mov fadecount,63
+ mov colourpos,0
+ mov numtofade,128
+ mov cx,130
+ call hangon
+ call endpaltostart
+ call clearendpal
+ mov fadedirection,1
+ mov fadecount,63
+ mov colourpos,0
+ mov numtofade,128
+ mov cx,200
+ call hangon
+ mov roomssample,34
+ call loadroomssample
+ mov volume,0
+ mov dx,offset cs:gungraphic
+ call loadintotemp
+ call createpanel2
+ mov ds,tempgraphics
+ mov al,0
+ mov ah,0
+ mov di,100
+ mov bx,4
+ call showframe
+ mov ds,tempgraphics
+ mov al,1
+ mov ah,0
+ mov di,158
+ mov bx,106
+ call showframe
+ call worktoscreen
+ call getridoftemp
+ call fadescreenup
+ mov cx,160
+ call hangon
+ mov al,12
+ mov ah,0
+ call playchannel0
+ mov dx,offset cs:endtextname
+ call loadtemptext
+ call rollendcredits2
+ call getridoftemptext
+ ret
+
+ endp
+
+
+
+
+
+Rollendcredits2 proc near
+
+ call rollem
+ ret
+
+ endp
+
+
+
+
+Rollem proc near
+
+ mov cl,160
+ mov ch,160
+ mov di,25
+ mov bx,20
+ mov ds,mapstore
+ mov si,0
+ call multiget
+
+ mov es,textfile1
+ mov si,49*2
+ mov ax,[es:si]
+ mov si,ax
+ add si,textstart
+
+ mov cx,80
+endcredits21: push cx
+
+ mov bx,10
+ mov cx,linespacing
+endcredits22: push cx si di es bx
+
+ call vsync
+ mov cl,160
+ mov ch,160
+ mov di,25
+ mov bx,20
+ mov ds,mapstore
+ mov si,0
+ call multiput
+ call vsync
+ pop bx es di si
+ push si di es bx
+
+ mov cx,18
+onelot2: push cx
+ mov di,25 ;75
+ mov dx,161
+ mov ax,0
+ call printdirect
+ add bx,linespacing
+ pop cx
+ loop onelot2
+
+ call vsync
+ mov cl,160
+ mov ch,160
+ mov di,25 ;75
+ mov bx,20
+ call multidump
+
+ pop bx es di si cx
+ cmp lasthardkey,1
+ jz endearly2
+ dec bx
+ loop endcredits22
+ pop cx
+looknext2: mov al,[es:si]
+ inc si
+ cmp al,":"
+ jz gotnext2
+ cmp al,0
+ jz gotnext2
+ jmp looknext2
+gotnext2: cmp lasthardkey,1
+ jz endearly
+ loop endcredits21
+
+ mov cx,120
+ call hangone
+ ret
+endearly2: pop cx
+endearly: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Fadecalculation proc near
+
+ cmp fadecount,0
+ jz nomorefading
+ mov bl,fadecount
+ mov es,buffers
+ mov si,startpal
+ mov di,endpal
+ mov cx,768
+fadecolloop: mov al,[es:si]
+ mov ah,[es:di]
+ cmp al,ah
+ jz gotthere
+ jc lesscolour
+ dec byte ptr [es:si]
+ jmp gotthere
+lesscolour: cmp bl,ah
+ jz withit
+ jnc gotthere
+withit: inc byte ptr [es:si]
+gotthere: inc si
+ inc di
+ loop fadecolloop
+ dec fadecount
+ ret
+nomorefading: mov fadedirection,0
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Greyscalesum proc near ;converts palette to grey scale
+ ;summed using formula:
+ mov es,buffers ; .20xred + .59xGreen + .11xBlue
+ mov si,maingamepal
+ mov di,endpal
+ mov cx,256 ;convert 256 colours
+
+greysumloop1: push cx
+ mov bx,0
+ mov al,[es:si]
+ mov ah,0
+ mov cx,20
+ mul cx
+ add bx,ax
+ mov al,[es:si+1]
+ mov ah,0
+ mov cx,59
+ mul cx
+ add bx,ax
+ mov al,[es:si+2]
+ mov ah,0
+ mov cx,11
+ mul cx
+ add bx,ax ;bx holds equationx100
+
+ mov al,-1 ;divide result by 100
+greysumloop2: inc al
+ sub bx,100
+ jnc greysumloop2 ;ah holds grey scale number
+ mov bl,al
+
+ mov al,bl
+ mov ah,addtored
+ cmp al,0
+ ;jz noaddr
+ add al,ah
+noaddr: stosb
+ mov ah,addtogreen
+ mov al,bl
+ cmp al,0
+ jz noaddg
+ add al,ah
+noaddg: stosb ;store result in red, green and
+ mov ah,addtoblue
+ mov al,bl
+ cmp al,0
+ jz noaddb
+ add al,ah
+noaddb: stosb ;blue portions of palette.
+
+ add si,3
+ pop cx
+ loop greysumloop1
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Showgroup proc near
+
+ mov dx,3c8h
+ out dx,al
+ mov dx,3c9h
+showgroup1: lodsb
+ out dx,al
+ lodsb
+ out dx,al
+ lodsb
+ out dx,al
+ loop showgroup1
+ ret
+
+ endp
+
+
+
+
+
+Paltostartpal proc near
+
+ mov es,buffers
+ mov ds,buffers
+ mov si,maingamepal
+ mov di,startpal
+ mov cx,768/2
+ rep movsw
+ ret
+
+ endp
+
+
+
+Endpaltostart proc near
+
+ mov es,buffers
+ mov ds,buffers
+ mov si,endpal
+ mov di,startpal
+ mov cx,768/2
+ rep movsw
+ ret
+
+ endp
+
+
+Startpaltoend proc near
+
+ mov es,buffers
+ mov ds,buffers
+ mov di,endpal
+ mov si,startpal
+ mov cx,768/2
+ rep movsw
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Paltoendpal proc near
+
+ mov es,buffers
+ mov ds,buffers
+ mov di,endpal
+ mov si,maingamepal
+ mov cx,768/2
+ rep movsw
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+
+Allpalette proc near
+
+ mov es,buffers
+ mov ds,buffers
+ mov di,startpal
+ mov si,maingamepal
+ mov cx,768/2
+ rep movsw
+ call dumpcurrent
+ ret
+
+ endp
+
+
+
+
+
+Dumpcurrent proc near
+
+ mov si,startpal
+ mov ds,buffers
+ call vsync
+ mov al,0
+ mov cx,128
+ call showgroup
+ call vsync
+ mov al,128
+ mov cx,128
+ call showgroup
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+Fadedownmon proc near
+
+ call paltostartpal
+ call paltoendpal
+ mov es,buffers
+ mov di,endpal+(231*3)
+ mov cx,3*8
+ mov ax,0
+ rep stosb
+ mov di,endpal+(246*3)
+ stosb
+ stosw
+ mov fadedirection,1
+ mov fadecount,63
+ mov colourpos,0
+ mov numtofade,128
+ mov cx,64 ;100
+ call hangon ;curs
+ ret
+
+ endp
+
+
+
+
+
+Fadeupmon proc near
+
+ call paltostartpal
+ call paltoendpal
+ mov es,buffers
+ mov di,startpal+(231*3)
+ mov cx,3*8
+ mov ax,0
+ rep stosb
+ mov di,startpal+(246*3)
+ stosb
+ stosw
+ mov fadedirection,1
+ mov fadecount,63
+ mov colourpos,0
+ mov numtofade,128
+ mov cx,128
+ call hangon ;curs
+ ret
+
+ endp
+
+
+
+
+
+Fadeupmonfirst proc near
+
+ call paltostartpal
+ call paltoendpal
+ mov es,buffers
+ mov di,startpal+(231*3)
+ mov cx,3*8
+ mov ax,0
+ rep stosb
+ mov di,startpal+(246*3)
+ stosb
+ stosw
+ mov fadedirection,1
+ mov fadecount,63
+ mov colourpos,0
+ mov numtofade,128
+ mov cx,64
+ call hangon
+ mov al,26
+ call playchannel1
+ mov cx,64
+ call hangon
+
+ ret
+
+ endp
+
+
+
+
+
+
+
+Fadeupyellows proc near
+
+ ;call startpaltoend
+ call paltoendpal
+ mov es,buffers
+ mov di,endpal+(231*3)
+ mov cx,3*8
+ mov ax,0
+ rep stosb
+ mov di,endpal+(246*3)
+ stosb
+ stosw
+ mov fadedirection,1
+ mov fadecount,63
+ mov colourpos,0
+ mov numtofade,128
+ mov cx,128
+ call hangon
+ ret
+
+ endp
+
+
+
+Initialmoncols proc near
+
+ call paltostartpal
+ mov es,buffers
+ mov di,startpal+(230*3)
+ mov cx,3*9
+ mov ax,0
+ rep stosb
+ mov di,startpal+(246*3)
+ stosb
+ stosw
+ mov ds,buffers
+ mov si,startpal+(230*3)
+ mov al,230
+ mov cx,18
+ call showgroup
+ ret
+
+ endp
+
+
 \ No newline at end of file
diff --git a/devtools/tasmrecover/dreamweb/vgagrafx.asm b/devtools/tasmrecover/dreamweb/vgagrafx.asm
index 4c89412952..1d8e5f5dc7 100644
--- a/devtools/tasmrecover/dreamweb/vgagrafx.asm
+++ b/devtools/tasmrecover/dreamweb/vgagrafx.asm
@@ -1,1763 +1,1763 @@
;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
-Screenwidth equ 320 ;physical width of screen
-
-
-
-Allocatework proc near
-
- mov bx,1000h
- call allocatemem
- mov workspace,ax
- ret
-
- endp
-
-
-
-
-
-Showpcx proc near
-
- call openfile
- mov bx,handle
- mov ds,workspace
- mov ah,3fh
- mov cx,128
- mov dx,0
- int 21h
-
- mov ds,workspace
- mov si,16
- mov cx,48
- mov es,buffers
- mov di,maingamepal
-pcxpal: push cx
- call readabyte
- shr al,1
- shr al,1
- stosb
- pop cx
- loop pcxpal
- mov cx,768-48
- mov ax,0ffffh
- rep stosw
-
- call readoneblock
- mov si,0
- mov di,0
- mov cx,480
-convertpcx: push cx
- push di
- mov ds,workspace
- mov es,buffers
- mov di,pointerback
- mov bx,0
-sameline: call readabyte
- mov ah,al
- and ah,11000000b
- cmp ah,11000000b
- jnz normal
- mov cl,al
- and cl,00111111b
- mov ch,0
- push cx
- call readabyte
- pop cx
- add bx,cx
- rep stosb
- cmp bx,4*80
- jnz sameline
- jmp endline
-normal: stosb
- inc bx
- cmp bx,4*80
- jnz sameline
-
-endline: pop di
- push si
- mov dx,0a000h
- mov es,dx
- mov si,pointerback
- mov ds,buffers
-
- mov dx,03c4h
- mov al,2
- mov ah,1
- out dx,ax
- mov cx,40
- push di
- rep movsw
- pop di
- mov ah,2
- out dx,ax
- mov cx,40
- push di
- rep movsw
- pop di
- mov ah,4
- out dx,ax
- mov cx,40
- push di
- rep movsw
- pop di
- mov ah,8
- out dx,ax
- mov cx,40
- rep movsw
-
- pop si
- pop cx
- loop convertpcx
-
- mov bx,handle
- call closefile
- ret
-
- endp
-
-
-
-
-Readabyte proc near
-
- cmp si,30000
- jnz notendblock
- push bx es di ds si
- call readoneblock
- pop si ds di es bx
- mov si,0
-notendblock: lodsb
- ret
-
- endp
-
-
-
-
-Readoneblock proc near
-
- mov bx,handle
- mov ah,3fh
- mov ds,workspace
- mov ah,3fh
- mov cx,30000
- mov dx,0
- int 21h
- ret
-
- endp
-
-
-
-
-
-
-
-
-Loadpalfromiff proc near
-
- mov dx,offset cs:palettescreen
- call openfile
- mov cx,2000
- mov ds,mapstore
- mov dx,0
- call readfromfile
- call closefile
- mov es,buffers
- mov di,maingamepal
- mov ds,mapstore
- mov si,30h
- mov cx,768
-palloop: lodsb
- shr al,1
- shr al,1
-
- cmp brightness,1
- jnz nought
- cmp al,0
- jz nought
- mov ah,al
- shr ah,1
- add al,ah
- shr ah,1
- add al,ah
- cmp al,64
- jc nought
- mov al,63
-
-nought: stosb
- loop palloop
- ret
-
- endp
-
-
-
-
-
-
-Setmode proc near
-
- call vsync
- mov ah,12h
- mov al,1
- mov bl,33h
- int 10h
-
- mov ah,0
- mov al,13h
- int 10h
-
- mov al,6 ; sets graphic controller
- mov dx,3ceh ; register 6 (MM) to 1 - 64K
- out dx,al
- inc dx
- in al,dx
- and al,11110011b
- or al,00000100b
- out dx,al
-
- mov al,4 ; sets sequencer
- mov dx,3c4h ; register 4 (EM) to 1 - >64K
- out dx,al
- inc dx
- in al,dx
- and al,11111101b
- or al,00000010b
- out dx,al
-
- mov al,13h ;give screen 16 extra hidden
- mov dx,3d4h ;pixels at one side
- out dx,al
- inc dx
- mov al,screenwidth/8 ; width of screen
- out dx,al
-
- mov al,8h
- mov dx,3d4h
- out dx,al
- inc dx
- mov al,00000000b
- out dx,al
-
- mov al,11h
- mov dx,3d4h
- out dx,al
- inc dx
- in al,dx
- or al,128
- out dx,al
-
- mov al,00
- mov dx,3d4h
- out dx,al
- inc dx
- mov al,3fh
- out dx,al
- mov al,01
- mov dx,3d4h
- out dx,al
- inc dx
- mov al,3fh
- out dx,al
- ret
-
- endp
-
-
-
-Cls proc near
-
- mov ax,0a000h
- mov es,ax
- mov di,0
- mov cx,7fffh
- mov ax,0
- rep stosw
- ret
-
- endp
-
-
-
-Printundermon proc near ;prints workspace through the text
-
- mov si,(screenwidth*43)+76
- mov di,si
- mov es,workspace
- add si,8*screenwidth
- mov dx,0a000h
- mov ds,dx
- mov cx,104
-scrollmonloop1: push cx di si
- mov cx,170
-scrollmonloop2: lodsb
- cmp al,231
- jnc dontplace
-placeit: stosb
- loop scrollmonloop2
- jmp finmonscroll
-dontplace: inc di
- loop scrollmonloop2
-
-finmonscroll: pop si di cx
- add si,screenwidth
- add di,screenwidth
- loop scrollmonloop1
- ret
-
- endp
-
-
-
-
-
-
-
-
-Worktoscreen proc near
-
- call vsync
- mov si,0
- mov di,0
- mov cx,25
- mov ds,workspace
- mov dx,0a000h
- mov es,dx
-
-dumpallloop: call width160
- call width160
- call width160
- call width160
- call width160
- call width160
- call width160
- call width160
- loop dumpallloop
-
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-;
-;Worktoscreen2 proc near
-;
-; call showpointer
-;
-; mov ds,workspace
-; mov dx,0a000h
-; mov es,dx
-;
-; mov si,320-16
-; mov di,320-16
-; mov bl,33
-; mov cx,16
-;screen2loop1: push di si cx
-; call vsync
-; cmp bl,21
-; jc screen2loop2
-; sub cx,16
-; jz isoneblock
-;screen2loop2: movsw
-; movsw
-; movsw
-; movsw
-; movsw
-; movsw
-; movsw
-; movsw
-; add di,320-15
-; add si,320-15
-; loop screen2loop2
-;isoneblock: mov cx,16
-; mov ax,320-15
-;oneblockloop: push cx
-; rep movsb
-; pop cx
-; add si,ax
-; add di,ax
-; inc ax
-; loop oneblockloop
-;
-; pop cx si di
-; add cx,16
-; cmp cx,200
-; jc itsallright
-; mov cx,200
-;itsallright: sub si,16
-; sub di,16
-; dec bl
-; jnz screen2loop1
-;
-; call delpointer
-; ret
-;
-; endp
-;
-;
-;
-;
-
-
-
-
-Paneltomap proc near
-
- mov di,mapxstart
- add di,mapadx
- mov bx,mapystart
- add bx,mapady
- mov ds,mapstore
- mov si,0
- mov cl,mapxsize
- mov ch,mapysize
- call multiget
- ret
-
- endp
-
-
-
-Maptopanel proc near
-
- mov di,mapxstart
- add di,mapadx
- mov bx,mapystart
- add bx,mapady
- mov ds,mapstore
- mov si,0
- mov cl,mapxsize
- mov ch,mapysize
- call multiput
-
- ret
-
- endp
-
-
-
-
-
-Dumpmap proc near
-
- mov di,mapxstart
- add di,mapadx
- mov bx,mapystart
- add bx,mapady
- mov cl,mapxsize
- mov ch,mapysize
- call multidump
- ret
-
- endp
-
-
-
-
-Pixelcheckset proc near ;al=x, ah=y, es:bx=setlist pos
- ;checks exact pixel in a frame
- push ax
- sub al,[es:bx] ;for detection.
- sub ah,[es:bx+1] ;al,ah now holds offset within
- ;the frame
- push es bx cx ax
- mov al,[es:bx+4] ;object number
- call getsetad
- mov al,[es:bx+17] ;finds frame number
- mov es,setframes
- mov bx,framedata
- mov ah,0
- mov cx,6
- mul cx
- add bx,ax ;get data for this frame in es:bx
- pop ax
-
- push ax
- mov al,ah
- mov ah,0
- mov cl,[es:bx]
- mov ch,0
- mul cx
- pop cx
- mov ch,0
- add ax,cx ;ax now holds offset from corner
- ;of the frame
- add ax,[es:bx+2]
- mov bx,ax ;es:bx now holds offset of pixel!
- add bx,frames
-
- mov al,[es:bx]
- mov dl,al
- pop cx bx es ax
- cmp dl,0
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-
-
-Createpanel proc near
-
- mov di,0
- mov bx,8
- mov ds,icons2
- mov al,0
- mov ah,2
- call showframe ;spritef
- mov di,160
- mov bx,8
- mov ds,icons2
- mov al,0
- mov ah,2
- call showframe ;spritef
- mov di,0
- mov bx,104
- mov ds,icons2
- mov al,0
- mov ah,2
- call showframe ;spritef
- mov di,160
- mov bx,104
- mov ds,icons2
- mov al,0
- mov ah,2
- call showframe ;spritef
- ret
-
- endp
-
-
-
-Createpanel2 proc near
-
- call createpanel
- mov di,0
- mov bx,0
- mov ds,icons2
- mov al,5
- mov ah,2
- call showframe
- mov di,160
- mov bx,0
- mov ds,icons2
- mov al,5
- mov ah,2
- call showframe
- ret
-
- endp
-
-
-
-
-
-
-;Showspritef proc near
-;
-; mov ax,bx
-; mov bx,screenwidth
-; mul bx
-; add di,ax
-; mov dx,screenwidth
-; mov es,workspace
-; mov si,2080
-; mov ah,0
-; add ax,ax
-; mov bx,ax
-; add ax,ax
-; add bx,ax
-; add si,[bx+2]
-; mov cx,[bx+0]
-;spritefloop: push cx di
-; call width80
-; pop di cx
-; add di,dx
-; dec ch
-; jnz spritefloop
-; ret
-;
-; endp
-;
-;
-
-
-
-
-
-
-
-
-Clearwork proc near
-
- mov ax,0h
- mov es,workspace
- mov di,0
- mov cx,(200*320)/64
-clearloop: stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- loop clearloop
- ret
-
- endp
-
-
-
-
-
-
-Vsync proc near
-
- push ax bx cx dx si di ds es
-
- mov dx,03dah
-loop2: in al,dx
- test al,8
- jz loop2
-loop1: in al,dx
- test al,8
- jnz loop1
-
- call doshake
- call dofade
- if debuglevel2
- call debugkeys
- endif
- pop es ds di si dx cx bx ax
- ret
-
- endp
-
-
-
-Doshake proc near
-
- cmp shakecounter,48
- jz finishshake
- inc shakecounter
- mov bl,shakecounter
- mov bh,0
- add bx,offset cs:shaketable
- mov al,10h
- mov dx,3d4h
- out dx,al
- inc dx
- mov al,[cs:bx]
- out dx,al
-finishshake: ret
-
-shaketable: db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
- db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
- db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
- db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
- db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
- db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
- db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
- db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
- db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9ch
-
- endp
-
-
-
-
-
-
-Zoom proc near
-
- cmp watchingtime,0
- jnz inwatching
- cmp zoomon,1
- jz zoomswitch
-inwatching: ret
-
-zoomswitch: cmp commandtype,199
- jc zoomit
-cantzoom: call putunderzoom
- ret
-
-zoomit: mov ax,oldpointery
- sub ax,9
- mov cx,screenwidth
- mul cx
- add ax,oldpointerx
- sub ax,11
- mov si,ax
-
- mov ax,zoomy+4
- mov cx,screenwidth
- mul cx
- add ax,zoomx+5
- mov di,ax
- mov es,workspace
- mov ds,workspace
-
- mov cx,20
-zoomloop: push cx
- mov cx,23
-zoomloop2: lodsb
- mov ah,al
- stosw
- mov [es:di+screenwidth-2],ax
- loop zoomloop2
- add si,screenwidth-23
- add di,screenwidth-46+screenwidth
- pop cx
- loop zoomloop
-
- call crosshair
- mov didzoom,1
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-Delthisone proc near
-
- push ax
- push ax
- mov al,ah
- mov ah,0
- add ax,mapady
- mov bx,screenwidth
- mul bx
- pop bx
- mov bh,0
- add bx,mapadx
- add ax,bx
- mov di,ax
- pop ax
- push ax
- mov al,ah
- mov ah,0
- mov bx,22*8
- mul bx
- pop bx
- mov bh,0
- add ax,bx
- mov si,ax
-
- mov es,workspace
- mov ds,mapstore
- mov dl,cl
- mov dh,0
- mov ax,screenwidth
- sub ax,dx
- neg dx
- add dx,22*8
-deloneloop: push cx
- mov ch,0
- rep movsb
- pop cx
- add di,ax
- add si,dx
- dec ch
- jnz deloneloop
- ret
-
- endp
-
-
-
-
-
-
-
-;------------------------------------------------------------Pointer update----
-
-
-Multiget proc near ;di,bx = dest x,y
- ;cl,ch = size
- mov ax,bx ;si,di = storage
- mov bx,screenwidth
- mul bx
- add di,ax
-
- mov es,workspace
- push es ds
- pop es ds
- xchg di,si
- mov al,cl
- mov ah,0
- mov dx,screenwidth
- sub dx,ax
-
- mov al,cl
- and al,1
- jnz oddwidth2
-
- mov bl,cl
- mov bh,0
- mov ax,offset cs:width0
- shr bx,1
- sub ax,bx
- mov cl,ch
- mov ch,0
-multiloop3: call ax
- add si,dx
- loop multiloop3
- ret
-
-oddwidth2: mov bl,cl
- mov bh,0
- shr bx,1
- mov ax,offset cs:width0
- sub ax,bx
- mov cl,ch
- mov ch,0
-multiloop4: call ax
- movsb
- add si,dx
- loop multiloop4
- ret
-
- endp
-
-
-
-
-
-
-
-Multiput proc near ;di,bx = dest x,y
- ;cl,ch = size
- mov ax,bx ;si,di = storage
- mov bx,screenwidth
- mul bx
- add di,ax
-
- mov es,workspace
- mov al,cl
- mov ah,0
- mov dx,screenwidth
- sub dx,ax
-
- mov al,cl
- and al,1
- jnz oddwidth3
-
- mov bl,cl
- mov bh,0
- shr bx,1
- mov ax,offset cs:width0
- sub ax,bx
- mov cl,ch
- mov ch,0
-multiloop5: call ax
- add di,dx
- loop multiloop5
- ret
-
-oddwidth3: mov bl,cl
- mov bh,0
- shr bx,1
- mov ax,offset cs:width0
- sub ax,bx
- mov cl,ch
- mov ch,0
-multiloop6: call ax
- movsb
- add di,dx
- loop multiloop6
- ret
-
-
- endp
-
-
-
-
-
-
-
-
-
-Multidump proc near ;di,bx = dest x,y
- ;cl,ch = size
- mov dx,0a000h
- mov es,dx
- mov ds,workspace
-
- mov ax,bx
- mov bx,screenwidth
- mul bx
- add di,ax
- mov dx,screenwidth
- mov si,di
-
- mov al,cl
- and al,1
- jnz oddwidth
-
- mov bl,cl
- mov bh,0
- shr bx,1
- mov ax,offset cs:width0
- sub ax,bx
- mov bl,cl
- mov bh,0
- neg bx
- add bx,dx
- mov cl,ch
- mov ch,0
-multiloop1: call ax
- add di,bx
- add si,bx
- loop multiloop1
- ret
-
-oddwidth: mov bl,cl
- mov bh,0
- shr bx,1
- mov ax,offset cs:width0
- sub ax,bx
- mov bl,cl
- mov bh,0
- neg bx
- add bx,screenwidth
- mov cl,ch
- mov ch,0
-multiloop2: call ax
- movsb
- add di,bx
- add si,bx
- loop multiloop2
- ret
-
- endp
-
-
-
-
-
-Width160 proc near
-
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
-width128: movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
-width110: movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
-width88: movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
-width80: movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
-width63: movsw
-width62: movsw
-width61: movsw
-width60: movsw
-width59: movsw
-width58: movsw
-width57: movsw
-width56: movsw
-width55: movsw
-width54: movsw
-width53: movsw
-width52: movsw
-width51: movsw
-width50: movsw
-width49: movsw
-width48: movsw
-width47: movsw
-width46: movsw
-width45: movsw
-width44: movsw
-width43: movsw
-width42: movsw
-width41: movsw
-width40: movsw
-width39: movsw
-width38: movsw
-width37: movsw
-width36: movsw
-width35: movsw
-width34: movsw
-width33: movsw
-width32: movsw
-width31: movsw
-width30: movsw
-width29: movsw
-width28: movsw
-width27: movsw
-width26: movsw
-width25: movsw
-width24: movsw
-width23: movsw
-width22: movsw
-width21: movsw
-width20: movsw
-width19: movsw
-width18: movsw
-width17: movsw
-width16: movsw
-width15: movsw
-width14: movsw
-width13: movsw
-width12: movsw
-width11: movsw
-width10: movsw
-width9: movsw
-width8: movsw
-width7: movsw
-width6: movsw
-width5: movsw
-width4: movsw
-width3: movsw
-width2: movsw
-width1: movsw
-width0: ret
-
- endp
-
-
-
-
-
-
-
-
-
-Doblocks proc near
-
- mov es,workspace
- mov ax,mapady
- mov cx,screenwidth
- mul cx
- mov di,mapadx
- add di,ax
-
- mov al,mapy
- mov ah,0
- mov bx,mapwidth
- mul bx
- mov bl,mapx
- mov bh,0
- add ax,bx
-
- mov si,map
- add si,ax
-
- mov cx,10
-loop120: push di cx
- mov cx,11
-loop124: push cx di
-
- mov ds,mapdata
- lodsb
- mov ds,backdrop
-
- push si
- cmp al,0
- jz zeroblock
- mov ah,al
- mov al,0
- mov si,blocks
- add si,ax
- mov bh,14
-
-
- mov bh,4
-firstbitofblock: movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- add di,screenwidth-16
- dec bh
- jnz firstbitofblock
-
- mov bh,12
-loop125: movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- movsw
- mov ax,0dfdfh
- stosw
- stosw
-
- add di,screenwidth-20
- dec bh
- jnz loop125
-
- add di,4
- mov ax,0dfdfh
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- add di,screenwidth-16
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- add di,screenwidth-16
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- add di,screenwidth-16
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
- stosw
-
-
-zeroblock: pop si
-
- pop di cx
- add di,16
- loop loop124
- add si,mapwidth-11
- pop cx di
- add di,screenwidth*16
- loop loop120
- ret
-
- endp
-
-
-
-
-
-
-
-;----------------------------------------------General sprite output routine----
-
-Showframe proc near ; shows a frame from sprites
-
- push dx ax ; es=destination
- mov cx,ax ; ds=source
- and cx,511 ; di=x, bx=y
- add cx,cx ; al=frame number
- mov si,cx ; ah=effects flag
- add cx,cx
- add si,cx
- cmp word ptr [si],0
- jnz notblankshow
+Screenwidth equ 320 ;physical width of screen
+
+
+
+Allocatework proc near
+
+ mov bx,1000h
+ call allocatemem
+ mov workspace,ax
+ ret
+
+ endp
+
+
+
+
+
+Showpcx proc near
+
+ call openfile
+ mov bx,handle
+ mov ds,workspace
+ mov ah,3fh
+ mov cx,128
+ mov dx,0
+ int 21h
+
+ mov ds,workspace
+ mov si,16
+ mov cx,48
+ mov es,buffers
+ mov di,maingamepal
+pcxpal: push cx
+ call readabyte
+ shr al,1
+ shr al,1
+ stosb
+ pop cx
+ loop pcxpal
+ mov cx,768-48
+ mov ax,0ffffh
+ rep stosw
+
+ call readoneblock
+ mov si,0
+ mov di,0
+ mov cx,480
+convertpcx: push cx
+ push di
+ mov ds,workspace
+ mov es,buffers
+ mov di,pointerback
+ mov bx,0
+sameline: call readabyte
+ mov ah,al
+ and ah,11000000b
+ cmp ah,11000000b
+ jnz normal
+ mov cl,al
+ and cl,00111111b
+ mov ch,0
+ push cx
+ call readabyte
+ pop cx
+ add bx,cx
+ rep stosb
+ cmp bx,4*80
+ jnz sameline
+ jmp endline
+normal: stosb
+ inc bx
+ cmp bx,4*80
+ jnz sameline
+
+endline: pop di
+ push si
+ mov dx,0a000h
+ mov es,dx
+ mov si,pointerback
+ mov ds,buffers
+
+ mov dx,03c4h
+ mov al,2
+ mov ah,1
+ out dx,ax
+ mov cx,40
+ push di
+ rep movsw
+ pop di
+ mov ah,2
+ out dx,ax
+ mov cx,40
+ push di
+ rep movsw
+ pop di
+ mov ah,4
+ out dx,ax
+ mov cx,40
+ push di
+ rep movsw
+ pop di
+ mov ah,8
+ out dx,ax
+ mov cx,40
+ rep movsw
+
+ pop si
+ pop cx
+ loop convertpcx
+
+ mov bx,handle
+ call closefile
+ ret
+
+ endp
+
+
+
+
+Readabyte proc near
+
+ cmp si,30000
+ jnz notendblock
+ push bx es di ds si
+ call readoneblock
+ pop si ds di es bx
+ mov si,0
+notendblock: lodsb
+ ret
+
+ endp
+
+
+
+
+Readoneblock proc near
+
+ mov bx,handle
+ mov ah,3fh
+ mov ds,workspace
+ mov ah,3fh
+ mov cx,30000
+ mov dx,0
+ int 21h
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Loadpalfromiff proc near
+
+ mov dx,offset cs:palettescreen
+ call openfile
+ mov cx,2000
+ mov ds,mapstore
+ mov dx,0
+ call readfromfile
+ call closefile
+ mov es,buffers
+ mov di,maingamepal
+ mov ds,mapstore
+ mov si,30h
+ mov cx,768
+palloop: lodsb
+ shr al,1
+ shr al,1
+
+ cmp brightness,1
+ jnz nought
+ cmp al,0
+ jz nought
+ mov ah,al
+ shr ah,1
+ add al,ah
+ shr ah,1
+ add al,ah
+ cmp al,64
+ jc nought
+ mov al,63
+
+nought: stosb
+ loop palloop
+ ret
+
+ endp
+
+
+
+
+
+
+Setmode proc near
+
+ call vsync
+ mov ah,12h
+ mov al,1
+ mov bl,33h
+ int 10h
+
+ mov ah,0
+ mov al,13h
+ int 10h
+
+ mov al,6 ; sets graphic controller
+ mov dx,3ceh ; register 6 (MM) to 1 - 64K
+ out dx,al
+ inc dx
+ in al,dx
+ and al,11110011b
+ or al,00000100b
+ out dx,al
+
+ mov al,4 ; sets sequencer
+ mov dx,3c4h ; register 4 (EM) to 1 - >64K
+ out dx,al
+ inc dx
+ in al,dx
+ and al,11111101b
+ or al,00000010b
+ out dx,al
+
+ mov al,13h ;give screen 16 extra hidden
+ mov dx,3d4h ;pixels at one side
+ out dx,al
+ inc dx
+ mov al,screenwidth/8 ; width of screen
+ out dx,al
+
+ mov al,8h
+ mov dx,3d4h
+ out dx,al
+ inc dx
+ mov al,00000000b
+ out dx,al
+
+ mov al,11h
+ mov dx,3d4h
+ out dx,al
+ inc dx
+ in al,dx
+ or al,128
+ out dx,al
+
+ mov al,00
+ mov dx,3d4h
+ out dx,al
+ inc dx
+ mov al,3fh
+ out dx,al
+ mov al,01
+ mov dx,3d4h
+ out dx,al
+ inc dx
+ mov al,3fh
+ out dx,al
+ ret
+
+ endp
+
+
+
+Cls proc near
+
+ mov ax,0a000h
+ mov es,ax
+ mov di,0
+ mov cx,7fffh
+ mov ax,0
+ rep stosw
+ ret
+
+ endp
+
+
+
+Printundermon proc near ;prints workspace through the text
+
+ mov si,(screenwidth*43)+76
+ mov di,si
+ mov es,workspace
+ add si,8*screenwidth
+ mov dx,0a000h
+ mov ds,dx
+ mov cx,104
+scrollmonloop1: push cx di si
+ mov cx,170
+scrollmonloop2: lodsb
+ cmp al,231
+ jnc dontplace
+placeit: stosb
+ loop scrollmonloop2
+ jmp finmonscroll
+dontplace: inc di
+ loop scrollmonloop2
+
+finmonscroll: pop si di cx
+ add si,screenwidth
+ add di,screenwidth
+ loop scrollmonloop1
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+Worktoscreen proc near
+
+ call vsync
+ mov si,0
+ mov di,0
+ mov cx,25
+ mov ds,workspace
+ mov dx,0a000h
+ mov es,dx
+
+dumpallloop: call width160
+ call width160
+ call width160
+ call width160
+ call width160
+ call width160
+ call width160
+ call width160
+ loop dumpallloop
+
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+;
+;Worktoscreen2 proc near
+;
+; call showpointer
+;
+; mov ds,workspace
+; mov dx,0a000h
+; mov es,dx
+;
+; mov si,320-16
+; mov di,320-16
+; mov bl,33
+; mov cx,16
+;screen2loop1: push di si cx
+; call vsync
+; cmp bl,21
+; jc screen2loop2
+; sub cx,16
+; jz isoneblock
+;screen2loop2: movsw
+; movsw
+; movsw
+; movsw
+; movsw
+; movsw
+; movsw
+; movsw
+; add di,320-15
+; add si,320-15
+; loop screen2loop2
+;isoneblock: mov cx,16
+; mov ax,320-15
+;oneblockloop: push cx
+; rep movsb
+; pop cx
+; add si,ax
+; add di,ax
+; inc ax
+; loop oneblockloop
+;
+; pop cx si di
+; add cx,16
+; cmp cx,200
+; jc itsallright
+; mov cx,200
+;itsallright: sub si,16
+; sub di,16
+; dec bl
+; jnz screen2loop1
+;
+; call delpointer
+; ret
+;
+; endp
+;
+;
+;
+;
+
+
+
+
+Paneltomap proc near
+
+ mov di,mapxstart
+ add di,mapadx
+ mov bx,mapystart
+ add bx,mapady
+ mov ds,mapstore
+ mov si,0
+ mov cl,mapxsize
+ mov ch,mapysize
+ call multiget
+ ret
+
+ endp
+
+
+
+Maptopanel proc near
+
+ mov di,mapxstart
+ add di,mapadx
+ mov bx,mapystart
+ add bx,mapady
+ mov ds,mapstore
+ mov si,0
+ mov cl,mapxsize
+ mov ch,mapysize
+ call multiput
+
+ ret
+
+ endp
+
+
+
+
+
+Dumpmap proc near
+
+ mov di,mapxstart
+ add di,mapadx
+ mov bx,mapystart
+ add bx,mapady
+ mov cl,mapxsize
+ mov ch,mapysize
+ call multidump
+ ret
+
+ endp
+
+
+
+
+Pixelcheckset proc near ;al=x, ah=y, es:bx=setlist pos
+ ;checks exact pixel in a frame
+ push ax
+ sub al,[es:bx] ;for detection.
+ sub ah,[es:bx+1] ;al,ah now holds offset within
+ ;the frame
+ push es bx cx ax
+ mov al,[es:bx+4] ;object number
+ call getsetad
+ mov al,[es:bx+17] ;finds frame number
+ mov es,setframes
+ mov bx,framedata
+ mov ah,0
+ mov cx,6
+ mul cx
+ add bx,ax ;get data for this frame in es:bx
+ pop ax
+
+ push ax
+ mov al,ah
+ mov ah,0
+ mov cl,[es:bx]
+ mov ch,0
+ mul cx
+ pop cx
+ mov ch,0
+ add ax,cx ;ax now holds offset from corner
+ ;of the frame
+ add ax,[es:bx+2]
+ mov bx,ax ;es:bx now holds offset of pixel!
+ add bx,frames
+
+ mov al,[es:bx]
+ mov dl,al
+ pop cx bx es ax
+ cmp dl,0
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+
+
+Createpanel proc near
+
+ mov di,0
+ mov bx,8
+ mov ds,icons2
+ mov al,0
+ mov ah,2
+ call showframe ;spritef
+ mov di,160
+ mov bx,8
+ mov ds,icons2
+ mov al,0
+ mov ah,2
+ call showframe ;spritef
+ mov di,0
+ mov bx,104
+ mov ds,icons2
+ mov al,0
+ mov ah,2
+ call showframe ;spritef
+ mov di,160
+ mov bx,104
+ mov ds,icons2
+ mov al,0
+ mov ah,2
+ call showframe ;spritef
+ ret
+
+ endp
+
+
+
+Createpanel2 proc near
+
+ call createpanel
+ mov di,0
+ mov bx,0
+ mov ds,icons2
+ mov al,5
+ mov ah,2
+ call showframe
+ mov di,160
+ mov bx,0
+ mov ds,icons2
+ mov al,5
+ mov ah,2
+ call showframe
+ ret
+
+ endp
+
+
+
+
+
+
+;Showspritef proc near
+;
+; mov ax,bx
+; mov bx,screenwidth
+; mul bx
+; add di,ax
+; mov dx,screenwidth
+; mov es,workspace
+; mov si,2080
+; mov ah,0
+; add ax,ax
+; mov bx,ax
+; add ax,ax
+; add bx,ax
+; add si,[bx+2]
+; mov cx,[bx+0]
+;spritefloop: push cx di
+; call width80
+; pop di cx
+; add di,dx
+; dec ch
+; jnz spritefloop
+; ret
+;
+; endp
+;
+;
+
+
+
+
+
+
+
+
+Clearwork proc near
+
+ mov ax,0h
+ mov es,workspace
+ mov di,0
+ mov cx,(200*320)/64
+clearloop: stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ loop clearloop
+ ret
+
+ endp
+
+
+
+
+
+
+Vsync proc near
+
+ push ax bx cx dx si di ds es
+
+ mov dx,03dah
+loop2: in al,dx
+ test al,8
+ jz loop2
+loop1: in al,dx
+ test al,8
+ jnz loop1
+
+ call doshake
+ call dofade
+ if debuglevel2
+ call debugkeys
+ endif
+ pop es ds di si dx cx bx ax
+ ret
+
+ endp
+
+
+
+Doshake proc near
+
+ cmp shakecounter,48
+ jz finishshake
+ inc shakecounter
+ mov bl,shakecounter
+ mov bh,0
+ add bx,offset cs:shaketable
+ mov al,10h
+ mov dx,3d4h
+ out dx,al
+ inc dx
+ mov al,[cs:bx]
+ out dx,al
+finishshake: ret
+
+shaketable: db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
+ db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
+ db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
+ db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
+ db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
+ db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
+ db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
+ db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh
+ db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9ch
+
+ endp
+
+
+
+
+
+
+Zoom proc near
+
+ cmp watchingtime,0
+ jnz inwatching
+ cmp zoomon,1
+ jz zoomswitch
+inwatching: ret
+
+zoomswitch: cmp commandtype,199
+ jc zoomit
+cantzoom: call putunderzoom
+ ret
+
+zoomit: mov ax,oldpointery
+ sub ax,9
+ mov cx,screenwidth
+ mul cx
+ add ax,oldpointerx
+ sub ax,11
+ mov si,ax
+
+ mov ax,zoomy+4
+ mov cx,screenwidth
+ mul cx
+ add ax,zoomx+5
+ mov di,ax
+ mov es,workspace
+ mov ds,workspace
+
+ mov cx,20
+zoomloop: push cx
+ mov cx,23
+zoomloop2: lodsb
+ mov ah,al
+ stosw
+ mov [es:di+screenwidth-2],ax
+ loop zoomloop2
+ add si,screenwidth-23
+ add di,screenwidth-46+screenwidth
+ pop cx
+ loop zoomloop
+
+ call crosshair
+ mov didzoom,1
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Delthisone proc near
+
+ push ax
+ push ax
+ mov al,ah
+ mov ah,0
+ add ax,mapady
+ mov bx,screenwidth
+ mul bx
+ pop bx
+ mov bh,0
+ add bx,mapadx
+ add ax,bx
+ mov di,ax
+ pop ax
+ push ax
+ mov al,ah
+ mov ah,0
+ mov bx,22*8
+ mul bx
+ pop bx
+ mov bh,0
+ add ax,bx
+ mov si,ax
+
+ mov es,workspace
+ mov ds,mapstore
+ mov dl,cl
+ mov dh,0
+ mov ax,screenwidth
+ sub ax,dx
+ neg dx
+ add dx,22*8
+deloneloop: push cx
+ mov ch,0
+ rep movsb
+ pop cx
+ add di,ax
+ add si,dx
+ dec ch
+ jnz deloneloop
+ ret
+
+ endp
+
+
+
+
+
+
+
+;------------------------------------------------------------Pointer update----
+
+
+Multiget proc near ;di,bx = dest x,y
+ ;cl,ch = size
+ mov ax,bx ;si,di = storage
+ mov bx,screenwidth
+ mul bx
+ add di,ax
+
+ mov es,workspace
+ push es ds
+ pop es ds
+ xchg di,si
+ mov al,cl
+ mov ah,0
+ mov dx,screenwidth
+ sub dx,ax
+
+ mov al,cl
+ and al,1
+ jnz oddwidth2
+
+ mov bl,cl
+ mov bh,0
+ mov ax,offset cs:width0
+ shr bx,1
+ sub ax,bx
+ mov cl,ch
+ mov ch,0
+multiloop3: call ax
+ add si,dx
+ loop multiloop3
+ ret
+
+oddwidth2: mov bl,cl
+ mov bh,0
+ shr bx,1
+ mov ax,offset cs:width0
+ sub ax,bx
+ mov cl,ch
+ mov ch,0
+multiloop4: call ax
+ movsb
+ add si,dx
+ loop multiloop4
+ ret
+
+ endp
+
+
+
+
+
+
+
+Multiput proc near ;di,bx = dest x,y
+ ;cl,ch = size
+ mov ax,bx ;si,di = storage
+ mov bx,screenwidth
+ mul bx
+ add di,ax
+
+ mov es,workspace
+ mov al,cl
+ mov ah,0
+ mov dx,screenwidth
+ sub dx,ax
+
+ mov al,cl
+ and al,1
+ jnz oddwidth3
+
+ mov bl,cl
+ mov bh,0
+ shr bx,1
+ mov ax,offset cs:width0
+ sub ax,bx
+ mov cl,ch
+ mov ch,0
+multiloop5: call ax
+ add di,dx
+ loop multiloop5
+ ret
+
+oddwidth3: mov bl,cl
+ mov bh,0
+ shr bx,1
+ mov ax,offset cs:width0
+ sub ax,bx
+ mov cl,ch
+ mov ch,0
+multiloop6: call ax
+ movsb
+ add di,dx
+ loop multiloop6
+ ret
+
+
+ endp
+
+
+
+
+
+
+
+
+
+Multidump proc near ;di,bx = dest x,y
+ ;cl,ch = size
+ mov dx,0a000h
+ mov es,dx
+ mov ds,workspace
+
+ mov ax,bx
+ mov bx,screenwidth
+ mul bx
+ add di,ax
+ mov dx,screenwidth
+ mov si,di
+
+ mov al,cl
+ and al,1
+ jnz oddwidth
+
+ mov bl,cl
+ mov bh,0
+ shr bx,1
+ mov ax,offset cs:width0
+ sub ax,bx
+ mov bl,cl
+ mov bh,0
+ neg bx
+ add bx,dx
+ mov cl,ch
+ mov ch,0
+multiloop1: call ax
+ add di,bx
+ add si,bx
+ loop multiloop1
+ ret
+
+oddwidth: mov bl,cl
+ mov bh,0
+ shr bx,1
+ mov ax,offset cs:width0
+ sub ax,bx
+ mov bl,cl
+ mov bh,0
+ neg bx
+ add bx,screenwidth
+ mov cl,ch
+ mov ch,0
+multiloop2: call ax
+ movsb
+ add di,bx
+ add si,bx
+ loop multiloop2
+ ret
+
+ endp
+
+
+
+
+
+Width160 proc near
+
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+width128: movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+width110: movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+width88: movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+width80: movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+width63: movsw
+width62: movsw
+width61: movsw
+width60: movsw
+width59: movsw
+width58: movsw
+width57: movsw
+width56: movsw
+width55: movsw
+width54: movsw
+width53: movsw
+width52: movsw
+width51: movsw
+width50: movsw
+width49: movsw
+width48: movsw
+width47: movsw
+width46: movsw
+width45: movsw
+width44: movsw
+width43: movsw
+width42: movsw
+width41: movsw
+width40: movsw
+width39: movsw
+width38: movsw
+width37: movsw
+width36: movsw
+width35: movsw
+width34: movsw
+width33: movsw
+width32: movsw
+width31: movsw
+width30: movsw
+width29: movsw
+width28: movsw
+width27: movsw
+width26: movsw
+width25: movsw
+width24: movsw
+width23: movsw
+width22: movsw
+width21: movsw
+width20: movsw
+width19: movsw
+width18: movsw
+width17: movsw
+width16: movsw
+width15: movsw
+width14: movsw
+width13: movsw
+width12: movsw
+width11: movsw
+width10: movsw
+width9: movsw
+width8: movsw
+width7: movsw
+width6: movsw
+width5: movsw
+width4: movsw
+width3: movsw
+width2: movsw
+width1: movsw
+width0: ret
+
+ endp
+
+
+
+
+
+
+
+
+
+Doblocks proc near
+
+ mov es,workspace
+ mov ax,mapady
+ mov cx,screenwidth
+ mul cx
+ mov di,mapadx
+ add di,ax
+
+ mov al,mapy
+ mov ah,0
+ mov bx,mapwidth
+ mul bx
+ mov bl,mapx
+ mov bh,0
+ add ax,bx
+
+ mov si,map
+ add si,ax
+
+ mov cx,10
+loop120: push di cx
+ mov cx,11
+loop124: push cx di
+
+ mov ds,mapdata
+ lodsb
+ mov ds,backdrop
+
+ push si
+ cmp al,0
+ jz zeroblock
+ mov ah,al
+ mov al,0
+ mov si,blocks
+ add si,ax
+ mov bh,14
+
+
+ mov bh,4
+firstbitofblock: movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ add di,screenwidth-16
+ dec bh
+ jnz firstbitofblock
+
+ mov bh,12
+loop125: movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ movsw
+ mov ax,0dfdfh
+ stosw
+ stosw
+
+ add di,screenwidth-20
+ dec bh
+ jnz loop125
+
+ add di,4
+ mov ax,0dfdfh
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ add di,screenwidth-16
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ add di,screenwidth-16
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ add di,screenwidth-16
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+ stosw
+
+
+zeroblock: pop si
+
+ pop di cx
+ add di,16
+ loop loop124
+ add si,mapwidth-11
+ pop cx di
+ add di,screenwidth*16
+ loop loop120
+ ret
+
+ endp
+
+
+
+
+
+
+
+;----------------------------------------------General sprite output routine----
+
+Showframe proc near ; shows a frame from sprites
+
+ push dx ax ; es=destination
+ mov cx,ax ; ds=source
+ and cx,511 ; di=x, bx=y
+ add cx,cx ; al=frame number
+ mov si,cx ; ah=effects flag
+ add cx,cx
+ add si,cx
+ cmp word ptr [si],0
+ jnz notblankshow
pop ax dx
- mov cx,0
- ret
-
-notblankshow: test ah,128
- jnz skipoffsets
- mov al,[si+4]
- mov ah,0
- add di,ax
- mov al,[si+5]
- mov ah,0
- add bx,ax
-skipoffsets: mov cx,[si+0]
- mov ax,[si+2]
- add ax,2080
- mov si,ax
- pop ax dx
- cmp ah,0
- jz noeffects
-
- test ah,128
- jz notcentred
- push ax
- mov al,cl
- mov ah,0
- shr ax,1
- sub di,ax
- mov al,ch
- mov ah,0
- shr ax,1
- sub bx,ax
- pop ax
-
-notcentred: test ah,64
- jz notdiffdest
- push cx
- call frameoutfx
- pop cx
- ret
-
-notdiffdest: test ah,8
- jz notprintlist
- push ax
- mov ax,di
- sub ax,mapadx
- push bx
- sub bx,mapady
- mov ah,bl
- pop bx
- ;call addtoprintlist
- pop ax
-
-notprintlist: test ah,4
- jz notflippedx
- mov dx,screenwidth
- mov es,workspace
- push cx
- call frameoutfx
- pop cx
- ret
-
-notflippedx: test ah,2
- jz notnomask
- mov dx,screenwidth
- mov es,workspace
- push cx
- call frameoutnm
- pop cx
- ret
-
-notnomask: test ah,32
- jz noeffects
- mov dx,screenwidth
- mov es,workspace
- push cx
- call frameoutbh
- pop cx
- ret
-
-noeffects: mov dx,screenwidth
- mov es,workspace
- push cx
- call frameoutv
- pop cx ; returns size printed in cx
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Frameoutv proc near
-
- push dx
- mov ax,bx
- mov bx,dx
- mul bx
- add di,ax
- pop dx
-
- push cx
- mov ch,0
- sub dx,cx
- pop cx
-
-frameloop1: push cx
- mov ch,0
-
-frameloop2: lodsb
- cmp al,0
- jnz backtosolid
-backtoother: inc di
- loop frameloop2
- pop cx
- add di,dx
- dec ch
- jnz frameloop1
- ret
-
-frameloop3: lodsb
- cmp al,0
- jz backtoother
-backtosolid: stosb
- loop frameloop3
- pop cx
- add di,dx
- dec ch
- jnz frameloop1
- ret
-
- endp
-
-
-
-
-
-
-Frameoutnm proc near
-
- push dx
- mov ax,bx
- mov bx,dx
- mul bx
- add di,ax
- pop dx
-
- push cx
- mov ch,0
- sub dx,cx
- pop cx
-
- mov al,cl
- and al,1
- jnz oddwidthframe
-
- mov bl,cl
- mov bh,0
- mov ax,offset cs:width0
- shr bx,1
- sub ax,bx
- mov cl,ch
- mov ch,0
-nmloop1: call ax
- add di,dx
- loop nmloop1
- ret
-
-oddwidthframe: mov bl,cl
- mov bh,0
- shr bx,1
- mov ax,offset cs:width0
- sub ax,bx
- mov cl,ch
- mov ch,0
-nmloop2: call ax
- movsb
- add di,dx
- loop nmloop2
- ret
-
- endp
-
-
-
-
-
-
-Frameoutbh proc near
-
- push dx
- mov ax,bx
- mov bx,dx
- mul bx
- add di,ax
- pop dx
-
- push cx
- mov ch,0
- sub dx,cx
- pop cx
-
-bhloop2: push cx
- mov ch,0
- mov ah,255
-bhloop1: cmp [es:di],ah
- jnz nofill
- movsb
- loop bhloop1
- jmp nextline
-nofill: inc di
- inc si
- loop bhloop1
-nextline: add di,dx
- pop cx
- dec ch
- jnz bhloop2
- ret
-
- endp
-
-
-
-
-
-
-
-Frameoutfx proc near
-
- push dx
- mov ax,bx
- mov bx,dx
- mul bx
- add di,ax
- pop dx
-
- push cx
- mov ch,0
- add dx,cx
- pop cx
-
-frameloopfx1: push cx
- mov ch,0
-
-frameloopfx2: lodsb
- cmp al,0
- jnz backtosolidfx
-backtootherfx: dec di
- loop frameloopfx2
- pop cx
- add di,dx
- dec ch
- jnz frameloopfx1
- ret
-
-frameloopfx3: lodsb
- cmp al,0
- jz backtootherfx
-backtosolidfx: mov [es:di],al
- dec di
- loop frameloopfx3
- pop cx
- add di,dx
- dec ch
- jnz frameloopfx1
- ret
-
- endp
-
-
-
-
-;---------------------------------------------------Transfers for extra data----
-
-Transferinv proc near
-
- mov di,exframepos
- push di
- mov al,expos
- mov ah,0
- mov bx,ax
- add ax,ax
- add ax,bx
- inc ax
- mov cx,6
- mul cx
- mov es,extras
- mov bx,exframedata
- add bx,ax
- add di,exframes
-
- push bx
- mov al,itemtotran
- mov ah,0
- mov bx,ax
- add ax,ax
- add ax,bx
- inc ax
- mov cx,6
- mul cx
- mov ds,freeframes
- mov bx,frframedata
- add bx,ax
- mov si,frframes
- mov al,[bx]
- mov ah,0
- mov cl,[bx+1]
- mov ch,0
- add si,[bx+2] ;we have si, and length
- mov dx,[bx+4]
- pop bx
- mov [es:bx+0],al
- mov [es:bx+1],cl
- mov [es:bx+4],dx
-
- mul cx
- mov cx,ax
- push cx
- rep movsb
- pop cx
- pop ax
- mov [es:bx+2],ax
- add exframepos,cx
- ret
-
- endp
-
-
-
-
-
-
-
-
-
-
-Transfermap proc near
-
- mov di,exframepos
- push di
- mov al,expos
- mov ah,0
- mov bx,ax
- add ax,ax
- add ax,bx
- mov cx,6
- mul cx
- mov es,extras
- mov bx,exframedata
- add bx,ax
- add di,exframes
-
- push bx
- mov al,itemtotran
- mov ah,0
- mov bx,ax
- add ax,ax
- add ax,bx
- mov cx,6
- mul cx
- mov ds,freeframes
- mov bx,frframedata
- add bx,ax
- mov si,frframes
- mov al,[bx]
- mov ah,0
- mov cl,[bx+1]
- mov ch,0
- add si,[bx+2] ;we have si, and length
- mov dx,[bx+4]
- pop bx
- mov [es:bx+0],al
- mov [es:bx+1],cl
- mov [es:bx+4],dx
-
- mul cx
- mov cx,ax
- push cx
- rep movsb
- pop cx
- pop ax
- mov [es:bx+2],ax
- add exframepos,cx
- ret
-
- endp
-
-
-;------------------------------------------------------------------Filenames----
-
-
-Spritename1 db "DREAMWEB.S00",0
-Spritename3 db "DREAMWEB.S02",0
-
-Idname db "INSTALL.DAT",0
-
-Characterset1 db "DREAMWEB.C00",0
-Characterset2 db "DREAMWEB.C01",0
-Characterset3 db "DREAMWEB.C02",0
-
-Samplename db "DREAMWEB.V00",0
-
-Basicsample db "DREAMWEB.V99",0
-
-Icongraphics0 db "DREAMWEB.G00",0
-Icongraphics1 db "DREAMWEB.G01",0
-Extragraphics1 db "DREAMWEB.G02",0
-Icongraphics8 db "DREAMWEB.G08",0
-Mongraphicname db "DREAMWEB.G03",0
-Mongraphics2 db "DREAMWEB.G07",0
-Cityname db "DREAMWEB.G04",0
-Travelgraphic1 db "DREAMWEB.G05",0
-Travelgraphic2 db "DREAMWEB.G06",0
-Diarygraphic db "DREAMWEB.G14",0
-
-Monitorfile1 db "DREAMWEB.T01",0
-Monitorfile2 db "DREAMWEB.T02",0
-Monitorfile10 db "DREAMWEB.T10",0 ;News items 10-13
-Monitorfile11 db "DREAMWEB.T11",0
-Monitorfile12 db "DREAMWEB.T12",0
-Monitorfile13 db "DREAMWEB.T13",0
-Monitorfile20 db "DREAMWEB.T20",0
-Monitorfile21 db "DREAMWEB.T21",0 ;Ryan's private stuff
-Monitorfile22 db "DREAMWEB.T22",0 ;Use for blank carts
-Monitorfile23 db "DREAMWEB.T23",0 ;Use for edens cart
-Monitorfile24 db "DREAMWEB.T24",0 ;Use for church cart
-Foldertext db "DREAMWEB.T50",0
-Diarytext db "DREAMWEB.T51",0
-Puzzletextname db "DREAMWEB.T80",0 ;puzzle text
-Traveltextname db "DREAMWEB.T81",0 ;location descriptions
-Introtextname db "DREAMWEB.T82",0 ;intro sequence
-Endtextname db "DREAMWEB.T83",0 ;end sequence/credits
-Commandtextname db "DREAMWEB.T84",0 ;commands
-
-Volumetabname db "DREAMWEB.VOL",0
-
-Foldergraphic1 db "DREAMWEB.G09",0
-Foldergraphic2 db "DREAMWEB.G10",0
-Foldergraphic3 db "DREAMWEB.G11",0
-Symbolgraphic db "DREAMWEB.G12",0
-Gungraphic db "DREAMWEB.G13",0
-Monkface db "DREAMWEB.G15",0
-
-Title0graphics db "DREAMWEB.I00",0
-Title1graphics db "DREAMWEB.I01",0
-Title2graphics db "DREAMWEB.I02",0
-Title3graphics db "DREAMWEB.I03",0
-Title4graphics db "DREAMWEB.I04",0
-Title5graphics db "DREAMWEB.I05",0
-Title6graphics db "DREAMWEB.I06",0
-Title7graphics db "DREAMWEB.I07",0
-
-Palettescreen db "DREAMWEB.PAL",0
-
-
+ mov cx,0
+ ret
+
+notblankshow: test ah,128
+ jnz skipoffsets
+ mov al,[si+4]
+ mov ah,0
+ add di,ax
+ mov al,[si+5]
+ mov ah,0
+ add bx,ax
+skipoffsets: mov cx,[si+0]
+ mov ax,[si+2]
+ add ax,2080
+ mov si,ax
+ pop ax dx
+ cmp ah,0
+ jz noeffects
+
+ test ah,128
+ jz notcentred
+ push ax
+ mov al,cl
+ mov ah,0
+ shr ax,1
+ sub di,ax
+ mov al,ch
+ mov ah,0
+ shr ax,1
+ sub bx,ax
+ pop ax
+
+notcentred: test ah,64
+ jz notdiffdest
+ push cx
+ call frameoutfx
+ pop cx
+ ret
+
+notdiffdest: test ah,8
+ jz notprintlist
+ push ax
+ mov ax,di
+ sub ax,mapadx
+ push bx
+ sub bx,mapady
+ mov ah,bl
+ pop bx
+ ;call addtoprintlist
+ pop ax
+
+notprintlist: test ah,4
+ jz notflippedx
+ mov dx,screenwidth
+ mov es,workspace
+ push cx
+ call frameoutfx
+ pop cx
+ ret
+
+notflippedx: test ah,2
+ jz notnomask
+ mov dx,screenwidth
+ mov es,workspace
+ push cx
+ call frameoutnm
+ pop cx
+ ret
+
+notnomask: test ah,32
+ jz noeffects
+ mov dx,screenwidth
+ mov es,workspace
+ push cx
+ call frameoutbh
+ pop cx
+ ret
+
+noeffects: mov dx,screenwidth
+ mov es,workspace
+ push cx
+ call frameoutv
+ pop cx ; returns size printed in cx
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Frameoutv proc near
+
+ push dx
+ mov ax,bx
+ mov bx,dx
+ mul bx
+ add di,ax
+ pop dx
+
+ push cx
+ mov ch,0
+ sub dx,cx
+ pop cx
+
+frameloop1: push cx
+ mov ch,0
+
+frameloop2: lodsb
+ cmp al,0
+ jnz backtosolid
+backtoother: inc di
+ loop frameloop2
+ pop cx
+ add di,dx
+ dec ch
+ jnz frameloop1
+ ret
+
+frameloop3: lodsb
+ cmp al,0
+ jz backtoother
+backtosolid: stosb
+ loop frameloop3
+ pop cx
+ add di,dx
+ dec ch
+ jnz frameloop1
+ ret
+
+ endp
+
+
+
+
+
+
+Frameoutnm proc near
+
+ push dx
+ mov ax,bx
+ mov bx,dx
+ mul bx
+ add di,ax
+ pop dx
+
+ push cx
+ mov ch,0
+ sub dx,cx
+ pop cx
+
+ mov al,cl
+ and al,1
+ jnz oddwidthframe
+
+ mov bl,cl
+ mov bh,0
+ mov ax,offset cs:width0
+ shr bx,1
+ sub ax,bx
+ mov cl,ch
+ mov ch,0
+nmloop1: call ax
+ add di,dx
+ loop nmloop1
+ ret
+
+oddwidthframe: mov bl,cl
+ mov bh,0
+ shr bx,1
+ mov ax,offset cs:width0
+ sub ax,bx
+ mov cl,ch
+ mov ch,0
+nmloop2: call ax
+ movsb
+ add di,dx
+ loop nmloop2
+ ret
+
+ endp
+
+
+
+
+
+
+Frameoutbh proc near
+
+ push dx
+ mov ax,bx
+ mov bx,dx
+ mul bx
+ add di,ax
+ pop dx
+
+ push cx
+ mov ch,0
+ sub dx,cx
+ pop cx
+
+bhloop2: push cx
+ mov ch,0
+ mov ah,255
+bhloop1: cmp [es:di],ah
+ jnz nofill
+ movsb
+ loop bhloop1
+ jmp nextline
+nofill: inc di
+ inc si
+ loop bhloop1
+nextline: add di,dx
+ pop cx
+ dec ch
+ jnz bhloop2
+ ret
+
+ endp
+
+
+
+
+
+
+
+Frameoutfx proc near
+
+ push dx
+ mov ax,bx
+ mov bx,dx
+ mul bx
+ add di,ax
+ pop dx
+
+ push cx
+ mov ch,0
+ add dx,cx
+ pop cx
+
+frameloopfx1: push cx
+ mov ch,0
+
+frameloopfx2: lodsb
+ cmp al,0
+ jnz backtosolidfx
+backtootherfx: dec di
+ loop frameloopfx2
+ pop cx
+ add di,dx
+ dec ch
+ jnz frameloopfx1
+ ret
+
+frameloopfx3: lodsb
+ cmp al,0
+ jz backtootherfx
+backtosolidfx: mov [es:di],al
+ dec di
+ loop frameloopfx3
+ pop cx
+ add di,dx
+ dec ch
+ jnz frameloopfx1
+ ret
+
+ endp
+
+
+
+
+;---------------------------------------------------Transfers for extra data----
+
+Transferinv proc near
+
+ mov di,exframepos
+ push di
+ mov al,expos
+ mov ah,0
+ mov bx,ax
+ add ax,ax
+ add ax,bx
+ inc ax
+ mov cx,6
+ mul cx
+ mov es,extras
+ mov bx,exframedata
+ add bx,ax
+ add di,exframes
+
+ push bx
+ mov al,itemtotran
+ mov ah,0
+ mov bx,ax
+ add ax,ax
+ add ax,bx
+ inc ax
+ mov cx,6
+ mul cx
+ mov ds,freeframes
+ mov bx,frframedata
+ add bx,ax
+ mov si,frframes
+ mov al,[bx]
+ mov ah,0
+ mov cl,[bx+1]
+ mov ch,0
+ add si,[bx+2] ;we have si, and length
+ mov dx,[bx+4]
+ pop bx
+ mov [es:bx+0],al
+ mov [es:bx+1],cl
+ mov [es:bx+4],dx
+
+ mul cx
+ mov cx,ax
+ push cx
+ rep movsb
+ pop cx
+ pop ax
+ mov [es:bx+2],ax
+ add exframepos,cx
+ ret
+
+ endp
+
+
+
+
+
+
+
+
+
+
+Transfermap proc near
+
+ mov di,exframepos
+ push di
+ mov al,expos
+ mov ah,0
+ mov bx,ax
+ add ax,ax
+ add ax,bx
+ mov cx,6
+ mul cx
+ mov es,extras
+ mov bx,exframedata
+ add bx,ax
+ add di,exframes
+
+ push bx
+ mov al,itemtotran
+ mov ah,0
+ mov bx,ax
+ add ax,ax
+ add ax,bx
+ mov cx,6
+ mul cx
+ mov ds,freeframes
+ mov bx,frframedata
+ add bx,ax
+ mov si,frframes
+ mov al,[bx]
+ mov ah,0
+ mov cl,[bx+1]
+ mov ch,0
+ add si,[bx+2] ;we have si, and length
+ mov dx,[bx+4]
+ pop bx
+ mov [es:bx+0],al
+ mov [es:bx+1],cl
+ mov [es:bx+4],dx
+
+ mul cx
+ mov cx,ax
+ push cx
+ rep movsb
+ pop cx
+ pop ax
+ mov [es:bx+2],ax
+ add exframepos,cx
+ ret
+
+ endp
+
+
+;------------------------------------------------------------------Filenames----
+
+
+Spritename1 db "DREAMWEB.S00",0
+Spritename3 db "DREAMWEB.S02",0
+
+Idname db "INSTALL.DAT",0
+
+Characterset1 db "DREAMWEB.C00",0
+Characterset2 db "DREAMWEB.C01",0
+Characterset3 db "DREAMWEB.C02",0
+
+Samplename db "DREAMWEB.V00",0
+
+Basicsample db "DREAMWEB.V99",0
+
+Icongraphics0 db "DREAMWEB.G00",0
+Icongraphics1 db "DREAMWEB.G01",0
+Extragraphics1 db "DREAMWEB.G02",0
+Icongraphics8 db "DREAMWEB.G08",0
+Mongraphicname db "DREAMWEB.G03",0
+Mongraphics2 db "DREAMWEB.G07",0
+Cityname db "DREAMWEB.G04",0
+Travelgraphic1 db "DREAMWEB.G05",0
+Travelgraphic2 db "DREAMWEB.G06",0
+Diarygraphic db "DREAMWEB.G14",0
+
+Monitorfile1 db "DREAMWEB.T01",0
+Monitorfile2 db "DREAMWEB.T02",0
+Monitorfile10 db "DREAMWEB.T10",0 ;News items 10-13
+Monitorfile11 db "DREAMWEB.T11",0
+Monitorfile12 db "DREAMWEB.T12",0
+Monitorfile13 db "DREAMWEB.T13",0
+Monitorfile20 db "DREAMWEB.T20",0
+Monitorfile21 db "DREAMWEB.T21",0 ;Ryan's private stuff
+Monitorfile22 db "DREAMWEB.T22",0 ;Use for blank carts
+Monitorfile23 db "DREAMWEB.T23",0 ;Use for edens cart
+Monitorfile24 db "DREAMWEB.T24",0 ;Use for church cart
+Foldertext db "DREAMWEB.T50",0
+Diarytext db "DREAMWEB.T51",0
+Puzzletextname db "DREAMWEB.T80",0 ;puzzle text
+Traveltextname db "DREAMWEB.T81",0 ;location descriptions
+Introtextname db "DREAMWEB.T82",0 ;intro sequence
+Endtextname db "DREAMWEB.T83",0 ;end sequence/credits
+Commandtextname db "DREAMWEB.T84",0 ;commands
+
+Volumetabname db "DREAMWEB.VOL",0
+
+Foldergraphic1 db "DREAMWEB.G09",0
+Foldergraphic2 db "DREAMWEB.G10",0
+Foldergraphic3 db "DREAMWEB.G11",0
+Symbolgraphic db "DREAMWEB.G12",0
+Gungraphic db "DREAMWEB.G13",0
+Monkface db "DREAMWEB.G15",0
+
+Title0graphics db "DREAMWEB.I00",0
+Title1graphics db "DREAMWEB.I01",0
+Title2graphics db "DREAMWEB.I02",0
+Title3graphics db "DREAMWEB.I03",0
+Title4graphics db "DREAMWEB.I04",0
+Title5graphics db "DREAMWEB.I05",0
+Title6graphics db "DREAMWEB.I06",0
+Title7graphics db "DREAMWEB.I07",0
+
+Palettescreen db "DREAMWEB.PAL",0
+
+
 \ No newline at end of file