Haven't found any bugs yet, but using A on B instead of B on A can sometimes make a difference. For example, it seems that using the cage on the hawk seems to have a slightly different animation from using the hawk on the cage.
uninvite.txt just contains all the text, and all the item names.
uniroom.txt lists the objects contained in each room.
Each room begins with the word "Room" followed by the room number. Then, for every object, the click rectangle is given, then the word "spr" if it is a sprite, followed by the object name, an and optional "when XX" which says that the object is only sometimes shown. Objects are named by what shows on the property screen, or with "Type-XX" where Type is one of the following:
Scenery - Stationary objects. Verbs: Examine, Use, Hit, Speak
FixCont - Stationary objects that contain items. Verbs: Examine, Open, Use, Close
Trash - Places where items can be discarded. Verbs: Examine, Open, Use, Close
Item - Objects that you can carry. Verbs: Examine, Use, Leave, Take
Cont - Items with other items inside. Verbs: Examine, Open, Use, Leave, Take, Close
Door - Doors. Verbs: Examine, Open, Close, Move
Magic - Spells. Verbs: Examine, Use, Speak
Some objects may accept other commands as well.
uniscpt.txt describes what happens when you perform an action. Lines that start with the name of an object followed by a verb mark the beginning of the code for that verb. Lines that start with a semicolon show the text that is displayed at that point. All other lines start with an address followed by the command that resides there.
The commands are:
text - Display text
jt - Jump if true
jf - Jump if false
call - Call subroutine
return - Return from subroutine
j - Jump
test - Test event flag
set - Set event flag
clear - Set event flag
isdooropen - Test if a door is open
opendoor - Open a door
closedoor - Close a door
has - Test if object was taken
takeaway - Set object as taken
drop - Set object as not taken
isgone - Is the object deleted
delete - Delete the object
replace - Undelete the object
hasit, takeitaway, dropit, isitgone, deleteit, replaceit - Same as above, object is implied
doorbetween - Pass between the specified rooms. Used in door scripts. If the door is closed, the action fails.
openthedoor - Open this door.
opendoorhere - Open a door in this room.
closethedoor - Close this door.
closedoorhere - Close a door in this room.
isroom - Test if we are in a specific room.
takeit - Take the current object
opencont - Opens the container.
isshown - Test if something is shown.
show - Show something.
hide - Hide something. The parameter to these commands corresponds to the "when" parameter in the room table.
redraw - Update and redraw all sprites.
getspell - Add a spell to your inventory.
useon - Select the object to use this object on.
longtext - Keep the text window open.
endlongtext - Do not keep the text window open.
name1 - Set item code in 0514.
name2 - Set item code in 0515.
switch - Jump to different locations depending on the object.
removeit - Remove the current object from your inventory.
remove - Remove something from your inventory.
this - Select the first object.
that - Select the second object.
gameover - End the game
closecont - Close the container.
dizzy - Shows dizzy message.
death - Shows death message.
gobetween - Pass between the specified rooms.
updateroom - Redraw the room.
removefromcont - Removes the item from the current container.
sound - Plays a sound
closecurpage - Close the current page.
countto - Counts using the specified counter to a given value.
flash - Flash the screen
animation - Display an animation
sometimes - True one out of four times
safe - Display safe puzzle
thisname - Set 0514 to the item that this script applies to.
isit - Check if it's the specified item.
wait - Wait for a number of frames
curobjname - Set 0514 to the selected item.
teleport - Teleport
cloud - Show Cloudisi message
update - Update sprite list
take - Take an item
spirit - When the spirit comes out of your sister.
rmvcont - Removes the current container.
gonosave - Go between rooms without making quicksave.
ending - Show the ending
isobj1 - Test if the first object is as specified
isobj2 - Test if the second object is as specified
Scripts are stored in bank 4 and in bank 7. The master table is at the beginning of bank 4 and is indexed by type: Scenery, FixCont, Trash, Item, Cont, Door, Magic, and more Scenery (shown as Scenery-80 and up in the dump). The sub-tables point to the list of verbs for each object of the given type. The verbs vary depending on the type of object. 6:$ACAB (1acbb in ROM file) lists objects that don't follow the usual pattern, and contains entries like this: type, index, replacement type, and ends with $FF. Type 8 has all the commands: examine, open, use, leave, take, close, hit, speak, move.