aboutsummaryrefslogtreecommitdiff
path: root/engines/lure/diassembly/Lure_notes.txt
diff options
context:
space:
mode:
Diffstat (limited to 'engines/lure/diassembly/Lure_notes.txt')
-rw-r--r--engines/lure/diassembly/Lure_notes.txt182
1 files changed, 140 insertions, 42 deletions
diff --git a/engines/lure/diassembly/Lure_notes.txt b/engines/lure/diassembly/Lure_notes.txt
index f41b618c54..42facfaf90 100644
--- a/engines/lure/diassembly/Lure_notes.txt
+++ b/engines/lure/diassembly/Lure_notes.txt
@@ -81,16 +81,66 @@ character_check_room_change - Checks whether the given character is within the
Input: si = Character hotspot Id
di = Chracter animation slot
-character_update_frame - Handles updating a character's current frame
- Input: ?
- Output: ax = 1 for end of ?? list, 0 = frame successfully changed
+character_face_hotspot - Makes a given character face a given hotspot
+ Input: di = Character animation slot
+ si = Hotspot record being used
+
+character_face_hotspot_2 - Makes a given character face a given hotspot
+ Input: ax = Character Id
+ bx = Hotspot Id of object being used
+
+character_find_impinging_chars - Scans through the animation list for any
+ characters whose position is impinging that of the given character
+ Input: di = Character animation slot
+
+character_pathfind - Handles pathfinding a segment of a walking path to a
+ given destination
+ Input: ax = character Id
+ bx = Dest X Pos
+ cx = Dest Y Pos
+ dl = Hotspot[4Ch]
+ Output: added segment to the line path in data Hotspot[HS_MOVEMENT_SRC_OFFSET]
+ ax = 1 => end of pathfinding reached, 0 => pathfinding still needed
+
+character_reset_direction - Rounds off the given character's position, and sets
+ their current frame to the default frame for the character's
+ current direction
+ Input: si = Character hotspot Id
+ di = Character animation slot
+
+character_translate_movements - Translates a set of instructions of movement
+ instructions into a set of offsets to movement records
+ (containing frame number sequence and position changes) for each
+ direction, followed by the number of steps to go in that direction
+ Input: si = Hotspot offset
+ dx = Offset to a sequence of source movement data to process,
+ which consist of a repeating set of number of steps followed
+ by a direction number. It ends with a step count of 0ffffh
+ Output: Hotspot[HS_MOVEMENT_SRC_OFFSET] => translated movement data
+
+character_update_frame - Handles updating a character's current frame in a
+ movement sequence each tick.
+ Output: ax = 1 => for end of the path finding list (ie. at destination),
+ 0 => Some walking still remaining
+
+characters_impinging_check - Checks to see if the given character is close enough
+ to the player
+ Input: bx = First character hotspot record
+ si = Second character hotspot record
+ Output: ax = 1 -> Characters are close together, 0 -> Characters are not
+
+check_for_impinging_characters - Scans through the animation list for any
+ animations that are impinging the specified character
+ Input: si = Character hotspot record
+ Output: ZF = Set => Character found, Clear => No character found
+ bx = animation slot of found character
check_keypress - Non-blocking method to return the next pending keypress, if any
Output: zero-flag = if set, indicates no key was pending
al = character
clear_layer_rects - Clears the data structure storing the status of each 32x32
- rect in each layer of a room
+ rect in each layer of a room
confirm_quit - Displays a dialog asking the user whether they want to quit
Output: ZF = If set, indicates the user wants to quit
@@ -201,6 +251,10 @@ hotspots_load - Loads any hotspots registered for the current room into the
hotspots_unload - Unloads all hotspots from the animation list that don't have
the special hotspot Id of 0ffffh
+increment_action_offset - Moves the current action offset for the given
+ character to the next record position
+ Input: si = Character hotspot record
+
install_palette - Installs a sub-palette of 64 entries from a set of palettes,
each of which is 64*3 bytes long
Input: ax = index of sub-palette in list of sub-palettes
@@ -248,6 +302,24 @@ open_file2 - sets the default drive to the specified drive and then calls
the open_file method
Input: al=drive number
+pathfind_clear_covered_cells - Clears the cells covered by the base of a given
+ animation from being occupied in the path finding data block. This
+ prevents characters from walking through each other
+ Input: di = Animation slot
+
+pathfind_flag_covered_cells - Flags the cells covered by the base of a given
+ animation as occupied in the path finding data block. This
+ prevents characters from walking through each other
+ Input: di = Animation slot
+
+pathfind_get_cell - Returns the byte and bit index for the given animation's
+ position in the pathfinding data block for the room
+ Input: di = Animation slot
+ Output: bx = Byte offset in path finding data block
+ ax = Bit mask indicating which bit
+ cx = Number of bits covering the width of the animation
+ ZF = If set, animation is not onscreen
+
pause_for_input - Waits until either a key or a mouse button is pressed
player_inc_inventory_items - Checks if the specified hotspot is the player,
@@ -339,12 +411,19 @@ room_check_x_extents - Checks whether a given hotspot's position is within
the clipping x range for the room
Input: si = Hotspot
Output: ax = 0 = Hotspot within valid range, 1 = otherwise
+
room_exit_hs_get_pointer - Scans through a list of room exit hotspots that
connect to each other.
Input: ax = Hotspot Id
Output: si = Record Id for room exit hotspot join
bx = 2 or 8, representing whether the hotspot was #1 or #2 in the record
+room_exit_play_sound - Plays a sound for a room exit opening or closing if the
+ player is in the same room
+ Input: si = Room exit join record
+ bx = Index of active hotspot in join record
+ cx = 1 for door closing, 0 for door opening
+
room_handle_click - Checks to see if the mouse has been clicked, and if so,
handles the various things that can be done, such as closing floating
dialogs, showing the right-click menu, etc.
@@ -385,13 +464,6 @@ show_disk_cursor - Shows the disk cursor
show_startup - Shows the starting screens of the game, and then calls the
show_introduction method to show the animated introduction sequence
-skorl_caught_check - Checks to see if the Skorl is close enough to the player
- for it to 'catch' the player
- Input: bx = Player hotspot record
- si = Skorl hotspot record
- di = Skorl animation slot
- Output: ax = 1 -> Skorl is close to player, 0 -> Skorl is not
-
skorl_knockout - Runs the animation sequence of a Skorl knocking out the player
sleep - Sleeps for a given number of clock cycles (each being 1/18th of a second)
@@ -403,21 +475,6 @@ sleep_with_kbd_mouse_break - Pause with breakout by keypress and mouse
Output: carry = breakout occurred
zero = if set, indicates Escape was pressed
-sub23 - processing the loaded entry. Does not get called during the intro
-
- It seems that dx should always be a loaded entry? As one of the first
- things sub_74 does is add 8 to dx segment, representing a start at
- dx:80h, which is precisely where entries are loaded
-
-sub28 - Get data block. Seems to handle returning in SI a pointer to a block
- of data about a given Id (room #?). [SI+9] can be used to get the Id of
- the palette to use by ANDing with $ffe0 and subtracting 1
-
-sub_92 - Change character room and do other stuff
- Input: dx = new room number
- cx = new x
- bx = new y
-
sub_107 - Gets a ax (0 or 3) and bx pointer used later in a call to sub_132
to get a sequence offset
Input: ax = Hotspot Id
@@ -692,27 +749,38 @@ The format of hotspots are as follows:
static image)
23h 1 Colour offset start for source pixel data
24h 2 Offset for data in scripts2_seg, used in
- hotspot_script_execute. Also seems to be used by the
- player hotspot (and perhaps others?) as a table offset
- containing data for character movement
- 26h 2 ???
- 28h 2 ???
- 2Ah 1 Current frame number ?
+ hotspot_script_execute. Also seems to be used by
+ characters (including the player) as a table offset
+ containing data for movement sequence
+ 26h 2 Step counter - used as in incrementor when a character
+ is moving in a direction to determine when they have
+ reached the requisite number of steps required before
+ moving to the next direction in a path-finding sequence
+ 28h 2 Frame offset - used as a pointer within the movement
+ frames for a given direction to quickly retrieve the
+ position change and frame number in a walking sequence -
+ used along with offset 26h to handling walking
+ 2Ah 1 Current frame number
+ 2Bh 2 ???
+ 2Dh 2 Script Id of a hotspot the character is to use
+ 2Fh 2 Hotspot Id of a hotspot the character is to use
33h 2 ??? Talk data record
35h 1 Some kind of x offset (perhaps for centroid?)
36h 1 Some kind of y offset
37h 2 ???
39h 2 Stores the hotspot Id of the character being talked to
- 3Ch 2 Stores the String Id of a response
+ 3Ch 2 Stores the String Id of a response
42h 2 ??? Copy of selected hotspot
44h 1 ??? 0 or 2 for further actions in player_tick_proc
??? Copy of low byte of selected hotspot
-
+ 45h 2 Hotspot Script Id to use. I'm not yet sure why a
+ different field that 2Dh/2Fh to use
+ 47h 2 Hotspot Id to use.
50h 2 Character direction: 80h=up, 40h=down, 20h=left, 10h=right
52h 2 Hotspot Id for selected hotspot
54h 2 X ending position for character + 80h - 10h
56h 2 Y ending position for character + 80h
- 5Ah 2 For player (and other characters?) indicates the
+ 5Ah 2 For player and other characters indicates the
assigned offset in the data segment to load the
details of movement frames. Note that this gets copied
to offset 24h for use at runtime.
@@ -722,7 +790,23 @@ The format of hotspots are as follows:
consists of three bytes: a single byte command Id, and
an offset to a support data record.
-The player actions can be one of the following:
+Movement sequence
+=================
+When a character has to move, sub_90 is
+
+
+Character actions
+=================
+Character hotspots have a buffer for a set of current actions. Each record
+of this list consists of 5 bytes, with the following format:
+
+ Offset Size Meaning
+ ------ ---- -------
+ 0 1 Currenat atcion
+ 1 2 Pointer to support data structure
+ 3 2 ?? May be room number action occurs in
+
+The possible commands are listed below:
Command
-------
@@ -732,16 +816,25 @@ The player actions can be one of the following:
02 = Dispatch action*
Support data:
- word value = 10h
+ word value = action to perform
word value = hotspot Id of selected hotspot
+ [03] = Room Number
+
+ 03 = Execute Script
+
+ 04 = Processing walking path
05 = Walking in progress
+
* Note that actions (both looking at a hotspot and all other actions) are
handled by doing an initial dispatch of the action, then a standard walk sequence,
and finally dispatching the action again when the player is at the appropriate
proximity to the hotspot
+
+Actions Table
+=============
The actions table offset points to a list that indicates any actions for the
hotspot that have script sequences attached to them. The table has the following
format:
@@ -754,6 +847,8 @@ format:
3 2 Sequence offset
---------
+Animation Resources
+===================
The raw data for animations is stored in disk resources. They have the following
format:
@@ -821,7 +916,8 @@ aren't necessarily animated.
1Eh 2 So far it's only known use is to store the hotspot Id
of the character the special 'voice' animation is
associated with
- 22h 2 ???
+ 22h 2 Related to direction handling: 0 for up/down,
+ 4 for left/right
24h 2 So far it's only known use is as a countdown timer
for closing the special "voice" animation shown on
top of characters when they're speaking
@@ -918,15 +1014,17 @@ the same record. Each record is 17 bytes long, and the format is as follows:
0h 2 First hotspot Id of the pair
2h 1 Current frame number for hotspot #1
3h 1 Ending frame number for hotspot #1
- 4h 2 ???
+ 4h 1 Sound for hotspot #1 opening
+ 5h 1 Sound for hotspot #1 closing
6h 2 Second hotspot Id of the pair
8h 1 Current frame number for hotspot #2
9h 1 Ending frame number for hotspot #1
- Ah 2 ???
+ Ah 1 Sound for hotspot #1 opening
+ Bh 1 Sound for hotspot #2 closing
Ch 1 If zero, then exit is currently active. Non-zero
indicates that the exit is blocked
- Dh 2 ???
- Fh 2 ???
+ Dh 2 Pointer to first hotspot's record
+ Fh 2 Pointer to second hotspot's record
Sequence Table