2011-06-21 10:35:34 +02:00

564 lines
9.3 KiB
NASM

;Copyright (c) 1990-2011 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
;---------------------------------------------------Equates and definitions----
Inputport equ 63h
Mapwidth equ 66 ;132/2
Maplength equ 60 ;6/2
Tablesize equ 32 ;size of each entry in spritetable
Itempicsize equ 44 ;size of inventory slots
Opsy equ 52
Opsx equ 60
Inventx equ 80
Inventy equ 58
Zoomx equ 8
Zoomy equ 132
Keypadx equ 36+112
Keypady equ 72
Diaryx equ 68+24
Diaryy equ 48+12
Symbolx equ 64
Symboly equ 56
Menux equ 80+40
Menuy equ 60
if foreign
Undertextsizex equ 228
Undertextsizey equ 13
Undertimedysize equ 30
else
Undertextsizex equ 180
Undertextsizey equ 10
Undertimedysize equ 24
endif
Numchanges equ 250
Textunder equ 0 ;offsets for items in buffer segment
Openinvlist equ textunder+(undertextsizex*undertextsizey)
Ryaninvlist equ openinvlist+32
Pointerback equ ryaninvlist+60
Mapflags equ pointerback+(32*32)
Startpal equ mapflags+(11*10*3)
Endpal equ startpal+768
Maingamepal equ endpal+768
Spritetable equ maingamepal+768
Setlist equ spritetable+(32*tablesize)
Freelist equ setlist+(128*5)
Exlist equ freelist+(80*5)
Peoplelist equ exlist+(100*5)
Zoomspace equ peoplelist+(12*5)
Printedlist equ zoomspace+(46*40)
Listofchanges equ printedlist+(5*80)
Undertimedtext equ listofchanges+(numchanges*4)
Rainlist equ undertimedtext+(256*undertimedysize)
Initialreelrouts equ rainlist+(6*64)
Initialvars equ initialreelrouts+lenofreelrouts
Lengthofbuffer equ initialvars+lengthofvars
Flags equ 0 ;offsets of items in backdrop segment
Blocks equ flags+192
Map equ 0
Lengthofmap equ map+(mapwidth*maplength)
Intextdat equ 0
Intext equ intextdat+(38*2)
Blocktextdat equ 0
Blocktext equ blocktextdat+(98*2)
Settextdat equ 0
Settext equ settextdat+(130*2)
Freetextdat equ 0
Freetext equ freetextdat+(82*2)
Numexobjects equ 114
Exframeslen equ 30000
Extextlen equ 18000
Exframedata equ 0
Exframes equ exframedata+2080
Exdata equ exframes+exframeslen
Extextdat equ exdata+(16*numexobjects)
Extext equ extextdat+((numexobjects+2)*2)
Lengthofextra equ extext+extextlen
Framedata equ 0
Frames equ framedata+2080
Frframedata equ 0
Frframes equ frframedata+2080
Personframes equ 0
Persontxtdat equ personframes+24
Persontext equ persontxtdat+(1026*2)
Pathdata equ 0
Reellist equ pathdata+(36*144)
Lenofmapstore equ 22*8*20*8
Maplen equ mapwidth*maplength
Freedatlen equ 16*80
Setdatlen equ 64*128
Textstart equ 66*2
;-----------------------------------------------------------------Variables----
startvars db 0
progresspoints db 0
watchon db 0
shadeson db 0
secondcount db 0
minutecount db 30
hourcount db 19
zoomon db 1
location db 0
expos db 0
exframepos dw 0
extextpos dw 0
card1money dw 0
listpos dw 0
ryanpage db 0
watchingtime dw 0
reeltowatch dw -1 ;reel plays from here in mode 0
endwatchreel dw 0 ;and stops here. Mode set to 1
speedcount db 0
watchspeed db 0
reeltohold dw -1 ;if mode is 1 hold on this reel
endofholdreel dw -1 ;if mode is 2 then play to end of
watchmode db -1 ;hold reel. Set mode back to -1
destafterhold db 0 ;set walking destination.
newsitem db 0
liftflag db 0
liftpath db 0
lockstatus db 1
doorpath db 0
counttoopen db 0
counttoclose db 0
rockstardead db 0
generaldead db 0
sartaindead db 0
aidedead db 0
beenmugged db 0
gunpassflag db 0
canmovealtar db 0
talkedtoattendant db 0
talkedtosparky db 0
talkedtoboss db 0
talkedtorecep db 0
cardpassflag db 0
madmanflag db 0
keeperflag db 0
lasttrigger db 0
mandead db 0
seed db 1,2,3
needtotravel db 0
throughdoor db 0
newobs db 0
ryanon db 255
combatcount db 0
lastweapon db -1
dreamnumber db 0
roomafterdream db 0
shakecounter db 48
lengthofvars equ $-startvars
speechcount db 0
charshift dw 0
kerning db 0
brightness db 0
roomloaded db 0
didzoom db 0
linespacing dw 10
textaddressx dw 13
textaddressy dw 182 ;address on screen for text
textlen db 0
lastxpos dw 0
icontop dw 0
iconleft dw 0
itemframe db 0
itemtotran db 0
roomad dw 0
oldsubject dw 0
withobject db 0
withtype db 0
lookcounter dw 0
command db 0
commandtype db 0
oldcommandtype db 0
objecttype db 0
getback db 0
invopen db 0
mainmode db 0
pickup db 0
lastinvpos db 0
examagain db 0
newtextline db 0
openedob db 0
openedtype db 0
oldmapadx dw 0
oldmapady dw 0
mapadx dw 0
mapady dw 0
mapoffsetx dw 104
mapoffsety dw 38
mapxstart dw 0
mapystart dw 0
mapxsize db 0
mapysize db 0
havedoneobs db 0
manisoffscreen db 0
rainspace db 0
facing db 0
leavedirection db 0
turntoface db 0
turndirection db 0
maintimer dw 0
introcount db 0
arrowad dw 0
currentkey db 0
oldkey db 0
useddirection db 0
currentkey2 db 0
timercount db 0
oldtimercount db 0
mapx db 0
mapy db 0
newscreen db 0
ryanx db 0
ryany db 0
lastflag db 0
lastflagex db 0
flagx db 0
flagy db 0
currentex db 0
currentfree db 0
currentframe dw 0
framesad dw 0
dataad dw 0
frsegment dw 0
objectx dw 0
objecty dw 0
offsetx dw 0
offsety dw 0
savesize dw 0
savesource dw 0
savex db 0
savey db 0
currentob db 0
priority db 0
destpos db 0
reallocation db 0 ;----------;some rooms have more than one
roomnum db 0 ;place in the Roomdata list, to
;account for different start points
nowinnewroom db 0 ;this variable holds the rooms
resetmanxy db 0 ;real value - ie:which file it's in
newlocation db -1 ;if set then room is loaded at end of watch mode, or straight away if not in watch mode
autolocation db -1
mustload db 0
answered db 0
saidno db 0
doorcheck1 db 0
doorcheck2 db 0
doorcheck3 db 0
doorcheck4 db 0
mousex dw 0
mousey dw 0
mousebutton dw 0
mousebutton1 dw 0
mousebutton2 dw 0
mousebutton3 dw 0
mousebutton4 dw 0
oldbutton dw 0
oldx dw 0
oldy dw 0
lastbutton dw 0
oldpointerx dw 0
oldpointery dw 0
delherex dw 0
delherey dw 0
pointerxs db 32
pointerys db 32
delxs db 0
delys db 0
pointerframe db 0
pointerpower db 0
auxpointerframe db 0
pointermode db 0
pointerspeed db 0
pointercount db 0
inmaparea db 0
reelpointer dw 0
slotdata db 0
thisslot db 0
slotflags db 0
takeoff dw 0
talkmode db 0
talkpos db 0
character db 0
persondata dw 0
talknum db 0
numberinroom db 0
currentcel db 0
oldselection db 0
stopwalking db 0
mouseon db 0
played dw 0
timer1 db 0
timer2 db 0
timer3 db 0
wholetimer dw 0
timer1to db 0
timer2to db 0
timer3to db 0
watchdump db 0
currentset dw 0
logonum db 0
oldlogonum db 0
newlogonum db 0
netseg dw 0
netpoint dw 0
keynum db 0
cursorstate db 0
pressed db 0
presspointer dw 0
graphicpress db 0
presscount db 0
keypadax dw 0
keypadcx dw 0
lightcount db 0
folderpage db 0
diarypage db 0
menucount db 0
symboltopx db 0
symboltopnum db 0
symboltopdir db 0
symbolbotx db 0
symbolbotnum db 0
symbolbotdir db 0
symboltolight db 0
symbol1 db 0
symbol2 db 0
symbol3 db 0
symbolnum db 0
dumpx dw 0
dumpy dw 0
walkandexam db 0
walkexamtype db 0
walkexamnum db 0
cursloc dw 0
curslocx dw 0
curslocy dw 0
curpos dw 0
monadx dw 0
monady dw 0
gotfrom dw 0
monsource dw 0
numtodo dw 0
timecount dw 0
counttotimed dw 0
timedseg dw 0
timedoffset dw 0
timedy db 0
timedx db 0
needtodumptimed db 0
;recordpos dw 0
;rechandle dw 0
handle dw 0
loadingorsave db 0 ;1 if load 2 if save
currentslot db 0
cursorpos db 0
colourpos db 0
fadedirection db 0
numtofade db 0
fadecount db 0
addtogreen db 0
addtored db 0
addtoblue db 0
lastsoundreel dw 0
soundbuffer dw 0
soundbufferad dw 0
soundbufferpage db 0
soundtimes db 0
needsoundbuff db 0
oldint9seg dw -1
oldint9add dw -1
oldint8seg dw -1
oldint8add dw -1
oldsoundintseg dw 0
oldsoundintadd dw 0
soundbaseadd dw 0
dsp_status dw 0
dsp_write dw 0
dmaaddress db 0
soundint db 5
sounddmachannel db 1
sampleplaying db 255
testresult db 0
currentirq db 0
speechloaded db 0
speechlength dw 0
volume db 0
volumeto db 0
volumedirection db 0
volumecount db 0
playblock db 0
wongame db 0
lasthardkey db 0
bufferin dw 0
bufferout dw 0
extras dw 0 ;for allocated memory
workspace dw 0 ;allocated mem for screen buffer
mapstore dw 0 ;allocated mem for copy of room
charset1 dw 0 ;allocated mem for normal charset
tempcharset dw 0 ;monitor char set
icons1 dw 0 ;allocated mem for on screen stuff
icons2 dw 0
buffers dw 0 ;allocated mem for buffers
mainsprites dw 0 ;allocated mem for Ryan sprites
backdrop dw 0
mapdata dw 0
sounddata dw 0
sounddata2 dw 0
recordspace dw 0
freedat dw 0
setdat dw 0
reel1 dw -1
reel2 dw -1
reel3 dw -1
roomdesc dw -1
freedesc dw -1
setdesc dw -1
blockdesc dw -1
setframes dw -1
freeframes dw -1
people dw -1
reels dw -1
commandtext dw -1
puzzletext dw -1
traveltext dw -1
tempgraphics dw -1
tempgraphics2 dw -1
tempgraphics3 dw -1
tempsprites dw -1
textfile1 dw -1
textfile2 dw -1
textfile3 dw -1
blinkframe db 23
blinkcount db 0
reasseschanges db 0 ; if it's a 1 then obname will assume that
pointerspath db 0 ;the command has changed.
manspath db 0 ;ie. from "walk to" to "Examine"
pointerfirstpath db 0
finaldest db 0
destination db 0
linestartx dw 0
linestarty dw 0
lineendx dw 0
lineendy dw 0
increment1 dw 0
increment2 dw 0
lineroutine db 0
linepointer db 0
linedirection db 0
linelength db 0
liftsoundcount db 0
emmhandle dw 0
emmpageframe dw 0
emmhardwarepage db 0
ch0emmpage dw 0
ch0offset dw 0
ch0blockstocopy dw 0
ch0playing db 0
ch0repeat db 0
ch0oldemmpage dw 0
ch0oldoffset dw 0
ch0oldblockstocopy dw 0
ch1playing db 255
ch1emmpage dw 0
ch1offset dw 0
ch1blockstocopy dw 0
ch1blocksplayed dw 0
soundbufferwrite dw 0
soundemmpage dw 0
speechemmpage dw 0
currentsample db -1
roomssample db 0
gameerror db 0
howmuchalloc dw 0