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