[Scummvm-cvs-logs] SF.net SVN: scummvm: [21418] scummvm/trunk/engines/lure/diassembly
dreammaster at users.sourceforge.net
dreammaster at users.sourceforge.net
Thu Mar 23 13:27:01 CET 2006
Revision: 21418
Author: dreammaster
Date: 2006-03-23 13:26:13 -0800 (Thu, 23 Mar 2006)
ViewCVS: http://svn.sourceforge.net/scummvm/?rev=21418&view=rev
Log Message:
-----------
Partially disassembly of the pathfinding code and miscellaneous support methods
Modified Paths:
--------------
scummvm/trunk/engines/lure/diassembly/LURE.ASM
scummvm/trunk/engines/lure/diassembly/Lure_notes.txt
Modified: scummvm/trunk/engines/lure/diassembly/LURE.ASM
===================================================================
--- scummvm/trunk/engines/lure/diassembly/LURE.ASM 2006-03-23 04:49:03 UTC (rev 21417)
+++ scummvm/trunk/engines/lure/diassembly/LURE.ASM 2006-03-23 21:26:13 UTC (rev 21418)
@@ -140,9 +140,10 @@
ANIM_HOTSPOT_ID equ 1Bh
ANIM_LAYER1_SKIP equ 1Dh
ANIM_VOICE_CHAR_ID equ 1Eh
+ANIM_CHAR_RECT_Y equ 22h
ANIM_VOICE_CTR equ 24h
ANIM_DIRECTION equ 26h
-ANIM_UNKNOWN1 equ 27h
+ANIM_UNKNOWN1 equ 27h
ANIM_START_COLOUR equ 28h
; Hotspot header record constants
@@ -174,18 +175,34 @@
HS_START_COLOUR equ 23h
HS_SCRIPT_OFFSET equ 24h
HS_MOVEMENT_OFFSET equ 24h
+HS_STEP_CTR equ 26h
+HS_FRAME_OFFSET equ 28h
HS_FRAME_NUM equ 2Ah
+HS_V2B equ 2Bh
+HS_HOTSPOT_SCRIPT_ID equ 2Dh
+HS_USE_HOTSPOT_ID equ 2Fh
+HS_V33 equ 33h
HS_TALK_X equ 35h
HS_TALK_Y equ 36h
HS_TALK_COUNTDOWN equ 37h
HS_TALK_CHAR_ID equ 39h
HS_RESPONSE_ID equ 3Ch
-HS_UNKNOWN1 equ 44h
+HS_V42 equ 42h
+HS_V44 equ 44h
+HS_HOTSPOT2_SCRIPT_ID equ 45h
+HS_USE2_HOTSPOT_ID equ 47h
+HS_V49 equ 49h
+HS_V4A equ 4Ah
+HS_V4C equ 4Ch
+HS_V4D equ 4Dh
+HS_V4E equ 4Eh
HS_DIRECTION equ 50h
HS_DEST_HOTSPOT equ 52h
HS_DEST_X equ 54h
HS_DEST_Y equ 56h
-HS_MOMENT_SRC_OFFSET equ 5Ah
+HS_V58 equ 58h
+HS_MOVEMENT_SRC_OFFSET equ 5Ah
+HS_V60 equ 60h
HS_ACTION_OFFSET equ 61h
HS_FIRST_ACTION_OFFSET equ 63h
@@ -195,9 +212,18 @@
PIXEL_DATA_SEGMENT equ 3
PIXEL_DATA_SIZE equ 5
PIXEL_FRAME_SIZE equ 7
+PIXEL_MOVEREC_UP equ 9
+PIXEL_MOVEREC_DOWN equ 0Bh
+PIXEL_MOVEREC_LEFT equ 0Dh
+PIXEL_MOVEREC_RIGHT equ 0Fh
+PIXEL_FRAMENUM_UP equ 11h
+PIXEL_FRAMENUM_DOWN equ 12h
+PIXEL_FRAMENUM_LEFT equ 13h
+PIXEL_FRAMENUM_RIGHT equ 14h
+
PIXELFLAG_HAS_TABLE equ 4
-NOONE_HOTSPOT_ID equ 3E7h
+NOONE_HOTSPOT_ID equ 3E7h
PLAYER_HOTSPOT_ID equ 3E8h
SKORL_HOTSPOT_ID equ 3EAh
@@ -214,11 +240,15 @@
; Room exit hotspot record constants
REHS_RECORD_SIZE equ 11h
-REHS_HOTSPOT_1 equ 0
-REHS_RESULT_1 equ 2
-REHS_HOTSPOT_2 equ 6
-REHS_HOTSPOT_2 equ 8
-REHS_EXIT_BLOCKED equ 12
+REHS_HOTSPOT1_ID equ 0
+REHS_HOTSPOT1_CURRENT_FRAME equ 2
+REHS_HOTSPOT1_DEST_FRAME equ 3
+REHS_HOTSPOT2_ID equ 6
+REHS_HOTSPOT2_CURRENT_FRAME equ 8
+REHS_HOTSPOT2_DEST_FRAME equ 9
+REHS_EXIT_BLOCKED equ 0Ch
+REHS_HOTSPOT1_OFFSET equ 0Dh
+REHS_HOTSPOT2_OFFSET equ 0Fh
; Room header record constants
RH_ROOM_NUM equ 2
@@ -264,10 +294,16 @@
FACING_LEFT equ 2
FACING_RIGHT equ 3
+FACING2_LEFT equ 1
+FACING2_RIGHT equ 2
+FACING2_DOWN equ 3
+FACING2_UP equ 4
+
; Movement record constants
MOVEMENT_FRAME_NUM equ 0
MOVEMENT_X_CHANGE equ 2
MOVEMENT_Y_CHANGE equ 4
+MOVEMENT_REC_SIZE equ 6
; Talk constants
TALK_PRE_SEQUENCE equ 0
@@ -283,12 +319,18 @@
TALK_DIALOG_WIDTH equ 128
; Player actions used in player_tick_proc
-PLAYER_ACTION_START_WALK equ 1
-PLAYER_ACTION_DISPATCH_ACTION equ 2
-PLAYER_ACTION_EXEC_SCRIPT equ 3
-PLAYER_ACTION_CONTINUE_WALK equ 5
+CURRENT_ACTION_RECORD_SIZE equ 5
+CURRENT_ACTION_SUPPORT_TABLE equ 1
+CURRENT_ACTION_ROOM_NUM equ 3
+CHAR_ACTION_NONE equ 0
+CHAR_ACTION_START_WALK equ 1
+CHAR_ACTION_DISPATCH_ACTION equ 2
+CHAR_ACTION_EXEC_SCRIPT equ 3
+CHAR_ACTION_PROCESSING_PATH equ 4
+CHAR_ACTION_CONTINUE_WALK equ 5
+
; The following equates show data references outside the range of the program.
= 0000 data_1e equ 0 ; (0000:0000=30h)
@@ -1407,9 +1449,9 @@
273F:0801 8E C0 mov es, ax
273F:0803 B1 03 mov cl,3
273F:0805 A1 11D8 mov ax, mouse_y2
-273F:0808 A3 0784 mov word ptr ds:[784h],ax ; (273F:0784=0BA07h)
+273F:0808 A3 0784 mov saved_mouse_y, ax
273F:080B A1 11D6 mov ax, mouse_x2
-273F:080E A3 0782 mov word ptr ds:[782h],ax ; (273F:0782=0E1Eh)
+273F:080E A3 0782 mov saved_mouse_x, ax
273F:0811 A1 076C mov ax, menu_items_proc
273F:0814 26: A3 3368 mov es:data_78e,ax ; (0874:3368=4758h)
273F:0818 A0 9835 mov al, num_inventory_items
@@ -1468,25 +1510,25 @@
273F:08A1 33 C0 xor ax,ax ; Zero register
273F:08A3 AB stosw ; Store ax to es:[di]
273F:08A4 8E DD mov ds,bp
-273F:08A6 C6 06 9834 01 mov byte ptr data_427,1 ; (273F:9834=0F9h)
+273F:08A6 C6 06 9834 01 mov byte ptr data_1084,1 ; (273F:9834=0F9h)
273F:08AB A3 1924 mov hotspot_id, ax
273F:08AE \xFABE 6CEF mov si, offset player_hotspot_rec
273F:08B1 89 44 52 mov [si+HS_DEST_HOTSPOT],ax
273F:08B4 88 44 2A mov [si+2Ah],al
273F:08B7 88 44 FF mov [si-1],al
273F:08BA 8B DE mov bx,si
-273F:08BC 03 5C 61 add bx,[si+61h]
-273F:08BF 83 C3 63 add bx,63h
-273F:08C2 89 44 42 mov [si+42h],ax
-273F:08C5 88 44 44 mov [si+44h],al
-273F:08C8 C6 07 02 mov byte ptr [bx],2
+273F:08BC 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
+273F:08BF 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
+273F:08C2 89 44 42 mov [si+HS_V42], ax
+273F:08C5 88 44 44 mov [si+HS_V44], al
+273F:08C8 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
273F:08CB C7 47 01 65F3 mov word ptr [bx+1], offset player_action_support_record
-273F:08D0 loc_65: ; xref 273F:0897
+273F:08D0 loc_65:
273F:08D0 8E DD mov ds,bp
-273F:08D2 8B 0E 0782 mov cx,word ptr ds:[782h] ; (273F:0782=0E1Eh)
+273F:08D2 8B 0E 0782 mov cx, saved_mouse_x
273F:08D6 89 0E 11D6 mov mouse_x2, cx
273F:08DA 89 0E 11D1 mov mouse_x, cx
-273F:08DE 8B 16 0784 mov dx,word ptr ds:[784h] ; (273F:0784=0BA07h)
+273F:08DE 8B 16 0784 mov dx, saved_mouse_y
273F:08E2 89 16 11D8 mov mouse_y2, dx
273F:08E6 89 16 11D3 mov mouse_y, dx
273F:08EA D1 E1 shl cx,1 ; Shift w/zeros fill
@@ -2465,13 +2507,13 @@
273F:0EB1 57 push di
273F:0EB2 53 push bx
273F:0EB3 8B 5C 24 mov bx, [si+HS_MOVEMENT_OFFSET]
-273F:0EB6 8B 44 26 mov ax, [si+26h]
-273F:0EB9 3B 47 02 cmp ax, [bx+2] ; Match found?
-273F:0EBC 75 23 jne loc_130
-273F:0EBE 83 C3 04 add bx, 4 ; Move to next entry
-273F:0EC1 C7 44 26 0000 mov word ptr [si+26h], 0
-273F:0EC6 C7 44 28 0000 mov word ptr [si+28h], 0
-273F:0ECB 89 5C 24 mov [si+HS_MOVEMENT_OFFSET], bx
+273F:0EB6 8B 44 26 mov ax, [si+HS_STEP_CTR]
+273F:0EB9 3B 47 02 cmp ax, [bx+2] ; Any steps remaining?
+273F:0EBC 75 23 jne loc_130 ; Yes, so carry on
+273F:0EBE 83 C3 04 add bx, 4 ; Move to next movement rec
+273F:0EC1 C7 44 26 0000 mov word ptr [si+HS_STEP_CTR], 0 ; Reset counter
+273F:0EC6 C7 44 28 0000 mov word ptr [si+HS_FRAME_OFFSET], 0 ; Reset offset
+273F:0ECB 89 5C 24 mov [si+HS_MOVEMENT_OFFSET], bx ; Update movement ptr
273F:0ECE 83 3F FF cmp word ptr [bx], 0FFFFh ; At end of list?
273F:0ED1 75 07 jne loc_129
273F:0ED3 B8 0001 mov ax,1 ; Yes - so return
@@ -2481,22 +2523,22 @@
273F:0ED9 C3 retn
273F:0EDA loc_129:
273F:0EDA 57 push di
-273F:0EDB 8B 3F mov di, [bx] ; Get entry offset
-273F:0EDD 33 DB xor bx,bx ; Zero register
+273F:0EDB 8B 3F mov di, [bx] ; Get ptr to direction frames
+273F:0EDD 33 DB xor bx, bx
273F:0EDF EB 14 jmp short loc_131
273F:0EE1 loc_130:
273F:0EE1 57 push di
-273F:0EE2 8B 3F mov di, [bx]
-273F:0EE4 8B 5C 28 mov bx, [si+28h]
-273F:0EE7 03 FB add di,bx
-273F:0EE9 83 3D FF cmp word ptr [di], 0FFFFh
-273F:0EEC 75 07 jne loc_131 ; Jump if not equal
+273F:0EE2 8B 3F mov di, [bx] ; Get ptr to direction frames
+273F:0EE4 8B 5C 28 mov bx, [si+HS_FRAME_OFFSET]; Get offset for movement frame
+273F:0EE7 03 FB add di, bx ; Add on offset
+273F:0EE9 83 3D FF cmp word ptr [di], 0FFFFh ; End of movement set for direciton?
+273F:0EEC 75 07 jne loc_131 ; Jump if not
273F:0EEE 2B FB sub di, bx
273F:0EF0 33 DB xor bx, bx
-273F:0EF2 89 5C 28 mov [si+28h], bx
+273F:0EF2 89 5C 28 mov [si+HS_FRAME_OFFSET], bx ; Reset to start of movement data
; di=movement record 5bb8h, si=6cefh
273F:0EF5 loc_131:
-273F:0EF5 8B 05 mov ax, [diMOVEMENT_FRAME_NUM] ; Get new frame number
+273F:0EF5 8B 05 mov ax, [di+MOVEMENT_FRAME_NUM] ; Get new frame number
273F:0EF7 57 push di
273F:0EF8 8B 7C 21 mov di, [si+HS_PIXEL_OFFSET]
273F:0EFB 8B 4D 07 mov cx, [di+PIXEL_FRAME_SIZE]
@@ -2535,8 +2577,8 @@
273F:0F48 89 45 02 mov [di+ANIM_Y], ax
273F:0F4B 8B 05 mov ax, [di+ANIM_X]
273F:0F4D loc_137:
-273F:0F4D 83 44 28 06 add word ptr [si+28h], 6
-273F:0F51 83 44 26 01 add word ptr [si+26h], 1
+273F:0F4D 83 44 28 06 add word ptr [si+HS_FRAME_OFFSET], MOVEMENT_REC_SIZE
+273F:0F51 83 44 26 01 add word ptr [si+HS_STEP_CTR], 1
273F:0F55 33 C0 xor ax, ax
273F:0F57 5B pop bx
273F:0F58 5F pop di
@@ -2733,7 +2775,7 @@
seq_set_blocking_hotspot_script proc near
273F:10A3 81 FB 03E8 cmp bx, PLAYER_HOTSPOT_ID
273F:10A7 75 05 jne loc_154 ; Jump if not equal
-273F:10A9 C6 06 9834 02 mov byte ptr data_427,2 ; (273F:9834=0F9h)
+273F:10A9 C6 06 9834 02 mov byte ptr data_1084,2 ; (273F:9834=0F9h)
273F:10AE loc_154: ; xref 273F:10A7
273F:10AE E8 FC37 call get_room_resource_pointer
273F:10B1 D1 E1 shl cx,1 ; Shift w/zeros fill
@@ -2744,10 +2786,10 @@
273F:10BE 8B DE mov bx, si
273F:10C0 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
273F:10C3 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:10C6 C6 07 03 mov byte ptr [bx], PLAYER_ACTION_EXEC_SCRIPT
+273F:10C6 C6 07 03 mov byte ptr [bx], CHAR_ACTION_EXEC_SCRIPT
273F:10C9 8B 7C 0B mov di, [si+HS_ANIM_OFFSET]
273F:10CC C6 44 49 01 mov byte ptr [si+49h], 1
-273F:10D0 E9 605B jmp loc_1413 ; (712E)
+273F:10D0 E9 605B jmp pathfind_flag_covered_cells
seq_set_blocking_hotspot_script 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
@@ -2805,81 +2847,78 @@
; Called from: 273F:4FBF, 5E61, 60E7
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:110B sub_40 proc near
+ character_find_impinging_chars proc near
273F:110B 56 push si
273F:110C 53 push bx
273F:110D 8B 55 0E mov dx, [di+ANIM_ROOM_NUM]
273F:1110 \xFABE B14E mov si, offset animation_table
273F:1113 B9 002D mov cx, NUM_ANIMATION_SLOTS
-273F:1116 \xFABB 10C0 mov bx, offset data_616
-273F:1119 C7 06 10BE 0000 mov data_615, 0
-273F:111F 8B 05 mov ax, [di]
-273F:1121 A3 10E6 mov word ptr ds:[10E6h],ax ; (273F:10E6=0C329h)
-273F:1124 03 45 13 add ax,[di+13h]
-273F:1127 A3 10E8 mov word ptr ds:[10E8h],ax ; (273F:10E8=4EBFh)
-273F:112A 8B 45 02 mov ax,[di+2]
-273F:112D 03 45 15 add ax,[di+15h]
+273F:1116 \xFABB 10C0 mov bx, offset impinging_char_list
+273F:1119 C7 06 10BE 0000 mov num_impinging_chars, 0
+273F:111F 8B 05 mov ax, [di+ANIM_X]
+273F:1121 A3 10E6 mov char_rect_left, ax
+273F:1124 03 45 13 add ax, [di+ANIM_WIDTH_COPY]
+273F:1127 A3 10E8 mov char_rect_right, ax
+273F:112A 8B 45 02 mov ax, [di+ANIM_Y]
+273F:112D 03 45 15 add ax, [di+ANIM_HEIGHT_COPY]
273F:1130 50 push ax
-273F:1131 2B 45 17 sub ax,[di+17h]
-273F:1134 2B 45 22 sub ax,[di+22h]
-273F:1137 A3 10EA mov word ptr ds:[10EAh],ax ; (273F:10EA=0B9B1h)
+273F:1131 2B 45 17 sub ax, [di+ANIM_Y_CORRECTION]
+273F:1134 2B 45 22 sub ax, [di+ANIM_CHAR_RECT_Y]
+273F:1137 A3 10EA mov char_rect_top, ax
273F:113A 58 pop ax
-273F:113B 03 45 22 add ax,[di+22h]
-273F:113E A3 10EC mov word ptr ds:[10ECh],ax ; (273F:10EC=2Dh)
+273F:113B 03 45 22 add ax, [di+ANIM_CHAR_RECT_Y]
+273F:113E A3 10EC mov char_rect_bottom, ax
-273F:1141 locloop_160: ; xref 273F:119D
-273F:1141 3B FE cmp di,si
-273F:1143 74 55 je loc_161 ; Jump if equal
-273F:1145 F6 44 0C FF test byte ptr [si+0Ch],0FFh
-273F:1149 74 4F jz loc_161 ; Jump if zero
-273F:114B 3B 54 0E cmp dx,[si+0Eh]
-273F:114E 75 4A jne loc_161 ; Jump if not equal
-273F:1150 8B 44 1B mov ax,[si+1Bh]
-273F:1153 3D 0408 cmp ax,408h
-273F:1156 73 42 jae loc_161 ; Jump if above or =
-273F:1158 F6 44 1D FF test byte ptr [si+1Dh],0FFh
-273F:115C 75 3C jnz loc_161 ; Jump if not zero
-273F:115E 8B 44 19 mov ax,[si+19h]
-273F:1161 3B 45 24 cmp ax,[di+24h]
+273F:1141 locloop_160: ; Loop through animations
+273F:1141 3B FE cmp di, si ; Is it the char's animation?
+273F:1143 74 55 je loc_161 ; Skip if yes
+273F:1145 F6 44 0C FF test byte ptr [si+ANIM_LAYER], 0FFh
+273F:1149 74 4F jz loc_161 ; If no layer, then skip
+273F:114B 3B 54 0E cmp dx, [si+ANIM_ROOM_NUM]
+273F:114E 75 4A jne loc_161 ; Skip if not in same room
+273F:1150 8B 44 1B mov ax, [si+ANIM_HOTSPOT_ID]
+273F:1153 3D 0408 cmp ax, 408h
+273F:1156 73 42 jae loc_161 ; Skip if anim not a character
+273F:1158 F6 44 1D FF test byte ptr [si+ANIM_LAYER1_SKIP], 0FFh
+273F:115C 75 3C jnz loc_161 ; Skip if skip flag set
+273F:115E 8B 44 19 mov ax, [si+ANIM_HOTSPOT_OFFSET]
+273F:1161 3B 45 24 cmp ax, [di+ANIM_VOICE_CTR]
273F:1164 74 34 je loc_161 ; Jump if equal
-273F:1166 8B 04 mov ax,[si]
-273F:1168 3B 06 10E8 cmp ax,word ptr ds:[10E8h] ; (273F:10E8=4EBFh)
+273F:1166 8B 04 mov ax, [si+ANIM_X]
+273F:1168 3B 06 10E8 cmp ax, char_rect_right
273F:116C 73 2C jae loc_161 ; Jump if above or =
-273F:116E 03 44 13 add ax,[si+13h]
-273F:1171 3B 06 10E6 cmp ax,word ptr ds:[10E6h] ; (273F:10E6=0C329h)
+273F:116E 03 44 13 add ax, [si+ANIM_WIDTH_COPY]
+273F:1171 3B 06 10E6 cmp ax, char_rect_left
273F:1175 72 23 jb loc_161 ; Jump if below
273F:1177 74 21 jz loc_161 ; Jump if zero
-273F:1179 8B 44 02 mov ax,[si+2]
-273F:117C 03 44 15 add ax,[si+15h]
-273F:117F 8B E8 mov bp,ax
-273F:1181 03 44 22 add ax,[si+22h]
-273F:1184 3B 06 10EA cmp ax,word ptr ds:[10EAh] ; (273F:10EA=0B9B1h)
+273F:1179 8B 44 02 mov ax, [si+ANIM_Y]
+273F:117C 03 44 15 add ax, [si+ANIM_HEIGHT_COPY]
+273F:117F 8B E8 mov bp, ax
+273F:1181 03 44 22 add ax, [si+ANIM_CHAR_RECT_Y]
+273F:1184 3B 06 10EA cmp ax, char_rect_top
273F:1188 72 10 jb loc_161 ; Jump if below
-273F:118A 8B C5 mov ax,bp
-273F:118C 2B 44 17 sub ax,[si+17h]
-273F:118F 2B 44 22 sub ax,[si+22h]
-273F:1192 3B 06 10EC cmp ax,word ptr ds:[10ECh] ; (273F:10EC=2Dh)
+273F:118A 8B C5 mov ax, bp
+273F:118C 2B 44 17 sub ax, [si+ANIM_Y_CORRECTION]
+273F:118F 2B 44 22 sub ax, [si+ANIM_CHAR_RECT_Y]
+273F:1192 3B 06 10EC cmp ax, char_rect_bottom
273F:1196 74 0E je loc_162 ; Jump if equal
273F:1198 72 0C jc loc_162 ; Jump if carry Set
-273F:119A loc_161: ; xref 273F:1143, 1149, 114E, 1156
- ; 115C, 1164, 116C, 1175
- ; 1177, 1188, 11B3
-273F:119A \xFA83 C6 29 add si,29h
-273F:119D E2 A2 loop locloop_160 ; Loop if cx > 0
+273F:119A loc_161:
+273F:119A \xFA83 C6 29 add si, ANIMATION_SLOT_SIZE
+273F:119D E2 A2 loop locloop_160
-273F:119F C7 07 0000 mov word ptr [bx],0
+273F:119F C7 07 0000 mov word ptr [bx], 0 ; Flag end of list
273F:11A3 5B pop bx
273F:11A4 5E pop si
273F:11A5 C3 retn
-273F:11A6 loc_162: ; xref 273F:1196, 1198
-273F:11A6 8B 44 1B mov ax,[si+1Bh]
-273F:11A9 89 07 mov [bx],ax
-273F:11AB 83 C3 02 add bx,2
-273F:11AE 83 06 10BE 01 add data_615, 1
+273F:11A6 loc_162: ; Animation is impinging char
+273F:11A6 8B 44 1B mov ax, [si+ANIM_HOTSPOT_ID]
+273F:11A9 89 07 mov [bx], ax ; Store character Id
+273F:11AB 83 C3 02 add bx, 2
+273F:11AE 83 06 10BE 01 add num_impinging_chars, 1
273F:11B3 EB E5 jmp short loc_161 ; (119A)
- sub_40 endp
+ character_find_impinging_chars 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
;
@@ -2888,15 +2927,15 @@
273F:11B5 sub_41 proc near
273F:11B5 53 push bx
-273F:11B6 \xFABB 10C0 mov bx, offset data_616
+273F:11B6 \xFABB 10C0 mov bx, offset impinging_char_list
273F:11B9 C7 06 10EE 0000 mov data_617, 0
273F:11BF loc_163:
273F:11BF \xFA8B 07 mov ax, [bx] ; Get character Id
-273F:11C1 83 C3 02 add bx, 2
-273F:11C4 0B C0 or ax, ax ; Is it zero?
-273F:11C6 75 05 jnz loc_164 ; Jump if not zero
-273F:11C8 A1 10EE mov ax, data_617
+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:11CB 5B pop bx
273F:11CC C3 retn
273F:11CD loc_164:
@@ -2911,7 +2950,7 @@
273F:11DC 8A 1F mov bl, [bx] ; bl = char's current action
273F:11DE 5E pop si
273F:11DF 58 pop ax
-273F:11E0 80 FB 03 cmp bl, PLAYER_ACTION_EXEC_SCRIPT ; Char in animation sequence?
+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:11E5 BB B0AE mov bx, offset hotspot_action_list
@@ -2930,8 +2969,8 @@
273F:11FB 83 C3 08 add bx, HOTSPOT_ACTION_SLOT_SIZE
273F:11FE E2 EE loop locloop_165 ; Loop remaining action list
-; At this point we've found a character in the data_616 list that isn't currently
-; blocked to execute a hotspot animation, and doesn't have a cross reference
+; 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
273F:1200 8B D8 mov bx, ax
@@ -2945,7 +2984,7 @@
273F:1211 F6 45 49 FF test byte ptr [di+49h], 0FFh ; ???
273F:1215 75 09 jnz loc_168 ; Jump if not zero
273F:1217 5F pop di
-273F:1218 E8 314B call sub_93
+273F:1218 E8 314B call character_update_movement
273F:121B 5B pop bx
273F:121C B8 0001 mov ax, 1
273F:121F C3 retn
@@ -3117,7 +3156,7 @@
273F:1357 A1 1924 mov ax, hotspot_id
273F:135A 89 45 02 mov [di+2],ax
273F:135D C7 45 04 0000 mov word ptr [di+4], 0
-273F:1362 C6 07 02 mov byte ptr [bx], PLAYER_ACTION_DISPATCH_ACTION
+273F:1362 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
273F:1365 E8 5C9D call menubar_clear_image
273F:1368 \xFABF 4B93 mov di, offset action_name ; Set up the "look at HOTSPOT"
273F:136B \xFABE 10B5 mov si, offset look_at_str ; string
@@ -3158,14 +3197,14 @@
273F:13B8 E8 401F call sub_126
273F:13BB 81 E2 0FFF and dx,0FFFh
273F:13BF \xFABE 6CEF mov si, offset player_hotspot_rec
-273F:13C2 8B DE mov bx,si
-273F:13C4 03 5C 61 add bx,[si+61h]
-273F:13C7 83 C3 63 add bx,63h
+273F:13C2 8B DE mov bx, si
+273F:13C4 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
+273F:13C7 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
273F:13CA 89 4C 54 mov [si+HS_DEST_X], cx
273F:13CD 89 54 56 mov [si+HS_DEST_Y], dx
273F:13D0 C7 44 52 FFFF mov [si+HS_DEST_HOTSPOT], 0FFFFh
273F:13D5 A1 1920 mov ax, room_exit_hotspot_id
-273F:13D8 0B C0 or ax,ax
+273F:13D8 0B C0 or ax, ax
273F:13DA 74 2A jz loc_192
273F:13DC 89 44 52 mov [si+HS_DEST_HOTSPOT], ax
273F:13DF EB 25 jmp short loc_192 ; (1406)
@@ -3182,7 +3221,7 @@
273F:1400 A1 11DD mov ax, char_dest_y
273F:1403 89 44 56 mov [si+HS_DEST_Y], ax
273F:1406 loc_192: ; xref 273F:13DA, 13DF
-273F:1406 C6 07 01 mov byte ptr [bx], PLAYER_ACTION_START_WALK
+273F:1406 C6 07 01 mov byte ptr [bx], CHAR_ACTION_START_WALK
273F:1409 33 C0 xor ax,ax ; Zero register
273F:140B A2 9834 mov data_1084, al
273F:140E \xFABF 65F3 mov di, offset player_action_support_record
@@ -4550,7 +4589,7 @@
273F:1C18 72 24 jb loc_437 ; No
273F:1C1A 3D 0009 cmp ax, CURSOR_TIME_UP_LEFT
273F:1C1D 73 1F jae loc_437 ; Too high
-273F:1C1F 80 3E 6D52 01 cmp player_action_state, PLAYER_ACTION_START_WALK
+273F:1C1F 80 3E 6D52 01 cmp player_action_state, CHAR_ACTION_START_WALK
273F:1C24 74 07 je loc_435 ; Jump if equal
273F:1C26 80 3E 6D52 04 cmp player_action_state, 4
273F:1C2B 75 11 jne loc_437 ; Jump if not equal
@@ -9589,7 +9628,7 @@
; 9635
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:3E34 sequence_execute proc near
+273F:3E34 sequence_execute proc near
273F:3E34 \xFA57 push di
273F:3E35 56 push si
273F:3E36 55 push bp
@@ -10096,28 +10135,28 @@
273F:41CE 83 C5 02 add bp, 2
273F:41D1 D1 E3 shl bx, 1 ; Shift w/zeros fill
273F:41D3 8B 87 3850 mov ax,word ptr ds:[actions2_proc_list][bx]
-273F:41D7 FF E0 jmp ax
+273F:41D7 FF E0 jmp ax
action_dispatch endp
273F:41D9 loc_825: ; xref 273F:52BB
-273F:41D9 \xFA8B DE mov bx,si
-273F:41DB 03 5C 61 add bx,[si+61h]
-273F:41DE 83 C3 63 add bx,63h
-273F:41E1 F7 44 61 FFFF test word ptr [si+61h],0FFFFh
+273F:41D9 \xFA8B DE mov bx, si
+273F:41DB 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
+273F:41DE 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
+273F:41E1 F7 44 61 FFFF test word ptr [si+HS_ACTION_OFFSET], 0FFFFh
273F:41E6 74 0F jz loc_826 ; Jump if zero
-273F:41E8 83 6C 61 05 sub word ptr [si+61h],5
-273F:41EC 83 EB 05 sub bx,5
-273F:41EF C6 44 4D 00 mov byte ptr [si+4Dh],0
-273F:41F3 C6 07 02 mov byte ptr [bx],2
+273F:41E8 83 6C 61 05 sub word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
+273F:41EC 83 EB 05 sub bx, CURRENT_ACTION_RECORD_SIZE
+273F:41EF C6 44 4D 00 mov byte ptr [si+4Dh], 0
+273F:41F3 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
273F:41F6 C3 retn
273F:41F7 loc_826: ; xref 273F:41E6
-273F:41F7 C6 07 00 mov byte ptr [bx],0
-273F:41FA 81 7D 1B 03E8 cmp word ptr [di+1Bh], PLAYER_HOTSPOT_ID
+273F:41F7 C6 07 00 mov byte ptr [bx], CHAR_ACTION_NONE
+273F:41FA 81 7D 1B 03E8 cmp word ptr [di+ANIM_HOTSPOT_ID], PLAYER_HOTSPOT_ID
273F:41FF 75 0B jne loc_ret_827 ; Jump if not equal
assume ds:seg_code
-273F:4201 C6 06 9834 00 mov byte ptr data_427,0 ; (273F:9834=0F9h)
-273F:4206 C7 06 11E4 FFFF mov word ptr ds:[11E4h],0FFFFh ; (273F:11E4=0BB12h)
+273F:4201 C6 06 9834 00 mov byte ptr data_1084, 0
+273F:4206 C7 06 11E4 FFFF mov hotspot_name_id2, 0FFFFh
273F:420C loc_ret_827: ; xref 273F:41FF
273F:420C C3 retn
@@ -10129,77 +10168,72 @@
; Called from: 273F:51EE, 5FE0
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
-; si = Hotspot offset
-; bx = Pointer to decode data
- [bx] == 0 -> end of list
-
-
-273F:420D sub_90 proc near
-273F:420D 8B 4C 21 mov cx,[si+HS_PIXEL_OFFSET]
-273F:4210 8B 44 5A mov ax,[si+HS_MOMENT_SRC_OFFSET]
-273F:4213 89 44 24 mov [si+24h],ax
-273F:4216 C7 44 26 0000 mov word ptr [si+26h],0
-273F:421B C7 44 28 0000 mov word ptr [si+28h],0
+ character_translate_movements proc near
+273F:420D 8B 4C 21 mov cx, [si+HS_PIXEL_OFFSET]
+273F:4210 8B 44 5A mov ax, [si+HS_MOVEMENT_SRC_OFFSET]
+273F:4213 89 44 24 mov [si+HS_MOVEMENT_OFFSET], ax
+273F:4216 C7 44 26 0000 mov word ptr [si+HS_STEP_CTR], 0
+273F:421B C7 44 28 0000 mov word ptr [si+HS_FRAME_OFFSET], 0
273F:4220 56 push si
273F:4221 57 push di
273F:4222 53 push bx
-273F:4223 8B F8 mov di,ax
-273F:4225 8B F1 mov si,cx
-273F:4227 8B DA mov bx,dx
-; si=animation record, di=loading position, bx=393ch src data
-273F:4229 loc_828: ; xref 273F:4250, 425E, 426E, 427E
-273F:4229 \xFA8B 0F mov cx,[bx]
-273F:422B 0B C9 or cx,cx ; Zero ?
-273F:422D 74 51 jz loc_832 ; Jump if zero
-273F:422F 8B 57 02 mov dx,[bx+2]
-273F:4232 83 C3 04 add bx,4
-273F:4235 83 FA 01 cmp dx,1
+273F:4223 8B F8 mov di, ax
+273F:4225 8B F1 mov si, cx
+273F:4227 8B DA mov bx, dx
+
+273F:4229 loc_828:
+273F:4229 \xFA8B 0F mov cx, [bx]
+273F:422B 0B C9 or cx, cx ; No more movements needed?
+273F:422D 74 51 jz loc_832 ; Exit if yes
+273F:422F 8B 57 02 mov dx, [bx+2] ; Get direction
+273F:4232 83 C3 04 add bx, 4 ; Move ptr to next move rec
+273F:4235 83 FA 01 cmp dx, FACING2_LEFT
273F:4238 74 26 je loc_830 ; Jump if equal
-273F:423A 83 FA 02 cmp dx,2
+273F:423A 83 FA 02 cmp dx, FACING2_RIGHT
273F:423D 74 31 je loc_831 ; Jump if equal
-273F:423F 83 FA 04 cmp dx,4
+273F:423F 83 FA 04 cmp dx, FACING2_UP
273F:4242 74 0E je loc_829 ; Jump if equal
-273F:4244 83 C1 01 add cx,1
-273F:4247 D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:4249 8B 44 0B mov ax,[si+0Bh]
-273F:424C AB stosw ; Store ax to es:[di]
+273F:4244 83 C1 01 add cx, 1
+273F:4247 D1 E9 shr cx, 1
+273F:4249 8B 44 0B mov ax, [si+PIXEL_MOVEREC_DOWN]
+273F:424C AB stosw ; Store movement records
273F:424D 8B C1 mov ax,cx
-273F:424F AB stosw ; Store ax to es:[di]
-273F:4250 EB D7 jmp short loc_828 ; (4229)
-273F:4252 loc_829: ; xref 273F:4242
-273F:4252 83 C1 01 add cx,1
-273F:4255 D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:4257 8B 44 09 mov ax,[si+9]
-273F:425A AB stosw ; Store ax to es:[di]
+273F:424F AB stosw ; Store steps
+273F:4250 EB D7 jmp short loc_828
+273F:4252 loc_829:
+273F:4252 83 C1 01 add cx, 1
+273F:4255 D1 E9 shr cx, 1
+273F:4257 8B 44 09 mov ax, [si+PIXEL_MOVEREC_UP]
+273F:425A AB stosw ; Store movement records
273F:425B 8B C1 mov ax,cx
-273F:425D AB stosw ; Store ax to es:[di]
-273F:425E EB C9 jmp short loc_828 ; (4229)
-273F:4260 loc_830: ; xref 273F:4238
-273F:4260 83 C1 03 add cx,3
-273F:4263 D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:4265 D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:4267 8B 44 0D mov ax,[si+0Dh]
-273F:426A AB stosw ; Store ax to es:[di]
+273F:425D AB stosw ; Store steps
+273F:425E EB C9 jmp short loc_828
+273F:4260 loc_830:
+273F:4260 83 C1 03 add cx, 3
+273F:4263 D1 E9 shr cx, 1
+273F:4265 D1 E9 shr cx, 1
+273F:4267 8B 44 0D mov ax, [si+PIXEL_MOVEREC_LEFT]
+273F:426A AB stosw ; Store movement records
273F:426B 8B C1 mov ax,cx
-273F:426D AB stosw ; Store ax to es:[di]
-273F:426E EB B9 jmp short loc_828 ; (4229)
-273F:4270 loc_831: ; xref 273F:423D
-273F:4270 83 C1 03 add cx,3
-273F:4273 D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:4275 D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:4277 8B 44 0F mov ax,[si+0Fh]
-273F:427A AB stosw ; Store ax to es:[di]
+273F:426D AB stosw ; Store steps
+273F:426E EB B9 jmp short loc_828
+273F:4270 loc_831:
+273F:4270 83 C1 03 add cx, 3
+273F:4273 D1 E9 shr cx, 1
+273F:4275 D1 E9 shr cx, 1
+273F:4277 8B 44 0F mov ax, [si+PIXEL_MOVEREC_RIGHT]
+273F:427A AB stosw ; Store movement records
273F:427B 8B C1 mov ax,cx
-273F:427D AB stosw ; Store ax to es:[di]
-273F:427E EB A9 jmp short loc_828 ; (4229)
-273F:4280 loc_832: ; xref 273F:422D
+273F:427D AB stosw ; Store steps
+273F:427E EB A9 jmp short loc_828
+273F:4280 loc_832:
273F:4280 B8 FFFF mov ax,0FFFFh
-273F:4283 AB stosw ; Store ax to es:[di]
+273F:4283 AB stosw ; Store end makrer
273F:4284 5B pop bx
273F:4285 5F pop di
273F:4286 5E pop si
273F:4287 C3 retn
- sub_90 endp
+ character_translate_movements 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
@@ -10240,7 +10274,7 @@
273F:42C8 5E pop si
273F:42C9 E9 FB68 jmp sequence_execute
273F:42CC loc_835: ; xref 273F:42C6
-273F:42CC 8B 54 0A mov dx, [si+ROOMREC_EXIT_ROOM_NUM] ; Get new room #
+273F:42CC 8B 54 0A mov dx, [si+ROOMREC_EXIT_ROOM_NUM] ; Get new room #/direction
273F:42CF 8B 4C 0C mov cx, [si+ROOMREC_EXIT_NEW_X] ; Get new X
273F:42D2 8B 5C 0E mov bx, [si+ROOMREC_EXIT_NEW_Y] ; Get new Y
273F:42D5 5E pop si
@@ -10267,13 +10301,13 @@
273F:42E9 A1 BA17 mov ax, current_hotspot
273F:42EC 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID ; Is character the player?
273F:42EF 75 2E jne loc_840 ; Jump if not
-273F:42F1 F6 06 9834 FF test byte ptr data_427, 0FFh
+273F:42F1 F6 06 9834 FF test byte ptr data_1084, 0FFh
273F:42F6 75 26 jnz loc_ret_839 ; Jump if not zero
; Room change code for the player
273F:42F8 \xFABE 6CEF mov si, offset player_hotspot_rec
-273F:42FB 88 74 50 mov [si+50h],dh
-273F:42FE C6 44 51 00 mov byte ptr [si+51h],0
+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:4307 89 16 982C mov new_room_number_2, dx
@@ -10291,13 +10325,13 @@
273F:4326 53 push bx
273F:4327 51 push cx
273F:4328 52 push dx
-273F:4329 E8 017D call sub_99 ; (44A9)
+273F:4329 E8 017D call check_for_impinging_characters
273F:432C 5A pop dx
273F:432D 59 pop cx
273F:432E 5B pop bx
273F:432F 75 06 jnz loc_841 ; Jump if not zero
273F:4331 33 C0 xor ax,ax ; Zero register
-273F:4333 E8 01F2 call sub_104 ; (4528)
+273F:4333 E8 01F2 call increment_action_offset
273F:4336 C3 retn
273F:4337 loc_841: ; xref 273F:432F
273F:4337 83 E1 F8 and cx, 0FFF8h
@@ -10323,36 +10357,29 @@
;
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:4363 loc_842: ; xref 273F:50E7, 5F24
-273F:4363 \xFA88 44 44 mov [si+HS_UNKNOWN1], al
+ character_update_movement_2:
+273F:4363 \xFA88 44 44 mov [si+HS_V44], al
- ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\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:1218, 5033, 5063, 5081, 51AB, 58C7, 5EAA
- ; 5EE3, 85A0, 8636, 8A31
- ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:4366 sub_93 proc near
-273F:4366 loc_843: ; xref 273F:4F9C
+ character_update_movement proc near
273F:4366 \xFA53 push bx
-273F:4367 8B DE mov bx,si
-273F:4369 03 5C 61 add bx,[si+61h]
-273F:436C 83 C3 63 add bx,63h
-273F:436F 8A 07 mov al,[bx]
+273F:4367 8B DE mov bx, si
+273F:4369 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
+273F:436C 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
+273F:436F 8A 07 mov al, [bx]
273F:4371 5B pop bx
-273F:4372 3C 03 cmp al,3
-273F:4374 74 10 je loc_ret_845 ; Jump if equal
-273F:4376 F6 44 49 FF test byte ptr [si+49h],0FFh
+273F:4372 3C 03 cmp al, CHAR_ACTION_EXEC_SCRIPT
+273F:4374 74 10 je loc_ret_845 ; Exit if running script
+273F:4376 F6 44 49 FF test byte ptr [si+HS_V49], 0FFh
273F:437A 75 07 jnz loc_844 ; Jump if not zero
-273F:437C C6 44 49 01 mov byte ptr [si+49h],1
-273F:4380 E8 2DAB call sub_178 ; (712E)
+273F:437C C6 44 49 01 mov byte ptr [si+HS_V49], 1
+273F:4380 E8 2DAB call pathfind_flag_covered_cells
273F:4383 loc_844: ; xref 273F:437A
-273F:4383 E9 032B jmp loc_890 ; (46B1)
+273F:4383 E9 032B jmp character_reset_direction
273F:4386 loc_ret_845: ; xref 273F:4374, 438B
273F:4386 C3 retn
- sub_93 endp
+ character_update_movement 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
@@ -10363,10 +10390,10 @@
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:4387 sub_94 proc near
-273F:4387 F6 44 49 FF test byte ptr [si+49h],0FFh
+273F:4387 F6 44 49 FF test byte ptr [si+HS_V49], 0FFh
273F:438B 74 F9 jz loc_ret_845 ; Jump if zero
-273F:438D C6 44 49 00 mov byte ptr [si+49h],0
-273F:4391 E9 2DAF jmp loc_1417 ; (7143)
+273F:438D C6 44 49 00 mov byte ptr [si+HS_V49], 0
+273F:4391 E9 2DAF jmp pathfind_clear_covered_cells
sub_94 endp
@@ -10376,69 +10403,71 @@
; Called from: 273F:56D0, 712F, 7144
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:4394 sub_95 proc near
-273F:4394 8B 45 0E mov ax,[di+0Eh]
-273F:4397 2D 0001 sub ax,1
-273F:439A 8B D8 mov bx,ax
-273F:439C B1 04 mov cl,4
-273F:439E D3 E3 shl bx,cl ; Shift w/zeros fill
-273F:43A0 2B D8 sub bx,ax
-273F:43A2 B1 03 mov cl,3
-273F:43A4 D3 E3 shl bx,cl ; Shift w/zeros fill
-273F:43A6 81 C3 984A add bx,984Ah
-273F:43AA 8B 45 02 mov ax,[di+2]
-273F:43AD 2D 0088 sub ax,88h
-273F:43B0 03 45 15 add ax,[di+15h]
-273F:43B3 2D 0004 sub ax,4
-273F:43B6 D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:43B8 3D 0018 cmp ax,18h
-273F:43BB 73 50 jae loc_850 ; Jump if above or =
-273F:43BD 8B D0 mov dx,ax
-273F:43BF D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:43C1 D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:43C3 03 C2 add ax,dx
-273F:43C5 03 D8 add bx,ax
-273F:43C7 8B 05 mov ax,[di]
-273F:43C9 D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:43CB 8B 55 13 mov dx,[di+13h]
-273F:43CE D3 EA shr dx,cl ; Shift w/zeros fill
-273F:43D0 75 03 jnz loc_846 ; Jump if not zero
-273F:43D2 BA 0001 mov dx,1
-273F:43D5 loc_846: ; xref 273F:43D0
-273F:43D5 2D 0010 sub ax,10h
+ pathfind_get_cell proc near
+273F:4394 8B 45 0E mov ax, [di+ANIM_ROOM_NUM]
+273F:4397 2D 0001 sub ax, 1 ; ax=room # - 1
+273F:439A 8B D8 mov bx, ax
+273F:439C B1 04 mov cl, 4
+273F:439E D3 E3 shl bx, cl ; bx=(R-1)*16
+273F:43A0 2B D8 sub bx, ax ; bx=(R-1)*15
+273F:43A2 B1 03 mov cl, 3
+273F:43A4 D3 E3 shl bx, cl ; bx=(R-1)*120
+273F:43A6 81 C3 984A add bx, offset pathfind_data2
+273F:43AA 8B 45 02 mov ax, [di+ANIM_Y]
+273F:43AD 2D 0088 sub ax, 88h
+273F:43B0 03 45 15 add ax, [di+ANIM_HEIGHT_COPY]
+273F:43B3 2D 0004 sub ax, 4
+273F:43B6 D3 E8 shr ax, cl
+273F:43B8 3D 0018 cmp ax, 18h ; (y+height-8-4) >= 200?
+273F:43BB 73 50 jae loc_850 ; If yes then jump to exit
+273F:43BD 8B D0 mov dx, ax ; ax=0->17
+273F:43BF D1 E0 shl ax, 1
+273F:43C1 D1 E0 shl ax, 1 ; ax=ax*4
+273F:43C3 03 C2 add ax, dx ; ax=ax*5
+273F:43C5 03 D8 add bx, ax ; Add bx onto offset
+
+; At this point bx = (Room# - 1) * 120 + (Y# * 5), where Y# is between 0 to 17
+273F:43C7 8B 05 mov ax, [di+ANIM_X]
+273F:43C9 D3 E8 shr ax, cl
+273F:43CB 8B 55 13 mov dx, [di+ANIM_WIDTH_COPY]
+273F:43CE D3 EA shr dx, cl ; ax=left/8, dx=width/8
+273F:43D0 75 03 jnz loc_846 ; Is width < 8 pixels?
+273F:43D2 BA 0001 mov dx, 1 ; Yes, default to 1 (8 pixels)
+273F:43D5 loc_846:
+273F:43D5 2D 0010 sub ax, 10h ; Is left <= 128
273F:43D8 73 0A jnc loc_847 ; Jump if carry=0
273F:43DA F7 D8 neg ax
-273F:43DC 2B D0 sub dx,ax
-273F:43DE 72 2D jc loc_850 ; Jump if carry Set
-273F:43E0 74 2B jz loc_850 ; Jump if zero
-273F:43E2 33 C0 xor ax,ax ; Zero register
-273F:43E4 loc_847: ; xref 273F:43D8
-273F:43E4 8B E8 mov bp,ax
-273F:43E6 03 EA add bp,dx
-273F:43E8 83 ED 29 sub bp,29h
-273F:43EB 72 09 jc loc_848 ; Jump if carry Set
-273F:43ED 83 C5 01 add bp,1
-273F:43F0 2B D5 sub dx,bp
+273F:43DC 2B D0 sub dx, ax
+273F:43DE 72 2D jc loc_850 ; Exit if offscreen to left
+273F:43E0 74 2B jz loc_850
+273F:43E2 33 C0 xor ax, ax ; Default to 0
+273F:43E4 loc_847:
+273F:43E4 8B E8 mov bp, ax
+273F:43E6 03 EA add bp, dx ; Add width
+273F:43E8 83 ED 29 sub bp, 29h
+273F:43EB 72 09 jc loc_848 ; Jump if on screen
+273F:43ED 83 C5 01 add bp, 1
+273F:43F0 2B D5 sub dx, bp
273F:43F2 72 19 jc loc_850 ; Jump if carry Set
273F:43F4 74 17 jz loc_850 ; Jump if zero
-273F:43F6 loc_848: ; xref 273F:43EB
-273F:43F6 8B E8 mov bp,ax
-273F:43F8 D3 E8 shr ax,cl ; Shift w/zeros fill
-273F:43FA 03 D8 add bx,ax
-273F:43FC 8B CD mov cx,bp
-273F:43FE B8 0080 mov ax,80h
-273F:4401 83 E1 07 and cx,7
-273F:4404 74 02 jz loc_849 ; Jump if zero
-273F:4406 D3 E8 shr ax,cl ; Shift w/zeros fill
+273F:43F6 loc_848:
+273F:43F6 8B E8 mov bp, ax ; bp,ax=(left/8)-10h
+273F:43F8 D3 E8 shr ax, cl
+273F:43FA 03 D8 add bx, ax ; Increment X offset
+273F:43FC 8B CD mov cx, bp
+273F:43FE B8 0080 mov ax, 80h
+273F:4401 83 E1 07 and cx, 7
+273F:4404 74 02 jz loc_849
+273F:4406 D3 E8 shr ax, cl ; Setup bit mask
273F:4408 loc_849: ; xref 273F:4404
-273F:4408 8B CA mov cx,dx
-273F:440A 0B C9 or cx,cx ; Zero ?
+273F:4408 8B CA mov cx, dx
+273F:440A 0B C9 or cx, cx
273F:440C C3 retn
273F:440D loc_850: ; xref 273F:43BB, 43DE, 43E0, 43F2
; 43F4
-273F:440D 33 C9 xor cx,cx ; Zero register
+273F:440D 33 C9 xor cx, cx ; Zero register
273F:440F C3 retn
- sub_95 endp
+ pathfind_get_cell 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
@@ -10557,33 +10586,33 @@
; Called from: 273F:4329, 603C
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:44A9 sub_99 proc near
+ check_for_impinging_characters proc near
273F:44A9 \xFABB B14E mov bx, offset animation_table
273F:44AC B9 002D mov cx, NUM_ANIMATION_SLOTS
-273F:44AF 8B 55 0E mov dx,[di+0Eh]
+273F:44AF 8B 55 0E mov dx, [di+ANIM_ROOM_NUM]
273F:44B2 locloop_858: ; xref 273F:44D0
-273F:44B2 F6 47 1D FF test byte ptr [bx+1Dh],0FFh
+273F:44B2 F6 47 1D FF test byte ptr [bx+ANIM_LAYER1_SKIP], 0FFh
273F:44B6 74 15 jz loc_859 ; Jump if zero
-273F:44B8 F6 47 0C FF test byte ptr [bx+0Ch],0FFh
+273F:44B8 F6 47 0C FF test byte ptr [bx+ANIM_LAYER], 0FFh
273F:44BC 74 0F jz loc_859 ; Jump if zero
-273F:44BE 3B 57 0E cmp dx,[bx+0Eh]
+273F:44BE 3B 57 0E cmp dx, [bx+ANIM_ROOM_NUM]
273F:44C1 75 0A jne loc_859 ; Jump if not equal
273F:44C3 53 push bx
-273F:44C4 8B 5F 19 mov bx,[bx+19h]
-273F:44C7 E8 10D7 call skorl_caught_check
+273F:44C4 8B 5F 19 mov bx, [bx+ANIM_HOTSPOT_OFFSET]
+273F:44C7 E8 10D7 call characters_impinging_check
273F:44CA 5B pop bx
273F:44CB 75 09 jnz loc_860 ; Jump if not zero
273F:44CD loc_859: ; xref 273F:44B6, 44BC, 44C1
-273F:44CD 83 C3 29 add bx,29h
+273F:44CD 83 C3 29 add bx, ANIMATION_SLOT_SIZE
273F:44D0 E2 E0 loop locloop_858 ; Loop if cx > 0
-273F:44D2 0D 0001 or ax,1
+273F:44D2 0D 0001 or ax, 1
273F:44D5 C3 retn
273F:44D6 loc_860: ; xref 273F:44CB
-273F:44D6 33 C0 xor ax,ax ; Zero register
+273F:44D6 33 C0 xor ax, ax
273F:44D8 C3 retn
- sub_99 endp
+ check_for_impinging_characters 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
@@ -10593,40 +10622,40 @@
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
char_face_up proc near
-273F:44D9 \xFA8B 5C 21 mov bx,[si+HS_PIXEL_OFFSET]
-273F:44DC 8A 47 11 mov al,[bx+11h]
-273F:44DF C7 45 22 0004 mov word ptr [di+22h], 4
-273F:44E4 C6 45 26 00 mov byte ptr [di+26h], 0
+273F:44D9 \xFA8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
+273F:44DC 8A 47 11 mov al, [bx+PIXEL_FRAMENUM_UP]
+273F:44DF C7 45 22 0004 mov word ptr [di+ANIM_CHAR_RECT_Y], 4
+273F:44E4 C6 45 26 00 mov byte ptr [di+ANIM_DIRECTION], FACING_UP
273F:44E8 EB 33 jmp short char_face_end
char_face_up endp
char_face_down proc near
-273F:44EA \xFA8B 5C 21 mov bx,[si+HS_PIXEL_OFFSET]
-273F:44ED 8A 47 12 mov al,[bx+12h]
-273F:44F0 C7 45 22 0004 mov word ptr [di+22h],4
-273F:44F5 C6 45 26 01 mov byte ptr [di+26h],1
+273F:44EA \xFA8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
+273F:44ED 8A 47 12 mov al, [bx+PIXEL_FRAMENUM_DOWN]
+273F:44F0 C7 45 22 0004 mov word ptr [di+ANIM_CHAR_RECT_Y], 4
+273F:44F5 C6 45 26 01 mov byte ptr [di+ANIM_DIRECTION], FACING_DOWN
273F:44F9 EB 22 jmp short char_face_end
char_face_down endp
char_face_left proc near
-273F:44FB \xFA8B 5C 21 mov bx,[si+HS_PIXEL_OFFSET]
-273F:44FE 8A 47 13 mov al,[bx+13h]
-273F:4501 C7 45 22 0000 mov word ptr [di+22h],0
-273F:4506 C6 45 26 02 mov byte ptr [di+26h],2
+273F:44FB \xFA8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
+273F:44FE 8A 47 13 mov al, [bx+PIXEL_FRAMENUM_LEFT]
+273F:4501 C7 45 22 0000 mov word ptr [di+ANIM_CHAR_RECT_Y], 0
+273F:4506 C6 45 26 02 mov byte ptr [di+ANIM_DIRECTION], FACING_LEFT
273F:450A EB 11 jmp short char_face_end
char_face_left endp
char_face_right proc near
-273F:450C \xFA8B 5C 21 mov bx,[si+HS_PIXEL_OFFSET]
-273F:450F 8A 47 14 mov al,[bx+14h]
-273F:4512 C7 45 22 0000 mov word ptr [di+22h],0
-273F:4517 C6 45 26 03 mov byte ptr [di+26h],3
+273F:450C \xFA8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
+273F:450F 8A 47 14 mov al, [bx+PIXEL_FRAMENUM_RIGHT]
+273F:4512 C7 45 22 0000 mov word ptr [di+ANIM_CHAR_RECT_Y], 0
+273F:4517 C6 45 26 03 mov byte ptr [di+ANIM_DIRECTION], FACING_RIGHT
273F:451B EB 00 jmp short char_face_end
char_face_right endp
-273F:451D char_face_end:
-273F:451D 8B 5F 07 mov bx,[bx+PIXEL_FRAME_SIZE] ; Calculate frame offset
-273F:4520 32 E4 xor ah,ah
+273F:451D char_face_end:
+273F:451D 8B 5F 07 mov bx, [bx+PIXEL_FRAME_SIZE] ; Calculate frame offset
+273F:4520 32 E4 xor ah, ah
273F:4522 F7 E3 mul bx
273F:4524 89 45 08 mov [di+ANIM_FRAME_OFFSET], ax
273F:4527 C3 retn
@@ -10638,11 +10667,10 @@
; Called from: 273F:4333
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:4528 sub_104 proc near
-273F:4528 loc_866: ; xref 273F:5353
-273F:4528 \xFA83 44 61 05 add word ptr [si+61h],5
-273F:452C EB 0C jmp short loc_868
- sub_104 endp
+ increment_action_offset proc near
+273F:4528 \xFA83 44 61 05 add word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
+273F:452C EB 0C jmp short loc_868
+ increment_action_offset 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
@@ -10654,22 +10682,22 @@
273F:452F 8B C1 mov ax, cx
273F:4531 E8 C7B6 call get_room_resource_pointer2
273F:4534 58 pop ax
-273F:4535 loc_867: ; xref 273F:813B
-273F:4535 \xFAC7 44 61 0005 mov word ptr [si+61h],5
-273F:453A loc_868: ; xref 273F:452C
-273F:453A C6 44 4D 00 mov byte ptr [si+4Dh],0
-273F:453E D1 E0 shl ax,1 ; Shift w/zeros fill
-273F:4540 05 1380 add ax,1380h
-273F:4543 8B D8 mov bx,ax
-273F:4545 8B 07 mov ax,[bx]
-273F:4547 8B DE mov bx,si
-273F:4549 03 5C 61 add bx,[si+61h]
-273F:454C 83 C3 63 add bx,63h
-273F:454F 89 47 01 mov [bx+1],ax
-273F:4552 C6 07 02 mov byte ptr [bx],2
-273F:4555 8B 44 06 mov ax,[si+6]
-273F:4558 89 47 03 mov [bx+3],ax
-273F:455B C6 44 2A 00 mov byte ptr [si+2Ah],0
+273F:4535 loc_867:
+273F:4535 \xFAC7 44 61 0005 mov word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
+273F:453A loc_868:
+273F:453A C6 44 4D 00 mov byte ptr [si+HS_V4D], 0
+273F:453E D1 E0 shl ax, 1 ; Shift w/zeros fill
+273F:4540 05 1380 add ax, offset seq48_offset_list
+273F:4543 8B D8 mov bx, ax
+273F:4545 8B 07 mov ax, [bx]
+273F:4547 8B DE mov bx, si
+273F:4549 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
+273F:454C 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
+273F:454F 89 47 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], ax
+273F:4552 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
+273F:4555 8B 44 06 mov ax, [si+HS_ROOM_NUM]
+273F:4558 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
+273F:455B C6 44 2A 00 mov byte ptr [si+HS_FRAME_NUM], 0
273F:455F C3 retn
seq_method_48 endp
@@ -10681,24 +10709,24 @@
273F:4560 sub_105 proc near
273F:4560 loc_869: ; xref 273F:5EC8
-273F:4560 \xFAF6 44 4C FF test byte ptr [si+4Ch],0FFh
+273F:4560 \xFAF6 44 4C FF test byte ptr [si+HS_V4C], 0FFh
273F:4564 74 2C jz loc_ret_873 ; Jump if zero
273F:4566 loc_870: ; xref 273F:5042
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:456D 8B 45 1B mov ax,[di+1Bh]
+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: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:457E 73 0C jae loc_872 ; Jump if above or =
+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: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+4Ah],0Fh
+273F:4582 8B 77 06 mov si, [bx+6]
+273F:4585 C7 44 4A 000F mov word ptr [si+HS_V4A], 0Fh
273F:458A 59 pop cx
273F:458B 5E pop si
273F:458C loc_872: ; xref 273F:4572, 457E
@@ -10741,47 +10769,47 @@
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:45A7 sub_107 proc near
-273F:45A7 3D 0420 cmp ax,420h
+273F:45A7 3D 0420 cmp ax, 420h
273F:45AA 74 0A je loc_876 ; Jump if equal
-273F:45AC 3D 0436 cmp ax,436h
+273F:45AC 3D 0436 cmp ax, 436h
273F:45AF 74 05 je loc_876 ; Jump if equal
-273F:45B1 3D 0429 cmp ax,429h
+273F:45B1 3D 0429 cmp ax, 429h
273F:45B4 75 1A jne loc_879 ; Jump if not equal
273F:45B6 loc_876: ; xref 273F:45AA, 45AF
273F:45B6 50 push ax
273F:45B7 55 push bp
273F:45B8 E8 3F9F call sub_213 ; (855A)
273F:45BB 5D pop bp
-273F:45BC 0B C0 or ax,ax ; Zero ?
+273F:45BC 0B C0 or ax, ax ; Zero ?
273F:45BE 74 0B jz loc_878 ; Jump if zero
273F:45C0 58 pop ax
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:45C6 87 F3 xchg si, bx
273F:45C8 loc_877: ; xref 273F:45F4, 4600
273F:45C8 E9 00BB jmp loc_888 ; (4686)
-273F:45CB loc_878: ; xref 273F:45BE
+273F:45CB loc_878:
273F:45CB 58 pop ax
-273F:45CC B8 0003 mov ax,3
-273F:45CF C3 retn
-273F:45D0 loc_879: ; xref 273F:45B4
+273F:45CC B8 0003 mov ax, 3 ; Initial call for action
+273F:45CF C3 retn ; (prior to moving to it)
+273F:45D0 loc_879:
273F:45D0 56 push si
273F:45D1 E8 C716 call get_room_resource_pointer2
273F:45D4 5B pop bx
-273F:45D5 87 DE xchg bx,si
+273F:45D5 87 DE xchg bx, si
;\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
;
; Called from: 273F:58B0
273F:45D7 sub_108:
-273F:45D7 8B 44 06 mov ax,[si+HS_ROOM_NUM]
-273F:45DA 3B 47 06 cmp ax,[bx+HS_ROOM_NUM]
+273F:45D7 8B 44 06 mov ax, [si+HS_ROOM_NUM]
+273F:45DA 3B 47 06 cmp ax, [bx+HS_ROOM_NUM]
273F:45DD 75 72 jne loc_884 ; Jump if not equal
-273F:45DF F6 44 2A FF test byte ptr [si+2Ah],0FFh
+273F:45DF F6 44 2A FF test byte ptr [si+HS_FRAME_NUM], 0FFh
273F:45E3 75 46 jnz loc_883 ; Jump if not zero
-273F:45E5 C6 44 2A 01 mov byte ptr [si+2Ah],1
+273F:45E5 C6 44 2A 01 mov byte ptr [si+HS_FRAME_NUM], 1
273F:45E9 81 3E BA1B 0408 cmp active_hotspot_id, 408h
273F:45EF 72 09 jb loc_881 ; Jump if below
273F:45F1 loc_880: ; xref 273F:4606, 463B, 4641, 4647
@@ -10791,10 +10819,10 @@
273F:45F6 B8 0003 mov ax,3
273F:45F9 C3 retn
273F:45FA loc_881: ; xref 273F:45EF
-273F:45FA 8B 45 1B mov ax,[di+1Bh]
-273F:45FD 3B 47 50 cmp ax,[bx+50h]
+273F:45FA 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
+273F:45FD 3B 47 50 cmp ax, [bx+HS_DIRECTION]
273F:4600 74 C6 je loc_877 ; Jump if equal
-273F:4602 80 7F 44 04 cmp byte ptr [bx+44h],4
+273F:4602 80 7F 44 04 cmp byte ptr [bx+HS_V44], 4
273F:4606 74 E9 je loc_880 ; Jump if equal
273F:4608 80 3E BAB9 02 cmp byte ptr script_val_88, 2
273F:460D 74 0D je loc_882 ; Jump if equal
@@ -10804,14 +10832,14 @@
273F:4616 5B pop bx
273F:4617 C7 44 42 0004 mov word ptr [si+42h],4
273F:461C loc_882: ; xref 273F:460D
-273F:461C C7 47 2B 002A mov word ptr [bx+2Bh],2Ah
-273F:4621 8B 45 1B mov ax,[di+1Bh]
-273F:4624 89 47 2F mov [bx+2Fh],ax
+273F:461C C7 47 2B 002A mov word ptr [bx+HS_V2B], 2Ah
+273F:4621 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
+273F:4624 89 47 2F mov [bx+HS_USE_HOTSPOT_ID], ax
273F:4627 B8 0003 mov ax,3
273F:462A C3 retn
273F:462B loc_883: ; xref 273F:45E3
-273F:462B 80 44 2A 01 add byte ptr [si+2Ah],1
-273F:462F 80 7C 2A 06 cmp byte ptr [si+2Ah],6
+273F:462B 80 44 2A 01 add byte ptr [si+HS_FRAME_NUM], 1
+273F:462F 80 7C 2A 06 cmp byte ptr [si+HS_FRAME_NUM], 6
273F:4633 73 41 jae loc_887 ; Jump if above or =
273F:4635 81 3E BA1B 0408 cmp active_hotspot_id, 408h
273F:463B 73 B4 jae loc_880 ; Jump if above or =
@@ -10880,39 +10908,38 @@
; Called from: 273F:7FD1
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:46B1 sub_109 proc near
-273F:46B1 loc_890: ; xref 273F:4383
+ 1character_reset_direction proc near
273F:46B1 53 push bx
-273F:46B2 80 25 F8 and byte ptr [di],0F8h
-273F:46B5 80 64 0D F8 and byte ptr [si+0Dh],0F8h
-273F:46B9 80 0D 05 or byte ptr [di],5
-273F:46BC 80 4C 0D 05 or byte ptr [si+0Dh],5
-273F:46C0 8B 5C 21 mov bx,[si+21h]
-273F:46C3 8A 45 26 mov al,[di+26h]
-273F:46C6 3C 01 cmp al,1
-273F:46C8 72 10 jb loc_893 ; Jump if below
-273F:46CA 74 09 jz loc_892 ; Jump if zero
-273F:46CC 3C 03 cmp al,3
-273F:46CE 72 0F jb loc_894 ; Jump if below
-273F:46D0 loc_891: ; xref 273F:4740
-273F:46D0 \xFA8A 47 14 mov al,[bx+14h]
-273F:46D3 EB 0D jmp short loc_895 ; (46E2)
-273F:46D5 loc_892: ; xref 273F:46CA, 473A
-273F:46D5 8A 47 12 mov al,[bx+12h]
-273F:46D8 EB 08 jmp short loc_895 ; (46E2)
-273F:46DA loc_893: ; xref 273F:46C8, 4738
-273F:46DA 8A 47 11 mov al,[bx+11h]
-273F:46DD EB 03 jmp short loc_895 ; (46E2)
-273F:46DF loc_894: ; xref 273F:46CE, 473E
-273F:46DF 8A 47 13 mov al,[bx+13h]
-273F:46E2 loc_895: ; xref 273F:46D3, 46D8, 46DD
-273F:46E2 8B 5F 07 mov bx,[bx+7]
-273F:46E5 32 E4 xor ah,ah ; Zero register
+273F:46B2 80 25 F8 and byte ptr [di+ANIM_X], 0F8h
+273F:46B5 80 64 0D F8 and byte ptr [si+HS_X], 0F8h
+273F:46B9 80 0D 05 or byte ptr [di+ANIM_X], 5
+273F:46BC 80 4C 0D 05 or byte ptr [si+HS_X], 5
+273F:46C0 8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
+273F:46C3 8A 45 26 mov al, [di+ANIM_DIRECTION]
+273F:46C6 3C 01 cmp al, FACING_DOWN
+273F:46C8 72 10 jb loc_893 ; Jump if up
+273F:46CA 74 09 jz loc_892 ; Jump if down
+273F:46CC 3C 03 cmp al, 3
+273F:46CE 72 0F jb loc_894 ; Jump if left
+273F:46D0 loc_891:
+273F:46D0 \xFA8A 47 14 mov al, [bx+PIXEL_FRAMENUM_RIGHT]
+273F:46D3 EB 0D jmp short loc_895
+273F:46D5 loc_892:
+273F:46D5 8A 47 12 mov al, [bx+PIXEL_FRAMENUM_DOWN]
+273F:46D8 EB 08 jmp short loc_895
+273F:46DA loc_893:
+273F:46DA 8A 47 11 mov al, [bx+PIXEL_FRAMENUM_UP]
+273F:46DD EB 03 jmp short loc_895
+273F:46DF loc_894:
+273F:46DF 8A 47 13 mov al, [bx+PIXEL_FRAMENUM_LEFT]
+273F:46E2 loc_895:
+273F:46E2 8B 5F 07 mov bx, [bx+PIXEL_FRAME_SIZE]
+273F:46E5 32 E4 xor ah, ah ; Zero register
273F:46E7 F7 E3 mul bx ; dx:ax = reg * ax
-273F:46E9 89 45 08 mov [di+8],ax
+273F:46E9 89 45 08 mov [di+ANIM_FRAME_OFFSET], ax
273F:46EC 5B pop bx
273F:46ED C3 retn
- sub_109 endp
+ character_reset_direction 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
@@ -10922,20 +10949,21 @@
; 5B43, 5BAA, 5C76, 5CC7, 8A00
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:46EE sub_110 proc near
+ character_face_hotspot proc near
273F:46EE 53 push bx
273F:46EF 57 push di
273F:46F0 56 push si
273F:46F1 EB 17 jmp short loc_896 ; (470A)
;* No entry point to code
-273F:46F3 8B 45 1B mov ax,[di+1Bh]
+
+273F:46F3 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
273F:46F6 8B 1E BA1B mov bx, active_hotspot_id
;\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
;
; Called from: 273F:61C5, 61CA
-273F:46FA sub_111:
+ character_face_hotspot_2:
273F:46FA 53 push bx
273F:46FB 57 push di
273F:46FC 56 push si
@@ -10953,44 +10981,44 @@
273F:4712 3D 0408 cmp ax,408h
273F:4715 73 6B jae loc_903 ; Jump if above or =
273F:4717 53 push bx
-273F:4718 8B DE mov bx,si
-273F:471A 03 5C 61 add bx,[si+61h]
-273F:471D 83 C3 63 add bx,63h
-273F:4720 8A 07 mov al,[bx]
+273F:4718 8B DE mov bx, si
+273F:471A 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
+273F:471D 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
+273F:4720 8A 07 mov al, [bx]
273F:4722 5B pop bx
273F:4723 81 3E BA1B 7530 cmp active_hotspot_id, 7530h
-273F:4729 72 17 jb loc_897 ; Jump if below
-273F:472B 5E pop si
+273F:4729 72 17 jb loc_897
+273F:472B 5E pop si ; Non selectable hotspot
273F:472C 5F pop di
-273F:472D 8A 47 08 mov al,[bx+8]
-273F:4730 88 45 26 mov [di+26h],al
-273F:4733 8B 5C 21 mov bx,[si+21h]
-273F:4736 3C 01 cmp al,1
-273F:4738 72 A0 jb loc_893 ; Jump if below
-273F:473A 74 99 jz loc_892 ; Jump if zero
-273F:473C 3C 03 cmp al,3
-273F:473E 72 9F jb loc_894 ; Jump if below
-273F:4740 EB 8E jmp short loc_891 ; (46D0)
-273F:4742 loc_897: ; xref 273F:4729
-273F:4742 8B 54 0F mov dx,[si+0Fh]
-273F:4745 03 54 1B add dx,[si+1Bh]
-273F:4748 2B 57 0F sub dx,[bx+0Fh]
-273F:474B 2B 57 1B sub dx,[bx+1Bh]
-273F:474E 8B 4C 0D mov cx,[si+0Dh]
-273F:4751 2B 4F 0D sub cx,[bx+0Dh]
-273F:4754 8B C1 mov ax,cx
-273F:4756 0B C0 or ax,ax ; Zero ?
+273F:472D 8A 47 08 mov al, [bx+8]
+273F:4730 88 45 26 mov [di+ANIM_DIRECTION], al
+273F:4733 8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
+273F:4736 3C 01 cmp al, FACING_DOWN
+273F:4738 72 A0 jb loc_893 ; Jump if up
+273F:473A 74 99 jz loc_892 ; Jump if down
+273F:473C 3C 03 cmp al, FACING_LEFT
+273F:473E 72 9F jb loc_894 ; Jump if left
+273F:4740 EB 8E jmp short loc_891 ; Jump for right
+273F:4742 loc_897:
+273F:4742 8B 54 0F mov dx, [si+HS_Y]
+273F:4745 03 54 1B add dx, [si+HS_HEIGHT_COPY]
+273F:4748 2B 57 0F sub dx, [bx+HS_Y]
+273F:474B 2B 57 1B sub dx, [bx+HS_HEIGHT_COPY]
+273F:474E 8B 4C 0D mov cx, [si+HS_X]
+273F:4751 2B 4F 0D sub cx, [bx+HS_X]
+273F:4754 8B C1 mov ax, cx
+273F:4756 0B C0 or ax, ax ; Zero ?
273F:4758 79 02 jns loc_898 ; Jump if not sign
273F:475A F7 D8 neg ax
273F:475C loc_898: ; xref 273F:4758
-273F:475C 8B DA mov bx,dx
-273F:475E 0B DB or bx,bx ; Zero ?
+273F:475C 8B DA mov bx, dx
+273F:475E 0B DB or bx, bx ; Zero ?
273F:4760 79 02 jns loc_899 ; Jump if not sign
273F:4762 F7 DB neg bx
273F:4764 loc_899: ; xref 273F:4760
-273F:4764 3B D8 cmp bx,ax
+273F:4764 3B D8 cmp bx, ax
273F:4766 72 09 jb loc_900 ; Jump if below
-273F:4768 0B D2 or dx,dx ; Zero ?
+273F:4768 0B D2 or dx, dx ; Zero ?
273F:476A 78 0E js loc_901 ; Jump if sign=1
273F:476C E8 FD6A call char_face_up
273F:476F EB 11 jmp short loc_903 ; (4782)
@@ -11010,7 +11038,7 @@
273F:4783 5F pop di
273F:4784 5B pop bx
273F:4785 C3 retn
- sub_110 endp
+ character_face_hotspot endp
;* No entry point to code
273F:4786 8B DD mov bx,bp
@@ -11026,9 +11054,9 @@
273F:479A C7 44 42 0016 mov word ptr [si+42h],16h
273F:479F E8 FC9F call sub_97 ; (4441)
273F:47A2 8B DE mov bx,si
-273F:47A4 03 5C 61 add bx,[si+61h]
@@ 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