[Scummvm-cvs-logs] SF.net SVN: scummvm: [23418] scummvm/trunk/engines/lure/disassembly
dreammaster at users.sourceforge.net
dreammaster at users.sourceforge.net
Sat Jul 8 10:45:03 CEST 2006
Revision: 23418
Author: dreammaster
Date: 2006-07-08 01:44:53 -0700 (Sat, 08 Jul 2006)
ViewCVS: http://svn.sourceforge.net/scummvm/?rev=23418&view=rev
Log Message:
-----------
General additions of newly understood hotspot fields, further decoded talk handling, ratpouch being freed, and several more script methods
Modified Paths:
--------------
scummvm/trunk/engines/lure/disassembly/LURE.ASM
scummvm/trunk/engines/lure/disassembly/Lure_notes.txt
Modified: scummvm/trunk/engines/lure/disassembly/LURE.ASM
===================================================================
--- scummvm/trunk/engines/lure/disassembly/LURE.ASM 2006-07-08 08:43:52 UTC (rev 23417)
+++ scummvm/trunk/engines/lure/disassembly/LURE.ASM 2006-07-08 08:44:53 UTC (rev 23418)
@@ -92,8 +92,12 @@
NUM_ANIMATION_SLOTS equ 2dh
ANIMATION_SLOT_SIZE equ 29h
-NUM_HOTSPOT_ACTION_SLOTS equ 14h
-HOTSPOT_ACTION_SLOT_SIZE equ 8
+NUM_PAUSED_CHARS_SLOTS equ 14h
+PAUSED_CHAR_SLOT_SIZE equ 8
+PC_SRC_CHAR_ID equ 0
+PC_DEST_CHAR_ID equ 2
+PC_COUNTER equ 4
+PC_HOTSPOT_PTR equ 6
ACTION_GET equ 1
ACTION_PUSH equ 3
@@ -145,11 +149,11 @@
ANIM_HOTSPOT_ID equ 1Bh
ANIM_SKIP equ 1Dh
ANIM_VOICE_CHAR_ID equ 1Eh
-ANIM_V20 equ 20h
+ANIM_CTR equ 20h
ANIM_CHAR_RECT_Y equ 22h
ANIM_VOICE_CTR equ 24h
ANIM_DIRECTION equ 26h
-ANIM_UNKNOWN1 equ 27h
+ANIM_WALK_FLAG equ 27h
ANIM_START_COLOUR equ 28h
; Hotspot header record constants
@@ -160,6 +164,9 @@
; Hotspot record constants
+HS_DEST2_SET equ -1
+HS_DEST2_X equ -5
+HS_DEST2_Y equ -3
HS_ACTIONS equ 0
HS_FLAGS equ 3
HS_ACTIONS_OFFSET equ 04h
@@ -198,9 +205,9 @@
HS_DELAY_CTR equ 42h
HS_CHAR_MODE equ 44h
HS_TICK_SCRIPT_OFFSET equ 45h
-HS_USE2_HOTSPOT_ID equ 47h
+SCRIPT_HOTSPOT_ID equ 47h
HS_PATHFIND_COVERED equ 49h
-HS_V4A equ 4Ah
+HS_PAUSE_CTR equ 4Ah
HS_BLOCKED_FLAG equ 4Ch
HS_V4D equ 4Dh
HS_V4E equ 4Eh
@@ -236,7 +243,10 @@
PLAYER_HOTSPOT_ID equ 3E8h
RATPOUCH_HOTSPOT_ID equ 3E9h
SKORL_HOTSPOT_ID equ 3EAh
+GOEWIN_HOTSPOT_ID equ 3EFh
FIRST_OBJECT_HOTSPOT_ID equ 408h
+START_EXIT_HOTSPOT_ID equ 2710h
+BOTTLE_HOTSPOT_ID equ 2710h
; Room exit record constants
@@ -379,9 +389,21 @@
CHARMODE_4 equ 4
CHARMODE_CONVERSING equ 5
CHARMODE_6 equ 6
-CHARMODE_7 equ 7
+CHARMODE_7 equ 7
CHARMODE_8 equ 8
+; Pathfinder results
+PF_OK equ 1
+PF_DEST_OCCUPIED equ 2
+
+; HS_BLOCKED_FLAG states
+BS_NONE equ 0
+BS_INITIAL equ 1
+BS_FINAL equ 2
+
+; Miscellaneous constants
+TALK_COUNTDOWN_MAX equ 40
+
;------------------------------------------------------------ seg_code ----
seg_code segment byte public
@@ -415,17 +437,17 @@
273F:0018 \xFAC6 06 38B0 01 mov data_781, 1
273F:001D E8 1F3F call show_disk_cursor
273F:0020 FF 16 0766 call word ptr ds:[fade_out_proc]
-273F:0024 E8 4818 call sub_115 ; (483F)
+273F:0024 E8 4818 call clear_sequence_delay_table
273F:0027 E8 10BE call hotspots_unload ; Disable unneeded hotspots
-273F:002A 83 3E BAAD 01 cmp script_val_82, 1
+273F:002A 83 3E BAAD 01 cmp room_exit_animation_flag, 1
273F:002F 72 0A jb loc_8 ; Jump if below
273F:0031 75 05 jnz loc_7 ; Jump if not zero
-273F:0033 E8 A576 call sub_261 ; (A5AC)
+273F:0033 E8 A576 call display_chute_animation
273F:0036 EB 03 jmp short loc_8 ; (003B)
273F:0038 loc_7: ; xref 273F:0031
-273F:0038 E8 A680 call sub_263 ; (A6BB)
+273F:0038 E8 A680 call display_barrel_animation
273F:003B loc_8: ; xref 273F:002F, 0036
-273F:003B C7 06 BAAD 0000 mov word ptr ds:data_490e,0 ; (273F:BAAD=0)
+273F:003B C7 06 BAAD 0000 mov room_exit_animation_flag, 0
273F:0041 C6 06 9837 00 mov talk_dialog_active, 0
273F:0046 C7 06 9838 0000 mov data_431,0 ; (273F:9838=5C8Bh)
273F:004C A1 9832 mov ax, room_number
@@ -499,7 +521,7 @@
273F:00FA 83 16 B0AC 00 adc game_time_ctr_2, 0
273F:00FF C6 06 00B0 00 mov data_525, 0
273F:0104 E8 92C1 call room_check_keypresses
-273F:0107 E8 4306 call sub_96 ; Talking countdown proc
+273F:0107 E8 4306 call character_paused_list_countdown
273F:010A E8 1B05 call room_check_cursors
273F:010D E8 1189 call room_handle_click
273F:0110 E8 4083 call animation_tick
@@ -2098,7 +2120,7 @@
273F:0CEA BE BF40 mov si, offset room_info_table
273F:0CED 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
273F:0CF0 78 20 js loc_111 ; Jump if sign=1
-273F:0CF2 3D 2710 cmp ax,2710h
+273F:0CF2 3D 2710 cmp ax, START_EXIT_HOTSPOT_ID
273F:0CF5 73 08 jae loc_109 ; Jump if above or =
273F:0CF7 BE 5D98 mov si, offset hotspot_table_2
273F:0CFA 2D 03E8 sub ax, PLAYER_HOTSPOT_ID
@@ -2107,7 +2129,7 @@
273F:0CFF 3D 4E20 cmp ax,4E20h
273F:0D02 73 08 jae loc_110 ; Jump if above or =
273F:0D04 BE 623E mov si, offset hotspot_table_3
-273F:0D07 2D 2710 sub ax,2710h
+273F:0D07 2D 2710 sub ax, START_EXIT_HOTSPOT_ID
273F:0D0A EB 06 jmp short loc_111 ; (0D12)
273F:0D0C loc_110: ; xref 273F:0D02
273F:0D0C \xFABE 63B1 mov si, offset hotspot_table_4
@@ -2140,7 +2162,7 @@
273F:0D21 BE BF40 mov si, offset room_info_table
273F:0D24 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
273F:0D27 72 20 jb loc_114 ; Jump if below
-273F:0D29 3D 2710 cmp ax,2710h
+273F:0D29 3D 2710 cmp ax, START_EXIT_HOTSPOT_ID
273F:0D2C 73 08 jae loc_112 ; Jump if above or =
273F:0D2E BE 5D98 mov si, offset hotspot_table_2
273F:0D31 2D 03E8 sub ax, PLAYER_HOTSPOT_ID
@@ -2149,7 +2171,7 @@
273F:0D36 3D 4E20 cmp ax,4E20h
273F:0D39 73 08 jae loc_113 ; Jump if above or =
273F:0D3B BE 623E mov si, offset hotspot_table_3
-273F:0D3E 2D 2710 sub ax,2710h
+273F:0D3E 2D 2710 sub ax, START_EXIT_HOTSPOT_ID
273F:0D41 EB 06 jmp short loc_114 ; (0D49)
273F:0D43 loc_113: ; xref 273F:0D39
273F:0D43 BE 63B1 mov si, offset hotspot_table_4
@@ -2179,7 +2201,7 @@
273F:0D5A \xFABF 31E6 mov di,31E6h ; (273F:31E6=0CDh)
273F:0D5D 26: C7 45 FE 0000 mov word ptr es:[di-2],0
273F:0D63 \xFABE 623E mov si, offset hotspot_table_3
-273F:0D66 BD 2710 mov bp,2710h
+273F:0D66 BD 2710 mov bp, START_EXIT_HOTSPOT_ID
273F:0D69 E8 0003 call sub_33 ; (0D6F)
273F:0D6C 5D pop bp
273F:0D6D 1F pop ds
@@ -2267,7 +2289,7 @@
273F:0DF1 BD 0408 mov bp, FIRST_OBJECT_HOTSPOT_ID
273F:0DF4 E8 0017 call sub_35 ; (0E0E)
273F:0DF7 \xFABE 623E mov si, offset hotspot_table_3
-273F:0DFA BD 2710 mov bp,2710h
+273F:0DFA BD 2710 mov bp, START_EXIT_HOTSPOT_ID
273F:0DFD E8 000E call sub_35 ; (0E0E)
273F:0E00 \xFABE 63B1 mov si, offset hotspot_table_4
273F:0E03 BD 7530 mov bp,7530h
@@ -2536,19 +2558,19 @@
273F:0FEA 75 7E jne loc_150
273F:0FEC 26: 8B 04 mov ax,es:[si] ; Change position by amount
-273F:0FEF 83 C6 02 add si,2
+273F:0FEF 83 C6 02 add si, 2
-273F:0FF2 01 05 add [di],ax ; Add to X start
-273F:0FF4 01 47 0D add [bx+0Dh],ax
-273F:0FF7 26: 8B 04 mov ax,es:[si]
-273F:0FFA 83 C6 02 add si,2
-273F:0FFD 01 45 02 add [di+2],ax ; Add to Y start
-273F:1000 01 47 0F add [bx+0Fh],ax
+273F:0FF2 01 05 add [di+ANIM_X], ax ; Add to X start
+273F:0FF4 01 47 0D add [bx+HS_X], ax
+273F:0FF7 26: 8B 04 mov ax, es:[si]
+273F:0FFA 83 C6 02 add si, 2
+273F:0FFD 01 45 02 add [di+ANIM_Y], ax ; Add to Y start
+273F:1000 01 47 0F add [bx+HS_Y], ax
273F:1003 EB AF jmp short loc_143
273F:1005 loc_144: ; xref 273F:0FBD
-273F:1005 33 C0 xor ax,ax ; Zero register
-273F:1007 8B F3 mov si,bx
+273F:1005 33 C0 xor ax, ax ; Zero register
+273F:1007 8B F3 mov si, bx
273F:1009 5B pop bx
273F:100A C3 retn
273F:100B loc_145: ; xref 273F:0FCC
@@ -2558,11 +2580,11 @@
273F:1013 D1 E0 shl ax,1
273F:1015 D1 E0 shl ax,1
273F:1017 D1 E0 shl ax,1
-273F:1019 89 45 04 mov [di+4],ax ; Store width
-273F:101C 89 45 13 mov [di+13h],ax
-273F:101F 26: 8B 04 mov ax,es:[si]
-273F:1022 83 C6 02 add si,2
-273F:1025 89 45 06 mov [di+6],ax ; Store height
+273F:1019 89 45 04 mov [di+ANIM_WIDTH], ax ; Store width
+273F:101C 89 45 13 mov [di+ANIM_WIDTH_COPY], ax
+273F:101F 26: 8B 04 mov ax, es:[si]
+273F:1022 83 C6 02 add si, 2
+273F:1025 89 45 06 mov [di+ANIM_HEIGHT],ax ; Store height
273F:1028 EB 8A jmp short loc_143
;* No entry point to code
@@ -2604,31 +2626,31 @@
273F:1067 E9 FF4A jmp loc_143 ; (0FB4)
273F:106A loc_150:
-273F:106A 89 77 24 mov [bx+24h],si ; Set execution offset
-273F:106D 8B F3 mov si,bx
-273F:106F 8B 5C 21 mov bx,[si+21h] ; Get pixel data record
-273F:1072 F6 47 02 04 test byte ptr [bx+2], 4 ; Test flags
-273F:1076 74 0E jz loc_151 ; Jump if zero
-273F:1078 8B 5F 03 mov bx, [bx+3]
-273F:107B 8E C3 mov es,bx
-273F:107D D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:107F 8B D8 mov bx,ax
-273F:1081 26: 8B 07 mov ax,es:[bx]
-273F:1084 EB 03 jmp short loc_152 ; (1089)
-273F:1086 loc_151: ; xref 273F:1076
-273F:1086 F7 67 07 mul word ptr [bx+7] ; dx:ax = data * ax
+273F:106A 89 77 24 mov [bx+HS_SCRIPT_OFFSET], si ; Set execution offset
+273F:106D 8B F3 mov si, bx
+273F:106F 8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET] ; Get pixel data record
+273F:1072 F6 47 02 04 test byte ptr [bx+PIXEL_FLAGS], PIXELFLAG_HAS_TABLE
+273F:1076 74 0E jz loc_151 ; Jump if not
+273F:1078 8B 5F 03 mov bx, [bx+PIXEL_DATA_SEGMENT]
+273F:107B 8E C3 mov es, bx
+273F:107D D1 E0 shl ax, 1 ; Shift w/zeros fill
+273F:107F 8B D8 mov bx, ax
+273F:1081 26: 8B 07 mov ax, es:[bx] ; Get frame offset
+273F:1084 EB 03 jmp short loc_152
+273F:1086 loc_151:
+273F:1086 F7 67 07 mul word ptr [bx+PIXEL_FRAME_SIZE]
273F:1089 loc_152:
-273F:1089 89 45 08 mov [di+8],ax ; Store current frame
-273F:108C 0D 0001 or ax,1
+273F:1089 89 45 08 mov [di+ANIM_FRAME_OFFSET],ax ; Store current frame
+273F:108C 0D 0001 or ax, 1
273F:108F 5B pop bx
273F:1090 C3 retn
273F:1091 loc_153:
-273F:1091 26: 8B 04 mov ax,es:[si] ; Set bitset actions
-273F:1094 89 07 mov [bx],ax
-273F:1096 26: 8B 44 02 mov ax,es:[si+2]
-273F:109A 89 47 02 mov [bx+2],ax
-273F:109D 83 C6 04 add si,4
+273F:1091 26: 8B 04 mov ax, es:[si] ; Set bitset actions
+273F:1094 89 07 mov [bx+HS_ACTIONS], ax
+273F:1096 26: 8B 44 02 mov ax, es:[si+2]
+273F:109A 89 47 02 mov [bx+HS_ACTIONS+2], ax
+273F:109D 83 C6 04 add si, 4
273F:10A0 E9 FF11 jmp loc_143
hotspot_script_execute endp
@@ -2794,22 +2816,22 @@
; Called from: 273F:5217, 6009
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
-273F:11B5 sub_41 proc near
+ character_paused_list_check proc near
273F:11B5 53 push bx
273F:11B6 \xFABB 10C0 mov bx, offset impinging_char_list
-273F:11B9 C7 06 10EE 0000 mov data_617, 0
+273F:11B9 C7 06 10EE 0000 mov pl_check_result, 0
273F:11BF loc_163:
273F:11BF \xFA8B 07 mov ax, [bx] ; Get character Id
273F:11C1 83 C3 02 add bx, 2 ; Move to next entry
273F:11C4 0B C0 or ax, ax ; Is it the end of the list?
273F:11C6 75 05 jnz loc_164 ; Jump if not
-273F:11C8 A1 10EE mov ax, data_617 ; Set return result
+273F:11C8 A1 10EE mov ax, pl_check_result ; Set return result
273F:11CB 5B pop bx
273F:11CC C3 retn
273F:11CD loc_164:
-273F:11CD 8B EB mov bp,bx ; Store current table offset
+273F:11CD 8B EB mov bp, bx ; Store next table offset
273F:11CF 50 push ax
273F:11D0 56 push si
273F:11D1 E8 FB16 call get_room_resource_pointer2 ;Get hotspot resource
@@ -2820,27 +2842,29 @@
273F:11DE 5E pop si
273F:11DF 58 pop ax
273F:11E0 80 FB 03 cmp bl, CHAR_ACTION_EXEC_SCRIPT ; Char in animation sequence?
-273F:11E3 74 12 je loc_166 ; Jump if yes
+273F:11E3 74 12 je loc_166 ; Skip if yes
-273F:11E5 BB B0AE mov bx, offset hotspot_action_list
-273F:11E8 B9 0014 mov cx, NUM_HOTSPOT_ACTION_SLOTS
+; Scan through the list of currently paused characters to see if the character is in it
+
+273F:11E5 BB B0AE mov bx, offset character_pause_list
+273F:11E8 B9 0014 mov cx, NUM_PAUSED_CHARS_SLOTS
273F:11EB 8B 55 1B mov dx, [di+ANIM_HOTSPOT_ID]
273F:11EE locloop_165:
-273F:11EE 3B 17 cmp dx, [bx] ; Source char in list?
+273F:11EE 3B 17 cmp dx, [bx+PC_SRC_CHAR_ID] ; Source char in list?
273F:11F0 75 09 jne loc_167 ; Jump if not
-273F:11F2 3B 47 02 cmp ax, [bx+2] ; List char Id in list?
+273F:11F2 3B 47 02 cmp ax, [bx+PC_DEST_CHAR_ID]; List char Id in list?
273F:11F5 75 04 jne loc_167 ; Jump if not equal
273F:11F7 loc_166:
-273F:11F7 8B DD mov bx,bp ; Restore cached table offset
+273F:11F7 8B DD mov bx, bp ; Restore cached table offset
273F:11F9 EB C4 jmp short loc_163 ; Check next entry
273F:11FB loc_167:
-273F:11FB 83 C3 08 add bx, HOTSPOT_ACTION_SLOT_SIZE
+273F:11FB 83 C3 08 add bx, PAUSED_CHAR_SLOT_SIZE
273F:11FE E2 EE loop locloop_165 ; Loop remaining action list
; At this point we've found a character in the impinging_char_list list that isn't
; currently blocked to execute a hotspot animation, and doesn't have a cross reference
-; against the calling character (such as the player) in the hotspot action list
+; against the calling character (such as the player) in the paused character list
273F:1200 8B D8 mov bx, ax
273F:1202 57 push di
@@ -2848,9 +2872,9 @@
273F:1205 E8 FAE0 call get_room_resource_pointer
273F:1208 87 F7 xchg si, di ;di=list hotspot rec, si=caller rec
273F:120A 8B C3 mov ax, bx
-273F:120C 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID ; Is caller Id the player?
+273F:120C 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID ; Is list char the player?
273F:120F 75 0F jne loc_168 ; Jump if not
-273F:1211 F6 45 49 FF test byte ptr [di+49h], 0FFh ; ???
+273F:1211 F6 45 49 FF test byte ptr [di+HS_PATHFIND_COVERED], 0FFh
273F:1215 75 09 jnz loc_168 ; Jump if not zero
273F:1217 5F pop di
273F:1218 E8 314B call character_update_movement
@@ -2859,42 +2883,41 @@
273F:121F C3 retn
273F:1220 loc_168:
-273F:1220 BB B0AE mov bx, offset hotspot_action_list
+273F:1220 BB B0AE mov bx, offset character_pause_list
273F:1223 loc_169: ; Scan for end of list
-273F:1223 \xFAF7 07 FFFF test word ptr [bx], 0FFFFh
+273F:1223 \xFAF7 07 FFFF test word ptr [bx+PC_SRC_CHAR_ID], 0FFFFh
273F:1227 74 05 jz loc_170
-273F:1229 83 C3 08 add bx, HOTSPOT_ACTION_SLOT_SIZE
+273F:1229 83 C3 08 add bx, PAUSED_CHAR_SLOT_SIZE
273F:122C EB F5 jmp short loc_169
273F:122E loc_170: ; Inject entry into hotspot action list
-273F:122E 89 17 mov [bx], dx
-273F:1230 89 47 02 mov [bx+2], ax
-273F:1233 C7 47 04 000F mov word ptr [bx+4],0Fh
-273F:1238 89 7F 06 mov [bx+6],di
-273F:123B C6 44 4C 01 mov byte ptr [si+HS_BLOCKED_FLAG], 1
-273F:123F 3D 2710 cmp ax,2710h
+273F:122E 89 17 mov [bx+PC_SRC_CHAR_ID], dx
+273F:1230 89 47 02 mov [bx+PC_DEST_CHAR_ID], ax
+273F:1233 C7 47 04 000F mov word ptr [bx+PC_COUNTER], 15
+273F:1238 89 7F 06 mov [bx+PC_HOTSPOT_PTR], di
+273F:123B C6 44 4C 01 mov byte ptr [si+HS_BLOCKED_FLAG], BS_INITIAL
+273F:123F 3D 2710 cmp ax, START_EXIT_HOTSPOT_ID
273F:1242 73 1D jae loc_173 ; Jump if above or =
-273F:1244 8A 5D 44 mov bl,[di+44h]
-273F:1247 80 FB 03 cmp bl,3
+273F:1244 8A 5D 44 mov bl, [di+HS_CHAR_MODE]
+273F:1247 80 FB 03 cmp bl, CHARMODE_PAUSED
273F:124A 74 0D je loc_171 ; Jump if equal
-273F:124C F7 45 4A FFFF test word ptr [di+HS_V4A], 0FFFFh
+273F:124C F7 45 4A FFFF test word ptr [di+HS_PAUSE_CTR], 0FFFFh
273F:1251 75 09 jnz loc_172 ; Jump if not zero
273F:1253 F6 45 44 FF test byte ptr [di+HS_CHAR_MODE], 0FFh
273F:1257 75 03 jnz loc_172 ; Jump if not zero
273F:1259 loc_171:
-273F:1259 89 55 47 mov [di+HS_USE2_HOTSPOT_ID], dx
+273F:1259 89 55 47 mov [di+SCRIPT_HOTSPOT_ID], dx
273F:125C loc_172:
-273F:125C C7 45 4A 000F mov word ptr [di+HS_V4A], 0Fh
+273F:125C C7 45 4A 000F mov word ptr [di+HS_PAUSE_CTR], 0Fh
273F:1261 loc_173:
-273F:1261 C7 06 10EE 0002 mov data_617, 2
+273F:1261 C7 06 10EE 0002 mov pl_check_result, 2
273F:1267 5F pop di
273F:1268 5B pop bx
-273F:1269 C6 07 01 mov byte ptr [bx], 1
+273F:1269 C6 07 01 mov byte ptr [bx], CHAR_ACTION_START_WALK
273F:126C 53 push bx
273F:126D 8B DD mov bx,bp
273F:126F E9 FF4D jmp loc_163
+ character_paused_list_check endp
- sub_41 endp
-
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
; SUBROUTINE
;
@@ -3161,14 +3184,14 @@
273F:1479 C6 06 11DA 00 mov mouse_buttons2, 0
273F:147E A1 983B mov ax, talk_character_id
273F:1481 E8 F866 call get_room_resource_pointer2
-273F:1484 C7 44 37 0000 mov word ptr [si+37h],0
+273F:1484 C7 44 37 0000 mov word ptr [si+HS_TALK_COUNTDOWN],0
273F:1489 A1 9841 mov ax, data_1091
273F:148C 0B C0 or ax,ax ; Zero ?
273F:148E 74 0F jz loc_196 ; Jump if zero
273F:1490 E8 F857 call get_room_resource_pointer2
-273F:1493 F7 44 37 FFFF test word ptr [si+37h],0FFFFh
+273F:1493 F7 44 37 FFFF test word ptr [si+HS_TALK_COUNTDOWN],0FFFFh
273F:1498 74 05 jz loc_196 ; Jump if zero
-273F:149A C7 44 37 0028 mov word ptr [si+37h],28h
+273F:149A C7 44 37 0028 mov word ptr [si+HS_TALK_COUNTDOWN],28h
273F:149F loc_196: ; xref 273F:148E, 1498
273F:149F E9 4E23 jmp loc_1248 ; (62C5)
sub_44 endp
@@ -4502,7 +4525,7 @@
273F:1C7D C6 06 11E3 0F mov cursor_index_new, CURSOR_CAMERA
273F:1C82 8B 16 9832 mov dx, room_number
273F:1C86 \xFABF 623E mov di, offset hotspot_table_3
-273F:1C89 BD 2710 mov bp,2710h
+273F:1C89 BD 2710 mov bp, START_EXIT_HOTSPOT_ID
273F:1C8C E8 01BC call room_check_hotspots
273F:1C8F \xFABF 63B1 mov di, offset hotspot_table_4
273F:1C92 BD 7530 mov bp,7530h
@@ -4529,7 +4552,7 @@
273F:1CC9 C7 06 11E6 0000 mov hotspot_name_id, 0
273F:1CCF 8B 16 9832 mov dx, room_number
273F:1CD3 \xFABF 623E mov di, offset hotspot_table_3
-273F:1CD6 BD 2710 mov bp,2710h
+273F:1CD6 BD 2710 mov bp, START_EXIT_HOTSPOT_ID
273F:1CD9 E8 016F call room_check_hotspots
273F:1CDC \xFABF 5D98 mov di, offset hotspot_table_2
273F:1CDF BD 03E8 mov bp, PLAYER_HOTSPOT_ID
@@ -4743,26 +4766,26 @@
273F:1EAE loc_464:
273F:1EAE A1 11D6 mov ax, mouse_x2
-273F:1EB1 05 0080 add ax,80h
-273F:1EB4 8B 4C 0D mov cx,[si+0Dh]
-273F:1EB7 3B C1 cmp ax,cx
+273F:1EB1 05 0080 add ax, 80h
+273F:1EB4 8B 4C 0D mov cx, [si+HS_X]
+273F:1EB7 3B C1 cmp ax, cx
273F:1EB9 72 EB jb loc_463 ; Jump if below
-273F:1EBB 03 4C 19 add cx,[si+19h]
-273F:1EBE 3B C8 cmp cx,ax
+273F:1EBB 03 4C 19 add cx, [si+HS_WIDTH_COPY]
+273F:1EBE 3B C8 cmp cx, ax
273F:1EC0 72 E4 jb loc_463 ; Jump if below
-273F:1EC2 A1 11D8 mov ax, mouse_y2
-273F:1EC5 05 0080 add ax,80h
-273F:1EC8 8B 4C 0F mov cx,[si+0Fh]
-273F:1ECB 3B C1 cmp ax,cx
+273F:1EC2 A1 11D8 mov ax, mouse_y2
+273F:1EC5 05 0080 add ax, 80h
+273F:1EC8 8B 4C 0F mov cx, [si+HS_Y]
+273F:1ECB 3B C1 cmp ax, cx
273F:1ECD 72 D7 jb loc_463 ; Jump if below
-273F:1ECF 03 4C 13 add cx,[si+13h]
-273F:1ED2 3B C8 cmp cx,ax
+273F:1ECF 03 4C 13 add cx, [si+HS_HEIGHT]
+273F:1ED2 3B C8 cmp cx, ax
273F:1ED4 72 D0 jb loc_463 ; Jump if below
273F:1ED6 loc_465: ; xref 273F:1EA4
-273F:1ED6 80 4C 03 80 or byte ptr [si+3],80h
+273F:1ED6 80 4C 03 80 or byte ptr [si+HS_FLAGS], 80h
273F:1EDA 89 2E 1924 mov hotspot_id, bp
-273F:1EDE 8B 45 02 mov ax,[di+2]
-273F:1EE1 80 E4 1F and ah,1Fh
+273F:1EDE 8B 45 02 mov ax, [di+2]
+273F:1EE1 80 E4 1F and ah, 1Fh
273F:1EE4 A3 11E6 mov hotspot_name_id, ax ; Save actions for this hotspot
273F:1EE7 C3 retn
room_check_hotspots endp
@@ -6903,7 +6926,7 @@
273F:2C88 2E: A3 1500 mov word ptr cs:data_215,ax ; (273F:1500=0)
273F:2C8C 2E: A3 1502 mov cs:data_216,ax ; (273F:1502=0)
273F:2C90 2E: A2 1504 mov cs:data_217,al ; (273F:1504=0)
-273F:2C94 C6 06 11B0 00 mov byte ptr ds:[11B0h],0 ; (273F:11B0=0BEh)
+273F:2C94 C6 06 11B0 00 mov data_11b0, 0
273F:2C99 8B 47 02 mov ax,[bx+2]
273F:2C9C 2D 0088 sub ax,88h
273F:2C9F 73 2A jnc loc_618 ; Jump if carry=0
@@ -6925,7 +6948,7 @@
273F:2CBE D1 E0 shl ax,1 ; Shift w/zeros fill
273F:2CC0 03 F0 add si,ax
273F:2CC2 33 C0 xor ax,ax ; Zero register
-273F:2CC4 C6 06 11B0 01 mov byte ptr ds:[11B0h],1 ; (273F:11B0=0BEh)
+273F:2CC4 C6 06 11B0 01 mov data_11b0, 1
273F:2CC9 EB 1C jmp short loc_621 ; (2CE7)
273F:2CCB loc_618: ; xref 273F:2C9F
273F:2CCB 3D 00C0 cmp ax,0C0h
@@ -6938,7 +6961,7 @@
273F:2CDA 72 0A jb loc_620 ; Jump if below
273F:2CDC 2D 00C0 sub ax,0C0h
273F:2CDF 2A E8 sub ch,al
-273F:2CE1 C6 06 11B0 01 mov byte ptr ds:[11B0h],1 ; (273F:11B0=0BEh)
+273F:2CE1 C6 06 11B0 01 mov data_11b0, 1
273F:2CE6 loc_620: ; xref 273F:2CDA
273F:2CE6 58 pop ax
273F:2CE7 loc_621: ; xref 273F:2CC9
@@ -6981,7 +7004,7 @@
273F:2D3C 2E: A3 1502 mov cs:data_216,ax ; (273F:1502=0)
273F:2D40 04 01 add al,1
273F:2D42 2E: 28 06 1509 sub cs:data_220,al ; (273F:1509=0)
-273F:2D47 C6 06 11B0 01 mov byte ptr ds:[11B0h],1 ; (273F:11B0=0BEh)
+273F:2D47 C6 06 11B0 01 mov data_11b0, 1
273F:2D4C 33 C0 xor ax,ax ; Zero register
273F:2D4E EB 29 jmp short loc_625 ; (2D79)
273F:2D50 loc_623: ; xref 273F:2D1D
@@ -6998,7 +7021,7 @@
273F:2D67 D3 EA shr dx,cl ; Shift w/zeros fill
273F:2D69 2E: 28 16 1509 sub cs:data_220,dl ; (273F:1509=0)
273F:2D6E 2E: C6 06 1504 00 mov cs:data_217,0 ; (273F:1504=0)
-273F:2D74 C6 06 11B0 01 mov byte ptr ds:[11B0h],1 ; (273F:11B0=0BEh)
+273F:2D74 C6 06 11B0 01 mov data_11b0, 1
273F:2D79 loc_625: ; xref 273F:2D4E, 2D61, 2D63
273F:2D79 25 FFF8 and ax,0FFF8h
273F:2D7C D1 E8 shr ax,1 ; Shift w/zeros fill
@@ -7007,7 +7030,7 @@
273F:2D84 80 F1 07 xor cl,7
273F:2D87 80 C1 01 add cl,1
273F:2D8A 8B 1E 1440 mov bx,word ptr ds:[1440h] ; (273F:1440=0BA00h)
-273F:2D8E 80 3E 11B0 01 cmp byte ptr ds:[11B0h],1 ; (273F:11B0=0BEh)
+273F:2D8E 80 3E 11B0 01 cmp data_11b0, 1
273F:2D93 75 03 jne loc_626 ; Jump if not equal
273F:2D95 E9 00D9 jmp loc_630 ; (2E71)
273F:2D98 loc_626: ; xref 273F:2D93
@@ -8567,98 +8590,97 @@
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
vga_add_animation proc near
-
273F:37F2 2E: C7 06 1500 0000 mov word ptr cs:data_215,0 ; (273F:1500=0)
-273F:37F9 C6 06 11B0 00 mov byte ptr ds:[11B0h],0 ; (273F:11B0=0BEh)
-273F:37FE 8A 6F 06 mov ch,[bx+ANIM_HEIGHT] ; Get height
-273F:3801 8A 4F 04 mov cl,[bx+ANIM_WIDTH] ; Get width
-273F:3804 8B 47 02 mov ax,[bx+ANIM_Y] ; Get Y position
-273F:3807 2D 0088 sub ax,88h
+273F:37F9 C6 06 11B0 00 mov data_11b0, 0
+273F:37FE 8A 6F 06 mov ch, [bx+ANIM_HEIGHT] ; Get height
+273F:3801 8A 4F 04 mov cl, [bx+ANIM_WIDTH] ; Get width
+273F:3804 8B 47 02 mov ax, [bx+ANIM_Y] ; Get Y position
+273F:3807 2D 0088 sub ax, 88h
273F:380A 73 16 jnc loc_731
-273F:380C 8B D0 mov dx,ax
-273F:380E 02 D5 add dl,ch
+273F:380C 8B D0 mov dx, ax ; Top clipping
+273F:380E 02 D5 add dl, ch
273F:3810 73 15 jnc loc_ret_732 ; Jump if carry=0
273F:3812 74 13 jz loc_ret_732 ; Jump if zero
273F:3814 F7 D8 neg ax
-273F:3816 2A E8 sub ch,al
+273F:3816 2A E8 sub ch, al
273F:3818 F6 E1 mul cl ; ax = reg * al
-273F:381A D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:381C 03 F0 add si,ax
-273F:381E 33 C0 xor ax,ax ; Zero register
-273F:3820 EB 13 jmp short loc_734 ; (3835)
+273F:381A D1 E8 shr ax, 1
+273F:381C 03 F0 add si, ax
+273F:381E 33 C0 xor ax, ax ; Zero register
+273F:3820 EB 13 jmp short loc_734
273F:3822 loc_731: ; xref 273F:380A
-273F:3822 3D 00C0 cmp ax, 192 ; Row too high?
+273F:3822 3D 00C0 cmp ax, 192 ; Below bottom row?
273F:3825 72 01 jb loc_733
273F:3827 loc_ret_732: ; xref 273F:3810, 3812
273F:3827 C3 retn
273F:3828 loc_733:
-273F:3828 8B D0 mov dx,ax ; Get start row
-273F:382A 03 57 06 add dx,[bx+ANIM_HEIGHT] ; Add number of rows
+273F:3828 8B D0 mov dx, ax ; Get start row
+273F:382A 03 57 06 add dx, [bx+ANIM_HEIGHT] ; Add number of rows
273F:382D 81 EA 00C0 sub dx, 192 ; Bottom row > 192?
273F:3831 76 02 jbe loc_734
-273F:3833 2A EA sub ch,dl ; Yes, reduce height to fit
+273F:3833 2A EA sub ch, dl ; Yes, reduce height to fit
273F:3835 loc_734:
273F:3835 51 push cx
-273F:3836 8B D0 mov dx,ax ; ax = line number, and
-273F:3838 D1 E0 shl ax,1 ; will be * 320
-273F:383A D1 E0 shl ax,1
-273F:383C 03 D0 add dx,ax
-273F:383E B1 06 mov cl,6
-273F:3840 D3 E2 shl dx,cl
-273F:3842 8B FA mov di,dx ; di = start of line
+273F:3836 8B D0 mov dx, ax ; ax = line number, and
+273F:3838 D1 E0 shl ax, 1 ; will be * 320
+273F:383A D1 E0 shl ax, 1
+273F:383C 03 D0 add dx, ax
+273F:383E B1 06 mov cl, 6
+273F:3840 D3 E2 shl dx, cl
+273F:3842 8B FA mov di, dx ; di = start of line
273F:3844 \xFA81 C7 0A00 add di, MENUBAR_BLOCK_SIZE ; Compensate for menubar
273F:3848 59 pop cx
-273F:3849 8B 07 mov ax,[bx] ; Get start X position
-273F:384B 2D 0080 sub ax,80h
-273F:384E 73 21 jnc loc_736 ; Jump if carry=0
-273F:3850 8B D0 mov dx,ax
-273F:3852 02 D1 add dl,cl
+273F:3849 8B 07 mov ax, [bx+ANIM_X] ; Get start X position
+273F:384B 2D 0080 sub ax, 80h
+273F:384E 73 21 jnc loc_736 ; Completely on-screen
+273F:3850 8B D0 mov dx, ax
+273F:3852 02 D1 add dl, cl
273F:3854 72 01 jc loc_735 ; Jump if carry Set
273F:3856 C3 retn
273F:3857 loc_735: ; xref 273F:3854
273F:3857 F7 D0 not ax
-273F:3859 2A C8 sub cl,al
-273F:385B 2E: A3 1500 mov word ptr cs:data_215,ax ; (273F:1500=0)
-273F:385F C6 06 11B0 01 mov byte ptr ds:[11B0h],1 ; (273F:11B0=0BEh)
-273F:3864 8B 47 04 mov ax,[bx+ANIM_WIDTH]
-273F:3867 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:3869 2E: A3 1505 mov cs:data_218,ax ; (273F:1505=0)
-273F:386D 33 C0 xor ax,ax ; Zero register
+273F:3859 2A C8 sub cl, al
+273F:385B 2E: A3 1500 mov word ptr cs:data_215, ax
+273F:385F C6 06 11B0 01 mov data_11b0, 1
+273F:3864 8B 47 04 mov ax, [bx+ANIM_WIDTH]
+273F:3867 D1 E8 shr ax, 1
+273F:3869 2E: A3 1505 mov cs:data_218, ax
+273F:386D 33 C0 xor ax, ax ; Zero register
273F:386F EB 22 jmp short loc_738 ; (3893)
273F:3871 loc_736: ; xref 273F:384E
-273F:3871 3D 0140 cmp ax,140h
+273F:3871 3D 0140 cmp ax, SCREEN_WIDTH
273F:3874 72 01 jb loc_737 ; Jump if below
273F:3876 C3 retn
273F:3877 loc_737: ; xref 273F:3874
-273F:3877 8B D0 mov dx,ax
-273F:3879 03 57 04 add dx,[bx+ANIM_WIDTH]
-273F:387C 81 EA 0140 sub dx,140h
+273F:3877 8B D0 mov dx, ax
+273F:3879 03 57 04 add dx, [bx+ANIM_WIDTH]
+273F:387C 81 EA 0140 sub dx, SCREEN_WIDTH
273F:3880 76 11 jbe loc_738 ; Jump if below or =
-273F:3882 2A CA sub cl,dl
-273F:3884 C6 06 11B0 01 mov byte ptr ds:[11B0h],1 ; (273F:11B0=0BEh)
+273F:3882 2A CA sub cl, dl
+273F:3884 C6 06 11B0 01 mov data_11b0, 1
-273F:3889 8B 57 04 mov dx,[bx+ANIM_WIDTH]
-273F:388C D1 EA shr dx,1 ; Shift w/zeros fill
-273F:388E 2E: 89 16 1505 mov cs:data_218,dx ; (273F:1505=0)
-273F:3893 loc_738: ; xref 273F:386F, 3880
-273F:3893 03 F8 add di,ax
-273F:3895 8A 5F 28 mov bl,[bx+ANIM_START_COLOUR] ; Colour offset start
-273F:3898 F6 06 11B0 FF test byte ptr ds:[11B0h],0FFh
+273F:3889 8B 57 04 mov dx, [bx+ANIM_WIDTH]
+273F:388C D1 EA shr dx, 1
+273F:388E 2E: 89 16 1505 mov cs:data_218, dx
+273F:3893 loc_738:
+273F:3893 03 F8 add di, ax
+273F:3895 8A 5F 28 mov bl, [bx+ANIM_START_COLOUR] ; Colour offset start
+273F:3898 F6 06 11B0 FF test data_11b0, 0FFh
273F:389D 75 47 jnz loc_743 ; Jump if not zero
273F:389F 1E push ds
273F:38A0 06 push es
273F:38A1 A1 4CE4 mov ax, data_segment2
-273F:38A4 8E C0 mov es,ax
+273F:38A4 8E C0 mov es, ax
273F:38A6 1F pop ds
-273F:38A7 8A D1 mov dl,cl
-273F:38A9 8A CD mov cl,ch
-273F:38AB 32 ED xor ch,ch ; Zero register
-273F:38AD 32 F6 xor dh,dh ; Zero register
-273F:38AF D1 EA shr dx,1 ; Divide by 2
+273F:38A7 8A D1 mov dl, cl
+273F:38A9 8A CD mov cl, ch
+273F:38AB 32 ED xor ch, ch ; Zero register
+273F:38AD 32 F6 xor dh, dh ; Zero register
+273F:38AF D1 EA shr dx, 1 ; Divide by 2
; This seems to be the loop for applying an animation to the off-screen buffer
; cx = height, dx = width/2, es:di = dest, bl = starting colour offset
@@ -8668,30 +8690,30 @@
273F:38B1 locloop_739: ; xref 273F:38E2
273F:38B1 51 push cx
273F:38B2 52 push dx
-273F:38B3 B1 04 mov cl,4
+273F:38B3 B1 04 mov cl, 4
273F:38B5 57 push di
273F:38B6 loc_740: ; xref 273F:38D9
273F:38B6 AC lodsb ; String [si] to al
-273F:38B7 8A E0 mov ah,al
-273F:38B9 D2 EC shr ah,cl ; Shift w/zeros fill
-273F:38BB 25 0F0F and ax,0F0Fh
+273F:38B7 8A E0 mov ah, al
+273F:38B9 D2 EC shr ah, cl ; Shift w/zeros fill
+273F:38BB 25 0F0F and ax, 0F0Fh
273F:38BE 0A E4 or ah,ah ; Zero ?
273F:38C0 74 05 jz loc_741 ; Jump if zero
273F:38C2 02 E3 add ah,bl
273F:38C4 26: 88 25 mov es:[di],ah
273F:38C7 loc_741: ; xref 273F:38C0
-273F:38C7 83 C7 01 add di,1
-273F:38CA 0A C0 or al,al ; Zero ?
+273F:38C7 83 C7 01 add di, 1
+273F:38CA 0A C0 or al, al ; Zero ?
273F:38CC 74 05 jz loc_742 ; Jump if zero
-273F:38CE 02 C3 add al,bl
-273F:38D0 26: 88 05 mov es:[di],al
+273F:38CE 02 C3 add al, bl
+273F:38D0 26: 88 05 mov es:[di], al
273F:38D3 loc_742: ; xref 273F:38CC
273F:38D3 83 C7 01 add di,1
273F:38D6 83 EA 01 sub dx,1
273F:38D9 75 DB jnz loc_740 ; Jump if not zero
273F:38DB 5F pop di
-273F:38DC \xFA81 C7 0140 add di,SCREEN_WIDTH
+273F:38DC \xFA81 C7 0140 add di, SCREEN_WIDTH
273F:38E0 5A pop dx
273F:38E1 59 pop cx
273F:38E2 E2 CD loop locloop_739 ; Loop if cx > 0
@@ -8704,12 +8726,12 @@
273F:38E6 1E push ds
273F:38E7 06 push es
273F:38E8 A1 4CE4 mov ax, data_segment2
-273F:38EB 8E C0 mov es,ax
+273F:38EB 8E C0 mov es, ax
273F:38ED 1F pop ds
-273F:38EE 8A D1 mov dl,cl
-273F:38F0 8A CD mov cl,ch
-273F:38F2 32 ED xor ch,ch ; Zero register
-273F:38F4 32 F6 xor dh,dh ; Zero register
+273F:38EE 8A D1 mov dl, cl
+273F:38F0 8A CD mov cl, ch
+273F:38F2 32 ED xor ch, ch ; Zero register
+273F:38F4 32 F6 xor dh, dh ; Zero register
273F:38F6 locloop_744: ; xref 273F:3944
273F:38F6 51 push cx
@@ -8763,6 +8785,7 @@
273F:3946 1F pop ds
273F:3947 C3 retn
+ vga_add_animation endp
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
; SUBROUTINE
@@ -9390,18 +9413,18 @@
273F:3D1F B8 7900 mov ax,7900h ; Restart/Restore image
273F:3D22 E8 FF6C call sub_79 ; Decode it
-273F:3D25 \xFABB 184B mov bx,offset data_657
+273F:3D25 \xFABB 184B mov bx, offset animation_rec_4
273F:3D28 E8 3AB7 call animation_decode
273F:3D2B E8 E247 call show_arrow_cursor
273F:3D2E 1E push ds
273F:3D2F 07 pop es
273F:3D30 \xFABF B14E mov di, offset animation_table
-273F:3D33 \xFABE 1890 mov si,1890h ; (31E4:1890=0F6h)
-273F:3D36 \xFABB 184B mov bx,offset data_657 ; (31E4:184B=1)
-273F:3D39 8B 47 03 mov ax,[bx+3]
-273F:3D3C B2 00 mov dl,0
-273F:3D3E E8 FFBC call animation_set_entry ; (3CFD)
-273F:3D41 E8 FFB9 call animation_set_entry ; (3CFD)
+273F:3D33 \xFABE 1890 mov si, 1890h
+273F:3D36 \xFABB 184B mov bx, offset animation_rec_4
+273F:3D39 8B 47 03 mov ax, [bx+3]
+273F:3D3C B2 00 mov dl, 0
+273F:3D3E E8 FFBC call animation_set_entry
+273F:3D41 E8 FFB9 call animation_set_entry
273F:3D44 33 C0 xor ax,ax ; Zero register
273F:3D46 33 DB xor bx,bx ; Zero register
273F:3D48 E8 FF8E call animation_draw
@@ -10185,11 +10208,11 @@
273F:42FB 88 74 50 mov [si+HS_DIRECTION], dh
273F:42FE C6 44 51 00 mov byte ptr [si+HS_DIRECTION+1], 0
273F:4302 32 F6 xor dh,dh ; Zero register
-273F:4304 83 EB 30 sub bx,30h
+273F:4304 83 EB 30 sub bx, 48
273F:4307 89 16 982C mov new_room_number_2, dx
273F:430B 89 0E 982E mov new_room_x, cx
273F:430F 89 1E 9830 mov new_room_y, bx
-273F:4313 E8 1D23 call sub_136 ; (6039)
+273F:4313 E8 1D23 call character_change_room_check_bumped
273F:4316 75 06 jnz loc_ret_839 ; Jump if not zero
273F:4318 C7 06 982C 0000 mov new_room_number_2, 0
273F:431E loc_ret_839: retn
@@ -10352,30 +10375,30 @@
; Called from: 273F:0107, 60FC
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
- sub_96 proc near
-273F:4410 BB B0AE mov bx, offset hotspot_action_list
-273F:4413 B9 0014 mov cx, NUM_HOTSPOT_ACTION_SLOTS
+ character_paused_list_countdown proc near
+273F:4410 BB B0AE mov bx, offset character_pause_list
+273F:4413 B9 0014 mov cx, NUM_PAUSED_CHARS_SLOTS
273F:4416 locloop_851:
-273F:4416 F7 07 FFFF test word ptr [bx],0FFFFh ; Entry position in use?
+273F:4416 F7 07 FFFF test word ptr [bx+PC_HOTSPOT_PTR],0FFFFh ; Entry position in use?
273F:441A 74 1F jz loc_853 ; Skip entry if not
-273F:441C 83 6F 04 01 sub word ptr [bx+4], 1 ; Decrement entry counter
-273F:4420 8B 47 04 mov ax, [bx+4]
+273F:441C 83 6F 04 01 sub word ptr [bx+PC_COUNTER], 1 ; Decrement entry counter
+273F:4420 8B 47 04 mov ax, [bx+PC_COUNTER]
273F:4423 0B C0 or ax,ax ; Reached zero?
273F:4425 75 04 jnz loc_852 ; Jump if not
-273F:4427 C7 07 0000 mov word ptr [bx], 0 ; Clear slot
+273F:4427 C7 07 0000 mov word ptr [bx+PC_SRC_CHAR_ID], 0 ; Clear slot
273F:442B loc_852:
-273F:442B 81 7F 02 2710 cmp word ptr [bx+2], 2710h ; Check Id of entry
+273F:442B 81 7F 02 2710 cmp word ptr [bx+PC_DEST_CHAR_ID], START_EXIT_HOTSPOT_ID
273F:4430 73 09 jae loc_853 ; Jump if >= 2710h
-273F:4432 8B 77 06 mov si,[bx+6] ; Hotspot rec ptr?
+273F:4432 8B 77 06 mov si, [bx+PC_HOTSPOT_PTR]
273F:4435 05 0001 add ax, 1
-273F:4438 89 44 4A mov [si+4Ah], ax ; Set 4Ah to countdown ctr
+273F:4438 89 44 4A mov [si+HS_PAUSE_CTR], ax
273F:443B loc_853:
-273F:443B 83 C3 08 add bx, HOTSPOT_ACTION_SLOT_SIZE
+273F:443B 83 C3 08 add bx, PAUSED_CHAR_SLOT_SIZE
273F:443E E2 D6 loop locloop_851 ; Loop if cx > 0
273F:4440 C3 retn
- sub_96 endp
+ character_paused_list_countdown endp
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
@@ -10384,31 +10407,30 @@
; Called from: 273F:479F, 51A8, 5FB9
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
-273F:4441 sub_97 proc near
+ character_paused_list_reset proc near
273F:4441 53 push bx
-273F:4442 BB B0AE mov bx, offset hotspot_action_list
-273F:4445 B9 0014 mov cx, NUM_HOTSPOT_ACTION_SLOTS
+273F:4442 BB B0AE mov bx, offset character_pause_list
+273F:4445 B9 0014 mov cx, NUM_PAUSED_CHARS_SLOTS
273F:4448 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:444B locloop_854: ; xref 273F:4468
-273F:444B 3B 07 cmp ax, [bx]
-273F:444D 75 16 jne loc_855 ; Skip if hotspot not found
-273F:444F C7 47 04 0001 mov word ptr [bx+4], 1
-273F:4454 81 7F 02 2710 cmp word ptr [bx+2], 2710h
+273F:444B locloop_854:
+273F:444B 3B 07 cmp ax, [bx+PC_SRC_CHAR_ID]
+273F:444D 75 16 jne loc_855 ; Skip if entry is empty
+273F:444F C7 47 04 0001 mov word ptr [bx+PC_COUNTER], 1
+273F:4454 81 7F 02 2710 cmp word ptr [bx+PC_DEST_CHAR_ID], START_EXIT_HOTSPOT_ID
273F:4459 73 0A jae loc_855 ; Jump if above or =
273F:445B 56 push si
-273F:445C 8B 77 06 mov si, [bx+6]
-273F:445F C7 44 4A 0001 mov word ptr [si+HS_V4A], 1
+273F:445C 8B 77 06 mov si, [bx+PC_HOTSPOT_PTR]
+273F:445F C7 44 4A 0001 mov word ptr [si+HS_PAUSE_CTR], 1
273F:4464 5E pop si
273F:4465 loc_855: ; Move to next entry
-273F:4465 83 C3 08 add bx, HOTSPOT_ACTION_SLOT_SIZE
+273F:4465 83 C3 08 add bx, PAUSED_CHAR_SLOT_SIZE
273F:4468 E2 E1 loop locloop_854 ; Loop through list
273F:446A 5B pop bx
273F:446B C3 retn
- sub_97 endp
+ character_paused_list_reset endp
-
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
; SUBROUTINE
;
@@ -10417,7 +10439,7 @@
; 988C, 9F4B
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
-273F:446C random proc near
+ random proc near
273F:446C 56 push si
273F:446D 57 push di
273F:446E 53 push bx
@@ -10583,37 +10605,36 @@
; Called from: 273F:5133, 5F63
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
-273F:4560 sub_105 proc near
-273F:4560 loc_869: ; xref 273F:5EC8
+ character_paused_list_scan proc near
273F:4560 \xFAF6 44 4C FF test byte ptr [si+HS_BLOCKED_FLAG], 0FFh
273F:4564 74 2C jz loc_ret_873 ; Jump if zero
-273F:4566 loc_870: ; xref 273F:5042
+ character_paused_list_scan_2:
273F:4566 \xFA53 push bx
-273F:4567 BB B0AE mov bx, offset hotspot_action_list
-273F:456A B9 0014 mov cx, NUM_HOTSPOT_ACTION_SLOTS
+273F:4567 BB B0AE mov bx, offset character_pause_list
+273F:456A B9 0014 mov cx, NUM_PAUSED_CHARS_SLOTS
273F:456D 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
273F:4570 locloop_871: ; xref 273F:458F
-273F:4570 3B 07 cmp ax, [bx]
-273F:4572 75 18 jne loc_872 ; Jump if not equal
-273F:4574 C7 47 04 000F mov word ptr [bx+4], 0Fh
-273F:4579 81 7F 02 2710 cmp word ptr [bx+2], 2710h
+273F:4570 3B 07 cmp ax, [bx+PC_SRC_CHAR_ID] ; Found slot for hotspot?
+273F:4572 75 18 jne loc_872 ; Skip if not
+273F:4574 C7 47 04 000F mov word ptr [bx+PC_COUNTER], 15
+273F:4579 81 7F 02 2710 cmp word ptr [bx+PC_DEST_CHAR_ID], START_EXIT_HOTSPOT_ID
273F:457E 73 0C jae loc_872
273F:4580 56 push si
273F:4581 51 push cx
-273F:4582 8B 77 06 mov si, [bx+6]
-273F:4585 C7 44 4A 000F mov word ptr [si+HS_V4A], 0Fh
+273F:4582 8B 77 06 mov si, [bx+PC_HOTSPOT_PTR]
+273F:4585 C7 44 4A 000F mov word ptr [si+HS_PAUSE_CTR], 15
273F:458A 59 pop cx
273F:458B 5E pop si
273F:458C loc_872: ; xref 273F:4572, 457E
-273F:458C 83 C3 08 add bx, HOTSPOT_ACTION_SLOT_SIZE
+273F:458C 83 C3 08 add bx, PAUSED_CHAR_SLOT_SIZE
273F:458F E2 DF loop locloop_871 ; Loop if cx > 0
273F:4591 5B pop bx
273F:4592 loc_ret_873: ; xref 273F:4564
273F:4592 C3 retn
- sub_105 endp
+ character_paused_list_scan endp
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
@@ -10662,9 +10683,9 @@
273F:45C1 56 push si
273F:45C2 E8 C725 call get_room_resource_pointer2
273F:45C5 5B pop bx
-273F:45C6 87 F3 xchg si, bx
-273F:45C8 loc_877: ; xref 273F:45F4, 4600
-273F:45C8 E9 00BB jmp loc_888 ; (4686)
+273F:45C6 87 F3 xchg si, bx ; si=char, bx=hotspot
+273F:45C8 loc_877:
+273F:45C8 E9 00BB jmp loc_888
273F:45CB loc_878:
273F:45CB 58 pop ax
273F:45CC B8 0003 mov ax, 3 ; Initial call for action
@@ -10719,15 +10740,15 @@
273F:4633 73 41 jae loc_887 ; Jump if above or =
273F:4635 81 3E BA1B 0408 cmp active_hotspot_id, FIRST_OBJECT_HOTSPOT_ID
273F:463B 73 B4 jae loc_880 ; Jump if above or =
-273F:463D 80 7F 44 08 cmp byte ptr [bx+44h],8
+273F:463D 80 7F 44 08 cmp byte ptr [bx+HS_CHAR_MODE], CHARMODE_8
273F:4641 74 AE je loc_880 ; Jump if equal
-273F:4643 80 7F 44 04 cmp byte ptr [bx+44h],4
+273F:4643 80 7F 44 04 cmp byte ptr [bx+HS_CHAR_MODE], CHARMODE_4
273F:4647 74 A8 je loc_880 ; Jump if equal
-273F:4649 80 7F 44 07 cmp byte ptr [bx+44h],7
+273F:4649 80 7F 44 07 cmp byte ptr [bx+HS_CHAR_MODE], CHARMODE_7
273F:464D 75 17 jne loc_886 ; Jump if not equal
273F:464F EB A0 jmp short loc_880 ; (45F1)
273F:4651 loc_884: ; xref 273F:45DD
-273F:4651 F6 44 2A FF test byte ptr [si+HS_ACTION_CTR],0FFh
+273F:4651 F6 44 2A FF test byte ptr [si+HS_ACTION_CTR],0FFh
273F:4655 75 07 jnz loc_885 ; Jump if yes
273F:4657 33 C0 xor ax, ax ; Zero register
273F:4659 53 push bx
@@ -10739,7 +10760,7 @@
273F:4665 C3 retn
273F:4666 loc_886: ; xref 273F:464D
273F:4666 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
-273F:466A B8 000E mov ax,0Eh
+273F:466A B8 000E mov ax, 0Eh
273F:466D 53 push bx
273F:466E E8 1D40 call display_message_dialog_3
273F:4671 5B pop bx
@@ -10760,7 +10781,7 @@
273F:4692 C6 47 44 08 mov byte ptr [bx+HS_CHAR_MODE], CHARMODE_8
273F:4696 C7 47 42 001E mov word ptr [bx+HS_DELAY_CTR], 30
273F:469B 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:469E 89 47 50 mov [bx+50h], ax
+273F:469E 89 47 50 mov [bx+HS_DIRECTION], ax
273F:46A1 loc_889: ; xref 273F:4690
273F:46A1 33 C0 xor ax,ax ; Zero register
273F:46A3 C3 retn
@@ -10936,16 +10957,16 @@
;
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
- npc_unknown_2 proc near
+ npc_reset_paused_list proc near
273F:4796 C6 44 44 01 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_1
273F:479A C7 44 42 0016 mov word ptr [si+HS_DELAY_CTR], 16h
-273F:479F E8 FC9F call sub_97 ; (4441)
+273F:479F E8 FC9F call character_paused_list_reset
273F:47A2 8B DE mov bx,si ; Move to next npc action
273F:47A4 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
273F:47A7 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
273F:47AA 89 6F 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], bp
273F:47AD C3 retn
- npc_unknown_2 endp
+ npc_reset_paused_list endp
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
; SUBROUTINE
@@ -10954,12 +10975,12 @@
; si = hotspot record
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
-273F:47AE room_check_x_extents proc near
+ room_check_x_extents proc near
273F:47AE 53 push bx
273F:47AF 8B 44 06 mov ax, [si+HS_ROOM_NUM]
273F:47B2 B3 09 mov bl, RH_TABLE_ENTRY_SIZE
273F:47B4 F6 E3 mul bl ; Calculate offset
-273F:47B6 8B D8 mov bx,ax
+273F:47B6 8B D8 mov bx, ax
273F:47B8 8B 9F BF40 mov bx, [room_info_table][bx] ; Get room record ptr
273F:47BC 83 C3 19 add bx, ROOM_X_START
273F:47BF 8B 44 0D mov ax, [si+HS_X] ; Get X start
@@ -11042,27 +11063,30 @@
273F:4834 33 C0 xor ax,ax ; Zero register
273F:4836 13 06 B8AD adc ax, seq_timer_ctr_2
273F:483A BE B8AF mov si, offset sequence_delay_table
-273F:483D EB 62 jmp short loc_915 ; (48A1)
+273F:483D EB 62 jmp short add_sequence_delay_2
add_sequence_delay endp
- ;\xDF\xDF\xDF\xDF External Entry into Subroutine \xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
+ ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
+ ; SUBROUTINE
;
; Called from: 273F:0024
+ ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
-273F:483F sub_115:
-273F:483F \xFABE B8AF mov si,offset sequence_delay_table ; (31E4:B8AF=0)
+ clear_sequence_delay_table proc near
+273F:483F \xFABE B8AF mov si,offset sequence_delay_table
273F:4842 B9 0028 mov cx, NUM_DELAY_ENTRIES
273F:4845 locloop_910: ; xref 273F:4857
-273F:4845 F6 44 06 FF test byte ptr [si+6],0FFh
-273F:4849 74 09 jz loc_911 ; Jump if zero
-273F:484B C7 04 0000 mov word ptr [si],0
-273F:484F C7 44 02 0000 mov word ptr [si+2],0
-273F:4854 loc_911: ; xref 273F:4849
+273F:4845 F6 44 06 FF test byte ptr [si+6], 0FFh ; Can the entry be cleared?
+273F:4849 74 09 jz loc_911 ; Skip if not
+273F:484B C7 04 0000 mov word ptr [si], 0 ; Clear the entry
+273F:484F C7 44 02 0000 mov word ptr [si+2], 0
+273F:4854 loc_911:
273F:4854 83 C6 07 add si, DELAY_ENTRY_SIZE
273F:4857 E2 EC loop locloop_910 ; Loop if cx > 0
273F:4859 C3 retn
+ clear_sequence_delay_table endp
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
; SUBROUTINE
@@ -11078,14 +11102,14 @@
273F:4868 locloop_912: ; xref 273F:4889
273F:4868 F7 04 FFFF test word ptr [si], 0FFFFh ; Any entry here?
273F:486C 74 18 jz loc_913 ; Skip if not
-273F:486E 3B 5C 02 cmp bx, [si+2]
+273F:486E 3B 5C 02 cmp bx, [si+2] ; Check high word of expiry time
273F:4871 72 13 jb loc_913 ; Jump if below
-273F:4873 3B 14 cmp dx, [si]
+273F:4873 3B 14 cmp dx, [si] ; Check low word
273F:4875 72 0F jb loc_913 ; Jump if below
273F:4877 C7 04 0000 mov word ptr [si], 0 ; Timeout for entry reached
273F:487B C7 44 02 0000 mov word ptr [si+2], 0
-273F:4880 8B 44 04 mov ax,[si+4]
-273F:4883 E9 F5AE jmp sequence_execute
+273F:4880 8B 44 04 mov ax, [si+4] ; Get script to execute
+273F:4883 E9 F5AE jmp sequence_execute ; Execute the script
273F:4886 loc_913:
273F:4886 83 C6 07 add si, DELAY_ENTRY_SIZE ; Move to next entry
273F:4889 E2 DD loop locloop_912 ; Loop if cx > 0
@@ -11101,7 +11125,7 @@
273F:488C \xFABE B8AF mov si, offset sequence_delay_table
273F:488F B9 0028 mov cx, NUM_DELAY_ENTRIES
273F:4892 locloop_914:
-273F:4892 C7 04 0000 mov word ptr [si],0
+273F:4892 C7 04 0000 mov word ptr [si], 0
273F:4896 83 C6 07 add si, DELAY_ENTRY_SIZE
273F:4899 E2 F7 loop locloop_914 ; Loop if cx > 0
273F:489B C3 retn
@@ -11115,8 +11139,8 @@
273F:489C BE B8AF mov si, offset sequence_delay_table
273F:489F 33 C0 xor ax, ax
-273F:48A1 loc_915:
-273F:48A1 8B E9 mov bp,cx
+ add_sequence_delay_2:
+273F:48A1 8B E9 mov bp, cx
273F:48A3 B9 0028 mov cx, NUM_DELAY_ENTRIES
273F:48A6 locloop_916:
@@ -11124,9 +11148,9 @@
273F:48AA 75 13 jnz loc_917 ; If not, then skip
273F:48AC F7 44 02 FFFF test word ptr [si+2],0FFFFh
273F:48B1 75 0C jnz loc_917
-273F:48B3 89 2C mov [si],bp ; Store sequence details
-273F:48B5 89 44 02 mov [si+2], ax
-273F:48B8 89 5C 04 mov [si+4], bx
+273F:48B3 89 2C mov [si],bp ; Store low word of expiry time
+273F:48B5 89 44 02 mov [si+2], ax ; Store high word of expiry time
+273F:48B8 89 5C 04 mov [si+4], bx ; Store script offset
273F:48BB 88 54 06 mov [si+6], dl
273F:48BE C3 retn
273F:48BF loc_917:
@@ -12099,12 +12123,12 @@
; Called from: 273F:8FE4
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
-273F:4F74 sub_124 proc near
-273F:4F74 C6 06 3946 00 mov byte ptr ds:[3946h],0 ; (273F:3946=1Fh)
+ seq_pathfind_reset proc near
+273F:4F74 C6 06 3946 00 mov pathfind_in_progress, 0
273F:4F79 \xFABE 4227 mov si, offset chars_pathfind_data
-273F:4F7C C7 04 0000 mov word ptr [si],0
+273F:4F7C C7 04 0000 mov word ptr [si], 0
273F:4F80 C3 retn
- sub_124 endp
+ seq_pathfind_reset endp
273F:4F81 00 db 0
@@ -12130,7 +12154,7 @@
273F:4F9F A3 BA1B mov active_hotspot_id, ax
273F:4FA2 8B 44 2F mov ax, [si+HS_USE_HOTSPOT_ID]
273F:4FA5 A3 BA19 mov use_hotspot_id, ax
-273F:4FA8 8B 44 2D mov ax, [si+HS_HOTSPOT_SCRIPT_ID
+273F:4FA8 8B 44 2D mov ax, [si+HS_HOTSPOT_SCRIPT_ID]
273F:4FAB E8 EE86 call sequence_execute
273F:4FAE C7 44 2F 0000 mov word ptr [si+HS_USE_HOTSPOT_ID], 0
273F:4FB3 loc_1023:
@@ -12160,12 +12184,12 @@
273F:4FEC 8B DE mov bx, si
273F:4FEE 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
273F:4FF1 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:4FF4 C6 44 4C 01 mov byte ptr [si+HS_BLOCKED_FLAG], 1
+273F:4FF4 C6 44 4C 01 mov byte ptr [si+HS_BLOCKED_FLAG], BS_INITIAL
273F:4FF8 C7 44 52 0000 mov [si+HS_DEST_HOTSPOT], 0
273F:4FFD C6 06 9834 04 mov cursor_state, CURSORSTATE_BUMPED
273F:5002 E9 0661 jmp character_set_random_dest
-273F:5005 loc_1026:
+273F:5005 loc_1026:
273F:5005 5E pop si
273F:5006 C6 44 44 03 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_PAUSED
273F:500A C7 44 42 000A mov word ptr [si+HS_DELAY_CTR], 10
@@ -12174,26 +12198,26 @@
273F:5010 loc_1027:
273F:5010 C6 45 1D 00 mov byte ptr [di+ANIM_SKIP], 0
273F:5014 loc_1028:
-273F:5014 F7 44 47 FFFF test [si+HS_USE2_HOTSPOT_ID], 0FFFFh
+273F:5014 F7 44 47 FFFF test [si+SCRIPT_HOTSPOT_ID], 0FFFFh
273F:5019 74 11 jz loc_1029 ; Jump if zero
-273F:501B 8B 44 47 mov ax, [si+HS_USE2_HOTSPOT_ID]
+273F:501B 8B 44 47 mov ax, [si+SCRIPT_HOTSPOT_ID]
273F:501E A3 BA19 mov use_hotspot_id, ax
273F:5021 8B 44 45 mov ax, [si+HS_TICK_SCRIPT_OFFSET]
273F:5024 E8 EE0D call sequence_execute
-273F:5027 C7 44 47 0000 mov word ptr [si+HS_USE2_HOTSPOT_ID], 0
+273F:5027 C7 44 47 0000 mov word ptr [si+SCRIPT_HOTSPOT_ID], 0
273F:502C loc_1029:
-273F:502C F7 44 4A FFFF test word ptr [si+HS_V4A], 0FFFFh
+273F:502C F7 44 4A FFFF test word ptr [si+HS_PAUSE_CTR], 0FFFFh
273F:5031 74 21 jz loc_1031 ; Jump if zero
273F:5033 E8 F330 call character_update_movement
273F:5036 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
273F:5039 E8 FF16 call pathfind_reset
-273F:503C 83 7C 4A 01 cmp word ptr [si+HS_V4A], 1
+273F:503C 83 7C 4A 01 cmp word ptr [si+HS_PAUSE_CTR], 1
273F:5040 74 03 je loc_1030 ; Jump if equal
-273F:5042 E9 F521 jmp loc_870 ; (4566)
+273F:5042 E9 F521 jmp character_paused_list_scan_2
273F:5045 loc_1030: ; xref 273F:5040
-273F:5045 C7 44 4A 0000 mov word ptr [si+HS_V4A], 0
-273F:504A F6 44 44 FF test byte ptr [si+HS_V4A], 0FFh
+273F:5045 C7 44 4A 0000 mov word ptr [si+HS_PAUSE_CTR], 0
+273F:504A F6 44 44 FF test byte ptr [si+HS_CHAR_MODE], 0FFh
273F:504E 75 04 jnz loc_1031 ; Jump if not zero
273F:5050 E8 F334 call character_pathfind_clear
273F:5053 C3 retn
@@ -12259,7 +12283,7 @@
273F:50C5 E9 12E9 jmp display_message_dialog
273F:50C8 loc_1040: ; xref 273F:505A
-273F:50C8 F7 44 58 FFFF test word ptr [si+58h],0FFFFh
+273F:50C8 F7 44 58 FFFF test word ptr [si+HS_V58], 0FFFFh
273F:50CD 74 0F jz loc_1041 ; Jump if zero
273F:50CF F6 06 6D52 FF test player_action_state, 0FFh
273F:50D4 74 08 jz loc_1041 ; Jump if zero
@@ -12291,7 +12315,7 @@
273F:5107 loc_1043: ; xref 273F:5102
273F:5107 3B 47 03 cmp ax, [bx+CURRENT_ACTION_ROOM_NUM] ; Compare against room number
273F:510A 74 03 je loc_1044 ; Jump if equal
-273F:510C E9 01F6 jmp loc_1078
+273F:510C E9 01F6 jmp npc_change_room
273F:510F loc_1044: ; xref 273F:510A
273F:510F C6 45 1D 00 mov byte ptr [di+ANIM_SKIP], 0
273F:5113 E9 F0A8 jmp action_dispatch
@@ -12315,7 +12339,7 @@
273F:5130 56 push si
273F:5131 57 push di
273F:5132 53 push bx
-273F:5133 E8 F42A call sub_105 ; (4560)
+273F:5133 E8 F42A call character_paused_list_scan
273F:5136 8B 4C 56 mov cx, [si+HS_DEST_Y]
273F:5139 8B 5C 54 mov bx, [si+HS_DEST_X]
273F:513C 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
@@ -12328,17 +12352,17 @@
273F:514A 75 01 jnz loc_1050 ; Jump if not zero
273F:514C C3 retn
273F:514D loc_1050: ; xref 273F:514A
-273F:514D 3D 0001 cmp ax,1
+273F:514D 3D 0001 cmp ax, PF_OK
273F:5150 74 0C je loc_1051 ; Jump if equal
273F:5152 F7 44 52 FFFF test [si+HS_DEST_HOTSPOT], 0FFFFh
273F:5157 75 07 jnz loc_1052 ; Jump if not zero
-273F:5159 3D 0002 cmp ax,2
+273F:5159 3D 0002 cmp ax, PF_DEST_OCCUPIED
273F:515C 75 02 jne loc_1052 ; Jump if not equal
273F:515E loc_1051: ; xref 273F:5150
273F:515E EB 79 jmp short loc_1058 ; (51D9)
273F:5160 loc_1052: ; xref 273F:5157, 515C
273F:5160 87 D3 xchg dx,bx
-273F:5162 80 7C 4C 02 cmp byte ptr [si+HS_BLOCKED_FLAG], 2
+273F:5162 80 7C 4C 02 cmp byte ptr [si+HS_BLOCKED_FLAG], BS_FINAL
273F:5166 74 24 je loc_1054 ; Jump if equal
273F:5168 80 44 4C 01 add byte ptr [si+HS_BLOCKED_FLAG], 1
273F:516C F6 44 4D FF test byte ptr [si+HS_V4D], 0FFh
@@ -12370,11 +12394,11 @@
273F:51A7 5B pop bx
273F:51A8 sub_125 proc near
-273F:51A8 E8 F296 call sub_97 ; (4441)
+273F:51A8 E8 F296 call character_paused_list_reset
273F:51AB E8 F1B8 call character_update_movement
273F:51AE 83 6C 61 05 sub word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
273F:51B2 C6 44 4D 00 mov byte ptr [si+HS_V4D], 0
-273F:51B6 C6 44 4C 00 mov byte ptr [si+HS_BLOCKED_FLAG], 0
+273F:51B6 C6 44 4C 00 mov byte ptr [si+HS_BLOCKED_FLAG], BS_NONE
273F:51BA C6 44 44 03 mov byte ptr [si+HS_CHAR_MODE], CHARMODE_3
273F:51BE C7 44 42 0002 mov word ptr [si+HS_DELAY_CTR], 2
273F:51C3 8B DE mov bx, si
@@ -12396,18 +12420,18 @@
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
273F:51D9 loc_1058: ; xref 273F:515E
-273F:51D9 C6 44 4C 00 mov byte ptr [si+HS_BLOCKED_FLAG],0
-273F:51DD F7 07 FFFF test word ptr [bx],0FFFFh
-273F:51E1 75 06 jnz loc_1059 ; Jump if not zero
-273F:51E3 8B DA mov bx,dx
-273F:51E5 C6 07 02 mov byte ptr [bx],2
+273F:51D9 C6 44 4C 00 mov byte ptr [si+HS_BLOCKED_FLAG], BS_NONE
+273F:51DD F7 07 FFFF test word ptr [bx], 0FFFFh ; Any pathfinding set defined?
+273F:51E1 75 06 jnz loc_1059 ; Jump if yes
+273F:51E3 8B DA mov bx, dx
+273F:51E5 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
273F:51E8 C3 retn
273F:51E9 loc_1059: ; xref 273F:51E1
273F:51E9 87 DA xchg bx,dx
273F:51EB C6 07 05 mov byte ptr [bx], CHAR_ACTION_CONTINUE_WALK
273F:51EE E8 F01C call character_translate_movements
-273F:51F1 83 65 02 F8 and word ptr [di+2],0FFF8h
-273F:51F5 83 64 0F F8 and word ptr [si+0Fh],0FFF8h
+273F:51F1 83 65 02 F8 and word ptr [di+ANIM_Y], 0FFF8h
+273F:51F5 83 64 0F F8 and word ptr [si+HS_Y], 0FFF8h
273F:51F9 loc_1060: ; xref 273F:5116
273F:51F9 8B 44 52 mov ax, [si+HS_DEST_HOTSPOT]
273F:51FC 0B C0 or ax,ax ; Zero ?
@@ -12427,7 +12451,7 @@
273F:5216 loc_ret_1061: ; xref 273F:521C
273F:5216 C3 retn
273F:5217 loc_1062: ; xref 273F:51FE, 5203, 5211
-273F:5217 E8 BF9B call sub_41 ; (11B5)
+273F:5217 E8 BF9B call character_paused_list_check
273F:521A 0B C0 or ax,ax ; Zero ?
273F:521C 75 F8 jnz loc_ret_1061 ; Jump if not zero
273F:521E F6 44 49 FF test byte ptr [si+HS_PATHFIND_COVERED], 0FFh
@@ -12556,7 +12580,7 @@
; character walking to the exit to route them to the right room
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
-273F:5305 loc_1078: ; xref 273F:510C
+ npc_change_room:
273F:5305 80 44 60 01 add byte ptr [si+HS_EXIT_CTR], 1
273F:5309 80 7C 60 05 cmp byte ptr [si+HS_EXIT_CTR], 5
273F:530D 73 AF jae loc_1073 ; Jump if above or =
@@ -12657,7 +12681,7 @@
273F:53D1 loc_1085:
273F:53D1 5B pop bx
273F:53D2 C6 07 01 mov byte ptr [bx], CHAR_ACTION_START_WALK
-273F:53D5 C6 45 27 01 mov byte ptr [di+ANIM_UNKNOWN1], 1
+273F:53D5 C6 45 27 01 mov byte ptr [di+ANIM_WALK_FLAG], 1
273F:53D9 C3 retn
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
@@ -12777,9 +12801,9 @@
273F:5490 loc_1092: ; xref 273F:549D
273F:5490 \xFAF7 05 FFFF test word ptr [di+WALKTO_HOTSPOT_ID], 0FFFFh ; End of list reached?
273F:5494 74 4F jz loc_1094 ; Jump if yes
-273F:5496 3B 05 cmp ax, [diWALKTO_HOTSPOT_ID] ; Found entry for active hotspot?
+273F:5496 3B 05 cmp ax, [di+WALKTO_HOTSPOT_ID] ; Found entry for active hotspot?
273F:5498 74 05 je loc_1093 ; Jump if yes
-273F:549A 83 C7 06 add di, 6 ; Move to next record
+273F:549A 83 C7 06 add di, WALKTO_RECORD_SIZE ; Move to next record
273F:549D EB F1 jmp short loc_1092
273F:549F loc_1093:
273F:549F 8B 4D 02 mov cx, [di+WALKTO_X]
@@ -12788,7 +12812,7 @@
273F:54A7 F6 C6 80 test dh, 80h
273F:54AA 74 47 jz loc_1095 ; Jump if zero
273F:54AC 5F pop di
-273F:54AD 88 45 27 mov [di+ANIM_UNKNOWN1], al
+273F:54AD 88 45 27 mov [di+ANIM_WALK_FLAG], al
273F:54B0 80 E6 7F and dh, 7Fh
273F:54B3 8B 44 0D mov ax, [si+HS_X]
273F:54B6 D1 E8 shr ax, 1
@@ -12824,7 +12848,7 @@
273F:54F1 B0 00 mov al, 0
273F:54F3 loc_1095: ; xref 273F:54AA
273F:54F3 5F pop di
-273F:54F4 88 45 27 mov [di+ANIM_UNKNOWN1], al
+273F:54F4 88 45 27 mov [di+ANIM_WALK_FLAG], al
273F:54F7 8B 44 0D mov ax, [si+HS_X]
273F:54FA 2B C1 sub ax, cx
273F:54FC 73 02 jnc loc_1096 ; Jump if carry=0
@@ -13077,7 +13101,7 @@
character_set_random_dest proc near
273F:5666 \xFAC6 07 01 mov byte ptr [bx], CHAR_ACTION_START_WALK
-273F:5669 C6 45 27 01 mov byte ptr [di+ANIM_UNKNOWN1], 1
+273F:5669 C6 45 27 01 mov byte ptr [di+ANIM_WALK_FLAG], 1
273F:566D 56 push si
273F:566E 56 push si
273F:566F 8B 44 06 mov ax, [si+HS_ROOM_NUM] ; Get char's room rsc
@@ -13820,7 +13844,7 @@
273F:5BAA E8 EB41 call character_face_hotspot
273F:5BAD 81 3E BA1B 0412 cmp active_hotspot_id, 412h
273F:5BB3 75 08 jne loc_1170 ; Jump if not equal
-273F:5BB5 81 3E BA19 2710 cmp use_hotspot_id, 2710h
@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list