aboutsummaryrefslogtreecommitdiff
path: root/devtools/tasmrecover/dreamweb/object.asm
diff options
context:
space:
mode:
authorVladimir Menshakov2011-06-15 21:52:54 +0400
committerVladimir Menshakov2011-06-15 21:52:54 +0400
commitdfe83466b56a6bf382903c37aa520f282052b47f (patch)
tree79659068ca717c3080c551a1dc89af117dab6b83 /devtools/tasmrecover/dreamweb/object.asm
parentb97a5dcfb2e71d358274e017e4f1fdca02db4fa7 (diff)
downloadscummvm-rg350-dfe83466b56a6bf382903c37aa520f282052b47f.tar.gz
scummvm-rg350-dfe83466b56a6bf382903c37aa520f282052b47f.tar.bz2
scummvm-rg350-dfe83466b56a6bf382903c37aa520f282052b47f.zip
DREAMWEB: converted line endings to the unix format
Diffstat (limited to 'devtools/tasmrecover/dreamweb/object.asm')
-rw-r--r--devtools/tasmrecover/dreamweb/object.asm5208
1 files changed, 2604 insertions, 2604 deletions
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