aboutsummaryrefslogtreecommitdiff
path: root/engines/lure
diff options
context:
space:
mode:
authorPaul Gilbert2006-03-27 21:32:43 +0000
committerPaul Gilbert2006-03-27 21:32:43 +0000
commitb54d73d220d1bea3e1e8fcdcb2c48c4e51344f67 (patch)
tree37d05cfa5814dd0d826769bca7f490ee877e80fd /engines/lure
parent518c7b871f4dca0a9dd767409071cb8e10925bbb (diff)
downloadscummvm-rg350-b54d73d220d1bea3e1e8fcdcb2c48c4e51344f67.tar.gz
scummvm-rg350-b54d73d220d1bea3e1e8fcdcb2c48c4e51344f67.tar.bz2
scummvm-rg350-b54d73d220d1bea3e1e8fcdcb2c48c4e51344f67.zip
Further progress on disassembling pathfinding and support methods
svn-id: r21470
Diffstat (limited to 'engines/lure')
-rw-r--r--engines/lure/diassembly/LURE.ASM490
-rw-r--r--engines/lure/diassembly/Lure_notes.txt40
2 files changed, 288 insertions, 242 deletions
diff --git a/engines/lure/diassembly/LURE.ASM b/engines/lure/diassembly/LURE.ASM
index 0054928d28..8dc96d8d8b 100644
--- a/engines/lure/diassembly/LURE.ASM
+++ b/engines/lure/diassembly/LURE.ASM
@@ -191,7 +191,7 @@ 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_PATHFIND_COVERED equ 49h
HS_V4A equ 4Ah
HS_V4C equ 4Ch
HS_V4D equ 4Dh
@@ -3173,7 +3173,7 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:1387 8E C0 mov es,ax
273F:1389 33 FF xor di,di ; Zero register
273F:138B 33 C9 xor cx,cx ; Zero register
-273F:138D 8B 1E 076E mov bx, data_571
+273F:138D 8B 1E 076E mov bx, data_571
273F:1391 8A 7F 04 mov bh,[bx+4]
273F:1394 8B 2E 0748 mov bp, screen_width
273F:1398 úBE 4B93 mov si, offset action_name
@@ -3193,7 +3193,9 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:13AD 8B 1E 1922 mov bx, dest_room_num
273F:13B1 0B DB or bx,bx ; Going to change room?
273F:13B3 74 2C jz loc_191 ; No, so start in-room move
-273F:13B5 A1 6CF5 mov ax,data_896
+
+; Walking to another room
+273F:13B5 A1 6CF5 mov ax, player_room_number
273F:13B8 E8 401F call sub_126
273F:13BB 81 E2 0FFF and dx,0FFFh
273F:13BF úBE 6CEF mov si, offset player_hotspot_rec
@@ -3204,10 +3206,12 @@ CHAR_ACTION_CONTINUE_WALK equ 5
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)
+
+; In room walking
273F:13E1 loc_191: ; xref 273F:13B3
273F:13E1 úBE 6CEF mov si, offset player_hotspot_rec
273F:13E4 8B DE mov bx,si
@@ -4732,7 +4736,7 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:1D97 87 F7 xchg si,di
273F:1D99 F6 45 0C FF test byte ptr [di+REHS_EXIT_BLOCKED],0FFh ; Is exit blocked?
273F:1D9D 75 1F jnz loc_451 ; Jump if yes
-273F:1D9F loc_450:
+273F:1D9F loc_450:
273F:1D9F 8B 44 0A mov ax,[si+ROOMEXIT_HOTSPOT_ID]
273F:1DA2 A3 1920 mov room_exit_hotspot_id, ax
273F:1DA5 8B 44 0C mov ax,[si+ROOMEXIT_DEST_ROOM]
@@ -4750,10 +4754,10 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:1DC1 3A 06 11E1 cmp al, cursor_index
273F:1DC5 74 15 je loc_ret_453 ; Jump if equal
273F:1DC7 A2 11E1 mov cursor_index, al
-273F:1DCA C6 06 11DF 00 mov byte ptr data_632,0
+273F:1DCA C6 06 11DF 00 mov cursor_centroid, 0
273F:1DCF 3C 0A cmp al, CURSOR_CROSS
273F:1DD1 75 05 jne loc_452 ; Jump if not equal
-273F:1DD3 C6 06 11DF 07 mov byte ptr data_632,7
+273F:1DD3 C6 06 11DF 07 mov cursor_centroid, 7
273F:1DD8 loc_452: ; xref 273F:1DD1
273F:1DD8 FF 16 075E call word ptr [show_cursor_proc]
@@ -4974,7 +4978,7 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:1F5F 80 3E 11E1 01 cmp cursor_index, CURSOR_DISK
273F:1F64 74 0E je loc_ret_470 ; Jump if equal
273F:1F66 C6 06 11E1 01 mov cursor_index, CURSOR_DISK
-273F:1F6B C6 06 11DF 00 mov byte ptr data_632, 0
+273F:1F6B C6 06 11DF 00 mov cursor_centroid, 0
273F:1F70 FF 16 075E call word ptr [show_cursor_proc]
273F:1F74 loc_ret_470: ; xref 273F:1F64, 1F7A
@@ -4992,7 +4996,7 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:1F75 80 3E 11E1 00 cmp cursor_index, CURSOR_ARROW
273F:1F7A 74 F8 je loc_ret_470 ; Jump if equal
273F:1F7C C6 06 11E1 00 mov cursor_index, CURSOR_ARROW
-273F:1F81 C6 06 11DF 00 mov byte ptr data_632, 0
+273F:1F81 C6 06 11DF 00 mov cursor_centroid, 0
273F:1F86 FF 16 075E call word ptr [show_cursor_proc]
273F:1F8A C3 retn
show_arrow_cursor endp
@@ -6775,7 +6779,7 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:2AD8 F6 06 11D0 01 test menubar_state, 1 ; (31E4:11D0=3)
273F:2ADD 75 CE jnz loc_602 ; Jump if not zero
273F:2ADF A1 11D8 mov ax, mouse_y2
-273F:2AE2 2B 06 11DF sub ax, data_632
+273F:2AE2 2B 06 11DF sub ax, cursor_centroid
273F:2AE6 73 02 jnc loc_604 ; Jump if carry=0
273F:2AE8 33 C0 xor ax,ax ; Zero register
273F:2AEA loc_604: ; xref 273F:2AE6
@@ -6787,7 +6791,7 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:2AF7 loc_605: ; xref 273F:2AF2
273F:2AF7 89 2E 11EC mov data_640,bp ; (31E4:11EC=0)
273F:2AFB 8B 36 11D6 mov si, mouse_x2
-273F:2AFF 2B 36 11DF sub si, data_632
+273F:2AFF 2B 36 11DF sub si, cursor_centroid
273F:2B03 73 02 jnc loc_606 ; Jump if carry=0
273F:2B05 33 F6 xor si,si ; Zero register
273F:2B07 loc_606: ; xref 273F:2B03
@@ -8497,7 +8501,7 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:36A8 F6 06 11D0 01 test menubar_state, 1 ; (273F:11D0=56h)
273F:36AD 75 AF jnz loc_712 ; Jump if not zero
273F:36AF A1 11D8 mov ax, mouse_y2
-273F:36B2 2B 06 11DF sub ax, data_632
+273F:36B2 2B 06 11DF sub ax, cursor_centroid
273F:36B6 73 02 jnc loc_715 ; Jump if carry=0
273F:36B8 33 C0 xor ax,ax ; Zero register
273F:36BA loc_715: ; xref 273F:36B6
@@ -8509,7 +8513,7 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:36C7 loc_716: ; xref 273F:36C2
273F:36C7 89 16 11EC mov word ptr ds:[11ECh],dx ; (273F:11EC=1B55h)
273F:36CB 8B 36 11D6 mov si, mouse_x2
-273F:36CF 2B 36 11DF sub si, data_632
+273F:36CF 2B 36 11DF sub si, cursor_centroid
273F:36D3 73 02 jnc loc_717 ; Jump if carry=0
273F:36D5 33 F6 xor si,si ; Zero register
273F:36D7 loc_717: ; xref 273F:36D3
@@ -10370,9 +10374,9 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:4371 5B pop bx
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:4376 F6 44 49 FF test byte ptr [si+HS_PATHFIND_COVERED], 0FFh
273F:437A 75 07 jnz loc_844 ; Jump if not zero
-273F:437C C6 44 49 01 mov byte ptr [si+HS_V49], 1
+273F:437C C6 44 49 01 mov byte ptr [si+HS_PATHFIND_COVERED], 1
273F:4380 E8 2DAB call pathfind_flag_covered_cells
273F:4383 loc_844: ; xref 273F:437A
273F:4383 E9 032B jmp character_reset_direction
@@ -10389,12 +10393,12 @@ CHAR_ACTION_CONTINUE_WALK equ 5
; 7758
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:4387 sub_94 proc near
-273F:4387 F6 44 49 FF test byte ptr [si+HS_V49], 0FFh
+ character_pathfind_clear proc near
+273F:4387 F6 44 49 FF test byte ptr [si+HS_PATHFIND_COVERED], 0FFh
273F:438B 74 F9 jz loc_ret_845 ; Jump if zero
-273F:438D C6 44 49 00 mov byte ptr [si+HS_V49], 0
+273F:438D C6 44 49 00 mov byte ptr [si+HS_PATHFIND_COVERED], 0
273F:4391 E9 2DAF jmp pathfind_clear_covered_cells
- sub_94 endp
+ character_pathfind_clear endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
@@ -10430,7 +10434,7 @@ CHAR_ACTION_CONTINUE_WALK equ 5
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: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:
@@ -10768,7 +10772,7 @@ CHAR_ACTION_CONTINUE_WALK equ 5
; 5B96, 5C34, 5CB3, 5D7E, 5DAA, 89F0
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:45A7 sub_107 proc near
+ hotspot_action_precheck proc near
273F:45A7 3D 0420 cmp ax, 420h
273F:45AA 74 0A je loc_876 ; Jump if equal
273F:45AC 3D 0436 cmp ax, 436h
@@ -10789,7 +10793,7 @@ CHAR_ACTION_CONTINUE_WALK equ 5
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:
+273F:45CB loc_878:
273F:45CB 58 pop ax
273F:45CC B8 0003 mov ax, 3 ; Initial call for action
273F:45CF C3 retn ; (prior to moving to it)
@@ -10803,10 +10807,10 @@ CHAR_ACTION_CONTINUE_WALK equ 5
;
; 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:45DD 75 72 jne loc_884 ; Jump if not equal
+ hotspot_action_precheck_2:
+273F:45D7 8B 44 06 mov ax, [si+HS_ROOM_NUM] ; Is object in same room
+273F:45DA 3B 47 06 cmp ax, [bx+HS_ROOM_NUM] ; as the character?
+273F:45DD 75 72 jne loc_884 ; Jump if not
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+HS_FRAME_NUM], 1
@@ -10814,9 +10818,9 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:45EF 72 09 jb loc_881 ; Jump if below
273F:45F1 loc_880: ; xref 273F:4606, 463B, 4641, 4647
; 464F
-273F:45F1 úE8 0E95 call sub_127 ; (5489)
+273F:45F1 úE8 0E95 call character_walking_check
273F:45F4 75 D2 jnz loc_877 ; Jump if not zero
-273F:45F6 B8 0003 mov ax,3
+273F:45F6 B8 0003 mov ax, 3 ; Flag walking is required
273F:45F9 C3 retn
273F:45FA loc_881: ; xref 273F:45EF
273F:45FA 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
@@ -10851,18 +10855,18 @@ CHAR_ACTION_CONTINUE_WALK equ 5
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+2Ah],0FFh ; There a dest hotspot?
+273F:4651 F6 44 2A FF test byte ptr [si+HS_FRAME_NUM],0FFh ; char has frame set?
273F:4655 75 07 jnz loc_885 ; Jump if yes
-273F:4657 33 C0 xor ax,ax ; Zero register
+273F:4657 33 C0 xor ax, ax ; Zero register
273F:4659 53 push bx
273F:465A E8 1D54 call display_message_dialog_3
273F:465D 5B pop bx
273F:465E loc_885:
-273F:465E C6 44 2A 00 mov byte ptr [si+2Ah],0
-273F:4662 B8 0001 mov ax,1
+273F:465E C6 44 2A 00 mov byte ptr [si+HS_FRAME_NUM], 0
+273F:4662 B8 0001 mov ax, 1
273F:4665 C3 retn
273F:4666 loc_886: ; xref 273F:464D
-273F:4666 C6 44 2A 00 mov byte ptr [si+2Ah],0
+273F:4666 C6 44 2A 00 mov byte ptr [si+HS_FRAME_NUM], 0
273F:466A B8 000E mov ax,0Eh
273F:466D 53 push bx
273F:466E E8 1D40 call display_message_dialog_3
@@ -10870,25 +10874,25 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:4672 B8 0002 mov ax,2
273F:4675 C3 retn
273F:4676 loc_887: ; xref 273F:4633
-273F:4676 C6 44 2A 00 mov byte ptr [si+2Ah],0
-273F:467A B8 000D mov ax,0Dh
+273F:4676 C6 44 2A 00 mov byte ptr [si+HS_FRAME_NUM], 0
+273F:467A B8 000D mov ax, 0Dh
273F:467D 53 push bx
273F:467E E8 1D30 call display_message_dialog_3
273F:4681 5B pop bx
273F:4682 B8 0004 mov ax,4
273F:4685 C3 retn
273F:4686 loc_888: ; xref 273F:45C8
-273F:4686 C6 44 2A 00 mov byte ptr [si+2Ah],0
+273F:4686 C6 44 2A 00 mov byte ptr [si+HS_FRAME_NUM], 0
273F:468A 81 3E BA1B 0408 cmp active_hotspot_id, 408h
273F:4690 73 0F jae loc_889 ; Jump if above or =
273F:4692 C6 47 44 08 mov byte ptr [bx+44h],8
273F:4696 C7 47 42 001E mov word ptr [bx+42h],1Eh
-273F:469B 8B 45 1B mov ax,[di+1Bh]
+273F:469B 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
273F:469E 89 47 50 mov [bx+50h],ax
273F:46A1 loc_889: ; xref 273F:4690
273F:46A1 33 C0 xor ax,ax ; Zero register
273F:46A3 C3 retn
- sub_107 endp
+ hotspot_action_precheck endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
@@ -11045,7 +11049,7 @@ CHAR_ACTION_CONTINUE_WALK equ 5
273F:4788 8B 07 mov ax,[bx]
273F:478A 50 push ax
273F:478B 83 C5 02 add bp,2
-273F:478E E8 0DF0 call sub_129 ; (5581)
+273F:478E E8 0DF0 call character_walking_end
273F:4791 58 pop ax
273F:4792 E8 F69F call sequence_execute
273F:4795 C3 retn
@@ -11432,20 +11436,21 @@ TEMP_DEST_Y equ 08h
TEMP_X equ 0Ch
TEMP_Y equ 0Ah
TEMP_DEST_X2 equ 10h
+
character_pathfind proc near
-273F:49F6 89 26 3942 mov pathfind_sp, sp
+273F:49F6 89 26 3942 mov pathfind_sp, sp ; Backup current SP
273F:49FA C7 06 3944 0FA0 mov pathfind_v2, 0FA0h
-273F:4A00 F6 06 3946 FF test pathfind_v3, 0FFh
+273F:4A00 F6 06 3946 FF test pathfind_in_progress, 0FFh
273F:4A05 74 0E jz loc_933 ; Jump if zero
273F:4A07 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
273F:4A0A 74 03 je loc_932 ; Jump if equal
273F:4A0C 33 C0 xor ax,ax ; Zero register
273F:4A0E C3 retn
-273F:4A0F loc_932: ; xref 273F:4A0A
+273F:4A0F loc_932:
273F:4A0F úBE 3983 mov si, offset player_pathfind_data
-273F:4A12 8B 24 mov sp, [si]
-273F:4A14 C3 retn
-273F:4A15 loc_933: ; xref 273F:4A05
+273F:4A12 8B 24 mov sp, [si] ; Get SP for restore point
+273F:4A14 C3 retn ; (ie. carry on where we left off)
+273F:4A15 loc_933:
273F:4A15 BE 3983 mov si, offset player_pathfind_data
273F:4A18 BD 03E8 mov bp, PLAYER_HOTSPOT_ID
273F:4A1B 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
@@ -11462,7 +11467,7 @@ TEMP_DEST_X2 equ 10h
273F:4A34 8B 24 mov sp, [si]
273F:4A36 C3 retn
273F:4A37 loc_935: ; xref 273F:4A1E
-273F:4A37 C6 06 3946 01 mov pathfind_v3, 1
+273F:4A37 C6 06 3946 01 mov pathfind_in_progress, 1
273F:4A3C loc_936: ; xref 273F:4A2A
273F:4A3C 88 54 04 mov [si+TEMP_HS4C], dl ; Store HS[4Ch]
273F:4A3F 89 44 02 mov [si+TEMP_CHARACTER_ID], ax ; Store character Id
@@ -11485,8 +11490,8 @@ TEMP_DEST_X2 equ 10h
273F:4A5E 8B 6D 13 mov bp, [di+ANIM_WIDTH_COPY]
273F:4A61 83 ED 01 sub bp, 1
273F:4A64 B1 03 mov cl, 3
-273F:4A66 D3 ED shr bp, cl ; bp=width/8
-273F:4A68 57 push di
+273F:4A66 D3 ED shr bp, cl ; bp=(width copy-1)/8
+273F:4A68 57 push di
273F:4A69 ú81 C6 08A2 add si, 8A2h
273F:4A6D 8B 45 0E mov ax, [di+ANIM_ROOM_NUM]
273F:4A70 8B D8 mov bx, ax
@@ -11495,19 +11500,25 @@ TEMP_DEST_X2 equ 10h
273F:4A76 2B C3 sub ax, bx
273F:4A78 B1 03 mov cl, 3
273F:4A7A D3 E0 shl ax, cl ; ax=Room # * 120
-273F:4A7C 05 9849 add ax, offset pathfind_data
+273F:4A7C 05 9849 add ax, offset pathfind_data2 - 1
273F:4A7F 1E push ds
273F:4A80 07 pop es
273F:4A81 8B FE mov di, si ; for player di=4225h
-273F:4A83 8B F0 mov si, ax ; si=room ? record offset
+273F:4A83 8B F0 mov si, ax ; si=end of pathfind layer for room
273F:4A85 FD std ; Set for reverse direction
273F:4A86 33 C0 xor ax, ax
273F:4A88 B9 002B mov cx, 2Bh
273F:4A8B F3/ AB rep stosw ; Clear area
273F:4A8D 83 C7 01 add di, 1 ; For player di=41D0h
+
+; Extract the bit-compressed data of the pathfinding data for the room into an
+; uncompressed array indicating whether each 8x8 pixel block can be traveled on
+; cx = bit number, dl = number of columns, dh = number of rows
+
273F:4A90 B6 18 mov dh, 18h
273F:4A92 loc_939:
-273F:4A92 B2 05 mov dl,5
+273F:4A92 B2 05 mov dl, 5
+
273F:4A94 loc_940:
273F:4A94 AC lodsb ; ax=c6h, si=98c0h
273F:4A95 86 E0 xchg ah, al
@@ -11516,22 +11527,22 @@ TEMP_DEST_X2 equ 10h
273F:4A9C locloop_941: ; xref 273F:4AA2, 4AB3
273F:4A9C D0 EC shr ah, 1 ; Shift w/zeros fill
-273F:4A9E 72 06 jc loc_942 ; Jump if carry Set
-273F:4AA0 AA stosb ; Store al to es:[di]
-273F:4AA1 AA stosb ; Store al to es:[di]
-273F:4AA2 E2 F8 loop locloop_941 ; Loop if cx > 0
+273F:4A9E 72 06 jc loc_942 ; Jump if bit set (block occupied)
+273F:4AA0 AA stosb ; Store 0 to es:[di]
+273F:4AA1 AA stosb ; Store 0 to es:[di]
+273F:4AA2 E2 F8 loop locloop_941 ; Loop for remaining bits
-273F:4AA4 EB 33 jmp short loc_948 ; (4AD9)
-273F:4AA6 loc_942: ; xref 273F:4A9E
+273F:4AA4 EB 33 jmp short loc_948
+273F:4AA6 loc_942: ; Handling for occupied blocks
273F:4AA6 F6 D0 not al
-273F:4AA8 AA stosb ; Store al to es:[di]
-273F:4AA9 AA stosb ; Store al to es:[di]
+273F:4AA8 AA stosb ; Store 0FFh to es:[di]
+273F:4AA9 AA stosb ; Store 0FFh to es:[di]
273F:4AAA F6 D0 not al
-273F:4AAC 8B DD mov bx,bp
-273F:4AAE 83 EB 01 sub bx,1
-273F:4AB1 73 1D jnc loc_947 ; Jump if carry=0
-273F:4AB3 loc_943: ; xref 273F:4ACE
-273F:4AB3 E2 E7 loop locloop_941 ; Loop if cx > 0
+273F:4AAC 8B DD mov bx, bp ; Get width/8 val
+273F:4AAE 83 EB 01 sub bx, 1
+273F:4AB1 73 1D jnc loc_947 ; Jump if width/8 val != 0
+273F:4AB3 loc_943:
+273F:4AB3 E2 E7 loop locloop_941 ; Keep looping
273F:4AB5 EB 22 jmp short loc_948 ; (4AD9)
273F:4AB7 loc_944: ; xref 273F:4AD5
@@ -11561,13 +11572,14 @@ TEMP_DEST_X2 equ 10h
273F:4AD9 loc_948: ; xref 273F:4AA4, 4AB5
273F:4AD9 80 EA 01 sub dl,1
273F:4ADC 75 B6 jnz loc_940 ; Jump if not zero
-
-273F:4ADE loc_949: ; xref 273F:4AD7
+273F:4ADE loc_949:
273F:4ADE B9 0004 mov cx, 4
273F:4AE1 F3/ AA rep stosb ; Rep when cx >0 Store al to es:[di]
273F:4AE3 B2 05 mov dl, 5
273F:4AE5 80 EE 01 sub dh, 1
273F:4AE8 75 A8 jnz loc_939 ; Jump if not zero
+
+; End of decompression code for the path finding layer
273F:4AEA 83 EF 01 sub di, 1
273F:4AED B9 0029 mov cx, 29h
273F:4AF0 33 C0 xor ax, ax ; Zero register
@@ -11995,7 +12007,7 @@ TEMP_DEST_X2 equ 10h
273F:4E96 loc_1006: ; End of pathfinding
273F:4E96 C7 05 0000 mov word ptr [di], 0
273F:4E9A 8B 26 3942 mov sp, pathfind_sp
-273F:4E9E C6 06 3946 00 mov pathfind_v3, 0
+273F:4E9E C6 06 3946 00 mov pathfind_in_progress, 0
273F:4EA3 B8 0001 mov ax, 1
273F:4EA6 02 45 05 add al, [di+5]
273F:4EA9 50 push ax
@@ -12070,9 +12082,9 @@ TEMP_DEST_X2 equ 10h
273F:4F0D 55 push bp
273F:4F0E 1E push ds
273F:4F0F 06 push es
-273F:4F10 9C pushf ; Push flags
-273F:4F11 E8 0034 call sub_122 ; (4F48)
-273F:4F14 9D popf ; Pop flags
+273F:4F10 9C pushf
+273F:4F11 E8 0034 call pathfind_return_to_sp
+273F:4F14 9D popf
273F:4F15 07 pop es
273F:4F16 1F pop ds
273F:4F17 5D pop bp
@@ -12128,13 +12140,13 @@ TEMP_DEST_X2 equ 10h
; Called from: 273F:4F11
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:4F48 sub_122 proc near
-273F:4F48 89 25 mov [di],sp
-273F:4F4A 8B 26 3942 mov sp,word ptr ds:[3942h] ; (273F:3942=5901h)
-273F:4F4E 33 C0 xor ax,ax ; Zero register
+ pathfind_return_to_sp proc near
+273F:4F48 89 25 mov [di], sp
+273F:4F4A 8B 26 3942 mov sp, pathfind_sp
+273F:4F4E 33 C0 xor ax, ax
273F:4F50 FC cld ; Clear direction
273F:4F51 C3 retn
- sub_122 endp
+ pathfind_return_to_sp endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
@@ -12148,7 +12160,7 @@ TEMP_DEST_X2 equ 10h
273F:4F53 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
273F:4F56 75 0E jne loc_1019 ; Jump if not equal
273F:4F58 úBB 3983 mov bx, offset player_pathfind_data
-273F:4F5B C6 06 3946 00 mov pathfind_v3, 0
+273F:4F5B C6 06 3946 00 mov pathfind_in_progress, 0
273F:4F60 C7 07 0000 mov word ptr [bx], 0
273F:4F64 5B pop bx
273F:4F65 C3 retn
@@ -12265,7 +12277,7 @@ TEMP_DEST_X2 equ 10h
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:504E 75 04 jnz loc_1031 ; Jump if not zero
-273F:5050 E8 F334 call sub_94 ; (4387)
+273F:5050 E8 F334 call character_pathfind_clear
273F:5053 C3 retn
273F:5054 loc_1031: ; xref 273F:5031, 504E
273F:5054 F6 44 44 FF test byte ptr [si+HS_V44], 0FFh
@@ -12316,7 +12328,7 @@ TEMP_DEST_X2 equ 10h
273F:50AA 89 44 50 mov [si+50h],ax
273F:50AD 86 44 44 xchg [si+44h],al
273F:50B0 50 push ax
-273F:50B1 E8 F2D3 call sub_94 ; (4387)
+273F:50B1 E8 F2D3 call character_pathfind_clear
273F:50B4 58 pop ax
273F:50B5 3C 04 cmp al,4
273F:50B7 74 04 je loc_1039 ; Jump if equal
@@ -12376,7 +12388,7 @@ TEMP_DEST_X2 equ 10h
273F:5124 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
273F:5127 E8 FE28 call pathfind_reset
273F:512A C6 07 04 mov byte ptr [bx], CHAR_ACTION_PROCESSING_PATH
-273F:512D E8 F257 call sub_94 ; (4387)
+273F:512D E8 F257 call character_pathfind_clear
273F:5130 loc_1049: ; Processing walk path
273F:5130 56 push si
@@ -12505,7 +12517,7 @@ TEMP_DEST_X2 equ 10h
273F:521C 75 F8 jnz loc_ret_1061 ; Jump if not zero
273F:521E F6 44 49 FF test byte ptr [si+49h],0FFh
273F:5222 74 03 jz loc_1063 ; Jump if zero
-273F:5224 E8 F160 call sub_94 ; (4387)
+273F:5224 E8 F160 call character_pathfind_clear
273F:5227 loc_1063:
273F:5227 8B DE mov bx,si
273F:5229 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
@@ -12721,14 +12733,14 @@ TEMP_DEST_X2 equ 10h
273F:53DA 48 dec ax
273F:53DB B9 0058 mov cx,58h
273F:53DE F7 E1 mul cx ; dx:ax = reg * ax
-273F:53E0 05 1929 add ax,1929h
-273F:53E3 03 D8 add bx,ax
-273F:53E5 8A 5F 23 mov bl,[bx+23h]
-273F:53E8 32 FF xor bh,bh ; Zero register
-273F:53EA 03 D8 add bx,ax
-273F:53EC 8B 0F mov cx,[bx]
-273F:53EE 8B 57 02 mov dx,[bx+2]
-273F:53F1 8B 47 04 mov ax,[bx+4]
+273F:53E0 05 1929 add ax, offset sub_129_list
+273F:53E3 03 D8 add bx, ax ; Move offset for indexing
+273F:53E5 8A 5F 23 mov bl, [bx+23h]
+273F:53E8 32 FF xor bh, bh ; Zero register
+273F:53EA 03 D8 add bx, ax
+273F:53EC 8B 0F mov cx, [bx]
+273F:53EE 8B 57 02 mov dx, [bx+2]
+273F:53F1 8B 47 04 mov ax, [bx+4]
273F:53F4 C3 retn
sub_126 endp
@@ -12745,16 +12757,16 @@ TEMP_DEST_X2 equ 10h
273F:53F9 83 C5 02 add bp,2
273F:53FC A3 BA19 mov use_hotspot_id, ax
273F:53FF A3 BA1B mov active_hotspot_id, ax
-273F:5402 E8 F1A2 call sub_107 ; (45A7)
+273F:5402 E8 F1A2 call hotspot_action_precheck
273F:5405 0B C0 or ax,ax ; Zero ?
273F:5407 74 08 jz loc_1086 ; Jump if zero
273F:5409 3D 0003 cmp ax,3
273F:540C 74 4E je loc_ret_1090 ; Jump if equal
-273F:540E E9 0170 jmp sub_129
+273F:540E E9 0170 jmp character_walking_end
273F:5411 loc_1086: ; xref 273F:5407
273F:5411 E8 F2DA call character_face_hotspot
273F:5414 53 push bx
-273F:5415 E8 0169 call sub_129
+273F:5415 E8 0169 call character_walking_end
273F:5418 5B pop bx
273F:5419 E8 01DA call hotspot_get_action_sequence
273F:541C 79 03 jns loc_1087 ; Jump if not sign
@@ -12801,7 +12813,7 @@ TEMP_DEST_X2 equ 10h
273F:546F A3 BA19 mov use_hotspot_id, ax
273F:5472 A3 BA1B mov active_hotspot_id, ax
273F:5475 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
-273F:5478 72 0F jb loc_1091 ; Jump if below
+273F:5478 72 0F jb character_walking_check
273F:547A 56 push si
273F:547B E8 B86C call get_room_resource_pointer2
273F:547E 5B pop bx
@@ -12816,88 +12828,87 @@ TEMP_DEST_X2 equ 10h
; Called from: 273F:45F1
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:5489 sub_127 proc near
-273F:5489 loc_1091: ; xref 273F:5478
+ character_walking_check proc near
273F:5489 57 push di
-273F:548A úBF BC4B mov di,data_495e ; (273F:BC4B=0)
+273F:548A úBF BC4B mov di, offset hotspot_proximity_list
273F:548D A1 BA1B mov ax, active_hotspot_id
273F:5490 loc_1092: ; xref 273F:549D
-273F:5490 úF7 05 FFFF test word ptr [di],0FFFFh
-273F:5494 74 4F jz loc_1094 ; Jump if zero
-273F:5496 3B 05 cmp ax,[di]
-273F:5498 74 05 je loc_1093 ; Jump if equal
-273F:549A 83 C7 06 add di,6
-273F:549D EB F1 jmp short loc_1092 ; (5490)
-273F:549F loc_1093: ; xref 273F:5498
-273F:549F 8B 4D 02 mov cx,[di+2]
-273F:54A2 8B 55 04 mov dx,[di+4]
-273F:54A5 B0 01 mov al,1
-273F:54A7 F6 C6 80 test dh,80h
+273F:5490 úF7 05 FFFF test word ptr [di], 0FFFFh ; End of list reached?
+273F:5494 74 4F jz loc_1094 ; Jump if yes
+273F:5496 3B 05 cmp ax, [di] ; 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:549D EB F1 jmp short loc_1092
+273F:549F loc_1093:
+273F:549F 8B 4D 02 mov cx, [di+2]
+273F:54A2 8B 55 04 mov dx, [di+4]
+273F:54A5 B0 01 mov al, 1
+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+27h],al
-273F:54B0 80 E6 7F and dh,7Fh
-273F:54B3 8B 44 0D mov ax,[si+0Dh]
-273F:54B6 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:54B8 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:54BA D1 E8 shr ax,1 ; Shift w/zeros fill
+273F:54AD 88 45 27 mov [di+ANIM_UNKNOWN1], 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
+273F:54B8 D1 E8 shr ax, 1
+273F:54BA D1 E8 shr ax, 1 ; ax = player X / 8
273F:54BC 51 push cx
-273F:54BD D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:54BF D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:54C1 D1 E9 shr cx,1 ; Shift w/zeros fill
-273F:54C3 2B C1 sub ax,cx
+273F:54BD D1 E9 shr cx, 1
+273F:54BF D1 E9 shr cx, 1
+273F:54C1 D1 E9 shr cx, 1 ; cx = list[2] / 8
+273F:54C3 2B C1 sub ax, cx ; ax -= cx
273F:54C5 59 pop cx
-273F:54C6 75 51 jnz loc_1098 ; Jump if not zero
-273F:54C8 8B 44 0F mov ax,[si+0Fh]
-273F:54CB 03 44 1B add ax,[si+1Bh]
-273F:54CE D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:54D0 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:54D2 D1 E8 shr ax,1 ; Shift w/zeros fill
-273F:54D4 2D 0001 sub ax,1
+273F:54C6 75 51 jnz character_start_walking ; If NZ, jump to start walking
+273F:54C8 8B 44 0F mov ax, [si+HS_Y]
+273F:54CB 03 44 1B add ax, [si+HS_HEIGHT_COPY]
+273F:54CE D1 E8 shr ax, 1
+273F:54D0 D1 E8 shr ax, 1
+273F:54D2 D1 E8 shr ax, 1
+273F:54D4 2D 0001 sub ax, 1 ; ax = (HS+height)/8 - 1
273F:54D7 52 push dx
-273F:54D8 D1 EA shr dx,1 ; Shift w/zeros fill
-273F:54DA D1 EA shr dx,1 ; Shift w/zeros fill
-273F:54DC D1 EA shr dx,1 ; Shift w/zeros fill
-273F:54DE 2B C2 sub ax,dx
+273F:54D8 D1 EA shr dx, 1
+273F:54DA D1 EA shr dx, 1
+273F:54DC D1 EA shr dx, 1
+273F:54DE 2B C2 sub ax, dx ; ax -= dx
273F:54E0 5A pop dx
-273F:54E1 75 36 jnz loc_1098 ; Jump if not zero
-273F:54E3 EB 65 jmp short loc_1100 ; (554A)
+273F:54E1 75 36 jnz character_start_walking ; If NZ, jump to start walking
+273F:54E3 EB 65 jmp short loc_1100
+
273F:54E5 loc_1094: ; xref 273F:5494
-273F:54E5 8B 4F 0D mov cx,[bx+0Dh]
-273F:54E8 8B 57 0F mov dx,[bx+0Fh]
-273F:54EB 03 57 1B add dx,[bx+1Bh]
-273F:54EE 83 EA 04 sub dx,4
-273F:54F1 B0 00 mov al,0
+273F:54E5 8B 4F 0D mov cx, [bx+HS_X]
+273F:54E8 8B 57 0F mov dx, [bx+HS_Y]
+273F:54EB 03 57 1B add dx, [bx+HS_HEIGHT_COPY]
+273F:54EE 83 EA 04 sub dx, 4
+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+27h],al
-273F:54F7 8B 44 0D mov ax,[si+0Dh]
-273F:54FA 2B C1 sub ax,cx
+273F:54F4 88 45 27 mov [di+ANIM_UNKNOWN1], 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
273F:54FE F7 D8 neg ax
273F:5500 loc_1096: ; xref 273F:54FC
-273F:5500 3D 0008 cmp ax,8
-273F:5503 73 14 jae loc_1098 ; Jump if above or =
-273F:5505 8B 44 0F mov ax,[si+0Fh]
-273F:5508 03 44 1B add ax,[si+1Bh]
-273F:550B 2D 0001 sub ax,1
-273F:550E 2B C2 sub ax,dx
+273F:5500 3D 0008 cmp ax, 8
+273F:5503 73 14 jae character_start_walking ; If NZ, jump to start walking
+273F:5505 8B 44 0F mov ax, [si+HS_Y]
+273F:5508 03 44 1B add ax, [si+HS_HEIGHT_COPY]
+273F:550B 2D 0001 sub ax, 1
+273F:550E 2B C2 sub ax, dx
273F:5510 73 02 jnc loc_1097 ; Jump if carry=0
273F:5512 F7 D8 neg ax
273F:5514 loc_1097: ; xref 273F:5510
-273F:5514 3D 0013 cmp ax,13h
+273F:5514 3D 0013 cmp ax, 13h
273F:5517 72 31 jb loc_1100 ; Jump if below
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;
; Called from: 273F:8541
-273F:5519 sub_128:
-273F:5519 loc_1098: ; xref 273F:54C6, 54E1, 5503
+ character_start_walking proc near
273F:5519 81 FE 6CEF cmp si, offset player_hotspot_rec
273F:551D 75 17 jne loc_1099 ; Jump if not equal
-273F:551F C7 06 11E1 0002 mov word ptr ds:[11E1h],2 ; (273F:11E1=3FBh)
-273F:5525 C6 06 11DF 00 mov byte ptr data_632, 0
+273F:551F C7 06 11E1 0002 mov cursor_index, CURSOR_TIME_UP
+273F:5525 C6 06 11DF 00 mov cursor_centroid, 0
273F:552A 56 push si
273F:552B 57 push di
273F:552C 51 push cx
@@ -12919,7 +12930,8 @@ TEMP_DEST_X2 equ 10h
273F:554A loc_1100: ; xref 273F:54E3, 5517
273F:554A 0D 0001 or ax,1
273F:554D C3 retn
- sub_127 endp
+ character_start_walking endp
+ character_walking_check endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
@@ -12958,16 +12970,16 @@ TEMP_DEST_X2 equ 10h
; 5968, 5ACE, 5B47, 5BA6, 5C15, 5C7A, 5D32
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:5581 sub_129 proc near
+ character_walking_end proc near
273F:5581 ú81 7D 1B 03E8 cmp word ptr [di+ANIM_HOTSPOT_ID], PLAYER_HOTSPOT_ID
-273F:5586 75 05 jne sub_130 ; Jump if not player
+273F:5586 75 05 jne character_walking_end_2
273F:5588 80 26 9834 02 and byte ptr data_1084, 2 ; (31E4:9834=0)
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;
-273F:558D sub_130:
-273F:558D ú33 C0 xor ax,
+ character_walking_end_2:
+273F:558D ú33 C0 xor ax, ax
273F:558F 89 45 24 mov [di+ANIM_VOICE_CTR], ax
273F:5592 88 44 2A mov [si+HS_FRAME_NUM], al
273F:5595 8B DE mov bx, si
@@ -12975,8 +12987,7 @@ TEMP_DEST_X2 equ 10h
273F:559A 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
273F:559D 89 6F 01 mov [bx+1], bp
273F:55A0 C3 retn
- sub_129 endp
-
+ character_walking_end endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
@@ -13070,7 +13081,7 @@ TEMP_DEST_X2 equ 10h
273F:5631 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
273F:5634 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
273F:5637 89 47 03 mov [bx+3], ax
-273F:563A E9 FF44 jmp sub_129
+273F:563A E9 FF44 jmp character_walking_end
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
@@ -13087,7 +13098,7 @@ TEMP_DEST_X2 equ 10h
273F:564F 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
273F:5652 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
273F:5655 89 47 03 mov [bx+3], ax
-273F:5658 E9 FF26 jmp sub_129
+273F:5658 E9 FF26 jmp character_walking_end
go_to_proc endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
@@ -13217,15 +13228,15 @@ TEMP_DEST_X2 equ 10h
273F:570F loc_1115:
273F:570F 5E pop si
273F:5710 A1 BA19 mov ax, use_hotspot_id
-273F:5713 E8 EE91 call sub_107 ; (45A7)
+273F:5713 E8 EE91 call hotspot_action_precheck
273F:5716 0B C0 or ax,ax ; Zero ?
273F:5718 74 08 jz loc_1116 ; Jump if zero
273F:571A 3D 0003 cmp ax,3
273F:571D 74 47 je loc_ret_1119 ; Jump if equal
-273F:571F E9 FE5F jmp sub_129
+273F:571F E9 FE5F jmp character_walking_end
273F:5722 loc_1116: ; xref 273F:5718
273F:5722 53 push bx
-273F:5723 E8 FE5B call sub_129 ; (5581)
+273F:5723 E8 FE5B call character_walking_end
273F:5726 5B pop bx
273F:5727 C6 44 2A 00 mov byte ptr [si+2Ah],0
273F:572B E8 EFC0 call character_face_hotspot
@@ -13258,7 +13269,7 @@ TEMP_DEST_X2 equ 10h
273F:5767 5E pop si
273F:5768 B8 0004 mov ax,4
273F:576B E8 0C43 call display_message_dialog_3
-273F:576E E9 FE10 jmp sub_129
+273F:576E E9 FE10 jmp character_walking_end
273F:5771 loc_1121: ; xref 273F:5740
273F:5771 F6 44 60 FF test byte ptr [si+60h],0FFh
273F:5775 74 04 jz loc_1122 ; Jump if zero
@@ -13289,18 +13300,18 @@ TEMP_DEST_X2 equ 10h
273F:57A0 5E pop si
273F:57A1 B80300 mov ax, 3
273F:57A4 E80A0C call display_message_dialog_3
-273F:57A7 E9D7FD jmp sub_129
+273F:57A7 E9D7FD jmp character_walking_end
273F:57AA A119BA close_proc_2: mov ax, use_hotspot_id
273F:57AD 5E pop si
-273F:57AE E8F6ED call sub_107
+273F:57AE E8F6ED call hotspot_action_precheck
273F:57B1 0BC0 or ax, ax
273F:57B3 7408 jz loc_1123
273F:57B5 3D0300 cmp AX, 3
273F:57B8 7448 jz loc_ret_1127
-273F:57BA E9C4FD jmp sub_129
+273F:57BA E9C4FD jmp character_walking_end
273F:57BD loc_1123:
273F:57BD 53 push bx
-273F:57BE E8 FDC0 call sub_129 ; (5581)
+273F:57BE E8 FDC0 call character_walking_end
273F:57C1 5B pop bx
273F:57C2 C6 44 2A 00 mov byte ptr [si+2Ah],0
273F:57C6 E8 EF25 call character_face_hotspot
@@ -13349,7 +13360,7 @@ TEMP_DEST_X2 equ 10h
273F:580D 83 C5 02 add bp,2
273F:5810 A3 BA19 mov use_hotspot_id, ax
273F:5813 A3 BA1B mov active_hotspot_id, ax
-273F:5816 E8 ED8E call sub_107 ; (45A7)
+273F:5816 E8 ED8E call hotspot_action_precheck
273F:5819 0B C0 or ax,ax ; Zero ?
273F:581B 74 06 jz loc_1129 ; Jump if zero
273F:581D 3C 03 cmp al,3
@@ -13406,7 +13417,7 @@ TEMP_DEST_X2 equ 10h
273F:588B loc_1134: ; xref 273F:5821, 583B
273F:588B 8B DD mov bx,bp
273F:588D C7 07 0000 mov word ptr [bx],0
-273F:5891 E9 FCF9 jmp sub_130
+273F:5891 E9 FCF9 jmp character_walking_end_2
tell_proc endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
@@ -13428,12 +13439,12 @@ TEMP_DEST_X2 equ 10h
273F:58A8 8B 47 06 mov ax, [bx+HS_ROOM_NUM]
273F:58AB 3B 45 1B cmp ax, [di+ANIM_HOTSPOT_ID] ; In player's inventory?
273F:58AE 74 1B je loc_1136 ; If yes then jump
-273F:58B0 E8 ED24 call sub_108
-273F:58B3 0B C0 or ax,ax ; Zero ?
+273F:58B0 E8 ED24 call hotspot_action_precheck_2
+273F:58B3 0B C0 or ax, ax ; Zero ?
273F:58B5 74 08 jz loc_1135 ; Jump if zero
273F:58B7 3D 0003 cmp ax,3
273F:58BA 74 3E je loc_ret_1139 ; Jump if equal
-273F:58BC E9 FCC2 jmp sub_129
+273F:58BC E9 FCC2 jmp character_walking_end
273F:58BF loc_1135: ; xref 273F:58B5
273F:58BF C6 44 2A 00 mov byte ptr [si+2Ah],0
273F:58C3 E8 EE28 call character_face_hotspot
@@ -13442,7 +13453,7 @@ TEMP_DEST_X2 equ 10h
273F:58CA 5D pop bp
273F:58CB loc_1136:
273F:58CB 53 push bx
-273F:58CC E8 FCB2 call sub_129 ; (5581)
+273F:58CC E8 FCB2 call character_walking_end
273F:58CF 5B pop bx
273F:58D0 E8 FD23 call hotspot_get_action_sequence
273F:58D3 79 03 jns loc_1137 ; Jump if not sign
@@ -13494,16 +13505,16 @@ TEMP_DEST_X2 equ 10h
273F:5900 83 C5 02 add bp,2
273F:5903 A3 BA19 mov use_hotspot_id, ax
273F:5906 A3 BA1B mov active_hotspot_id, ax
-273F:5909 E8 EC9B call sub_107 ; (45A7)
+273F:5909 E8 EC9B call hotspot_action_precheck
273F:590C 0B C0 or ax,ax ; Zero ?
273F:590E 74 08 jz loc_1141 ; Jump if zero
273F:5910 3D 0003 cmp ax,3
273F:5913 74 E6 je loc_ret_1140 ; Jump if equal
-273F:5915 E9 FC69 jmp sub_129
+273F:5915 E9 FC69 jmp character_walking_end
273F:5918 loc_1141: ; xref 273F:590E
273F:5918 88 44 2A mov [si+2Ah], al
273F:591B 53 push bx
-273F:591C E8 FC62 call sub_129 ; (5581)
+273F:591C E8 FC62 call character_walking_end
273F:591F 5B pop bx
273F:5920 E8 EDCB call character_face_hotspot
273F:5923 E8 FCD0 call hotspot_get_action_sequence
@@ -13530,15 +13541,15 @@ TEMP_DEST_X2 equ 10h
273F:593B 83 C5 02 add bp,2
273F:593E A3 BA19 mov use_hotspot_id, ax
273F:5941 A3 BA1B mov active_hotspot_id, ax
-273F:5944 E8 EC60 call sub_107 ; (45A7)
+273F:5944 E8 EC60 call hotspot_action_precheck
273F:5947 0B C0 or ax,ax ; Zero ?
273F:5949 74 08 jz loc_1144 ; Jump if zero
273F:594B 3D 0003 cmp ax,3
273F:594E 74 AB je loc_ret_1140 ; Jump if equal
-273F:5950 E9 FC2E jmp sub_129
+273F:5950 E9 FC2E jmp character_walking_end
273F:5953 loc_1144: ; xref 273F:5949
273F:5953 53 push bx
-273F:5954 E8 FC2A call sub_129 ; (5581)
+273F:5954 E8 FC2A call character_walking_end
273F:5957 5B pop bx
273F:5958 E8 ED93 call character_face_hotspot
273F:595B E8 FC98 call hotspot_get_action_sequence
@@ -13557,7 +13568,7 @@ TEMP_DEST_X2 equ 10h
look_proc proc near
-273F:5968 E8 FC16 call sub_129 ; (5581)
+273F:5968 E8 FC16 call character_walking_end
273F:596B 8B 44 06 mov ax, [si+6]
273F:596E E8 B3B0 call get_room_resource_pointer4
273F:5971 8B 5C 04 mov bx, [si+RH_DESC_ID]
@@ -13574,7 +13585,7 @@ TEMP_DEST_X2 equ 10h
status_proc proc near
-31E4:5978 E8 06 FC call sub_129
+31E4:5978 E8 06 FC call character_walking_end
31E4:597B 80 0E 11D0 01 or menubar_state, 1
31E4:5980 FF 16 075E call [show_cursor_proc]
31E4:5984 B0 09 mov al, 9
@@ -13691,7 +13702,7 @@ TEMP_DEST_X2 equ 10h
273F:5A87 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
273F:5A8A 8B 44 4E mov ax, [si+HS_V4E]
273F:5A8D 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-273F:5A90 E9 FAEE jmp sub_129
+273F:5A90 E9 FAEE jmp character_walking_end
return_proc endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
@@ -13715,12 +13726,12 @@ TEMP_DEST_X2 equ 10h
273F:5AB0 3B 45 1B cmp ax,[di+1Bh]
273F:5AB3 75 12 jne loc_1155 ; Jump if not equal
273F:5AB5 A1 BA1B mov ax, active_hotspot_id
-273F:5AB8 E8 EAEC call sub_107 ; (45A7)
+273F:5AB8 E8 EAEC call hotspot_action_precheck
273F:5ABB 0B C0 or ax,ax ; Zero ?
273F:5ABD 74 0B jz loc_1156 ; Jump if zero
273F:5ABF 3C 03 cmp al,3
273F:5AC1 74 03 je loc_ret_1154 ; Jump if equal
-273F:5AC3 E9 FABB jmp sub_129
+273F:5AC3 E9 FABB jmp character_walking_end
273F:5AC6 loc_ret_1154: ; xref 273F:5AC1, 5AF5, 5B3A
273F:5AC6 C3 retn
@@ -13729,7 +13740,7 @@ TEMP_DEST_X2 equ 10h
273F:5ACA loc_1156: ; xref 273F:5ABD
273F:5ACA E8 EC21 call character_face_hotspot
273F:5ACD 53 push bx
-273F:5ACE E8 FAB0 call sub_129 ; (5581)
+273F:5ACE E8 FAB0 call character_walking_end
273F:5AD1 5B pop bx
273F:5AD2 81 7D 1B 03E9 cmp word ptr [di+1Bh],3E9h
273F:5AD7 75 09 jne loc_1157 ; Jump if not equal
@@ -13782,17 +13793,17 @@ TEMP_DEST_X2 equ 10h
273F:5B2C loc_1162: ; xref 273F:5B21
273F:5B2C 5E pop si
273F:5B2D A1 BA19 mov ax, use_hotspot_id
-273F:5B30 E8 EA74 call sub_107 ; (45A7)
+273F:5B30 E8 EA74 call hotspot_action_precheck
273F:5B33 0B C0 or ax,ax ; Zero ?
273F:5B35 74 08 jz loc_1163 ; Jump if zero
273F:5B37 3D 0003 cmp ax,3
273F:5B3A 74 8A je loc_ret_1154 ; Jump if equal
-273F:5B3C E9 FA42 jmp sub_129
+273F:5B3C E9 FA42 jmp character_walking_end
273F:5B3F loc_1163: ; xref 273F:5B14, 5B2A, 5B35
273F:5B3F C6 44 2A 00 mov byte ptr [si+2Ah],0
273F:5B43 E8 EBA8 call character_face_hotspot
273F:5B46 53 push bx
-273F:5B47 E8 FA37 call sub_129 ; (5581)
+273F:5B47 E8 FA37 call character_walking_end
273F:5B4A 5B pop bx
273F:5B4B E8 FAA8 call hotspot_get_action_sequence
273F:5B4E 79 03 jns loc_1164 ; Jump if not sign
@@ -13837,15 +13848,15 @@ TEMP_DEST_X2 equ 10h
273F:5B90 E9 0179 jmp loc_1187 ; (5D0C)
273F:5B93 loc_1168: ; xref 273F:5B8E
273F:5B93 A1 BA1B mov ax, active_hotspot_id
-273F:5B96 E8 EA0E call sub_107 ; (45A7)
+273F:5B96 E8 EA0E call hotspot_action_precheck
273F:5B99 0B C0 or ax,ax ; Zero ?
273F:5B9B 74 08 jz loc_1169 ; Jump if zero
273F:5B9D 3D 0003 cmp ax,3
273F:5BA0 74 CE je loc_ret_1167 ; Jump if equal
-273F:5BA2 E9 F9DC jmp sub_129
+273F:5BA2 E9 F9DC jmp character_walking_end
273F:5BA5 loc_1169: ; xref 273F:5B9B
273F:5BA5 53 push bx
-273F:5BA6 E8 F9D8 call sub_129 ; (5581)
+273F:5BA6 E8 F9D8 call character_walking_end
273F:5BA9 5B pop bx
273F:5BAA E8 EB41 call character_face_hotspot
273F:5BAD 81 3E BA1B 0412 cmp active_hotspot_id, 412h
@@ -13903,7 +13914,7 @@ TEMP_DEST_X2 equ 10h
273F:5C11 5B pop bx
273F:5C12 87 DE xchg bx,si
273F:5C14 53 push bx
-273F:5C15 E8 F969 call sub_129 ; (5581)
+273F:5C15 E8 F969 call character_walking_end
273F:5C18 5B pop bx
273F:5C19 E8 F9DA call hotspot_get_action_sequence
273F:5C1C 75 03 jnz loc_1176 ; Jump if not zero
@@ -13928,12 +13939,12 @@ TEMP_DEST_X2 equ 10h
273F:5C2B A3 BA19 mov use_hotspot_id, ax
273F:5C2E A3 BA1B mov active_hotspot_id, ax
273F:5C31 83 C5 02 add bp,2
-273F:5C34 E8 E970 call sub_107 ; (45A7)
+273F:5C34 E8 E970 call hotspot_action_precheck
273F:5C37 0B C0 or ax,ax ; Zero ?
273F:5C39 74 08 jz loc_1178 ; Jump if zero
273F:5C3B 3D 0003 cmp ax,3
273F:5C3E 74 E6 je loc_ret_1177 ; Jump if equal
-273F:5C40 E9 F93E jmp sub_129
+273F:5C40 E9 F93E jmp character_walking_end
273F:5C43 loc_1178: ; xref 273F:5C39
273F:5C43 B8 014B mov ax,14Bh
273F:5C46 8B 16 BA1B mov dx, active_hotspot_id
@@ -13958,7 +13969,7 @@ TEMP_DEST_X2 equ 10h
273F:5C75 5B pop bx
273F:5C76 E8 EA75 call character_face_hotspot
273F:5C79 53 push bx
-273F:5C7A E8 F904 call sub_129 ; (5581)
+273F:5C7A E8 F904 call character_walking_end
273F:5C7D 5B pop bx
273F:5C7E C6 44 2A 00 mov byte ptr [si+2Ah],0
273F:5C82 E8 F971 call hotspot_get_action_sequence
@@ -13988,15 +13999,15 @@ TEMP_DEST_X2 equ 10h
273F:5CAB 8B 07 mov ax,[bx]
273F:5CAD A3 BA1B mov active_hotspot_id, ax
273F:5CB0 83 C5 04 add bp,4
-273F:5CB3 E8 E8F1 call sub_107 ; (45A7)
+273F:5CB3 E8 E8F1 call hotspot_action_precheck
273F:5CB6 0B C0 or ax,ax ; Zero ?
273F:5CB8 74 08 jz loc_1183 ; Jump if zero
273F:5CBA 3D 0003 cmp ax,3
273F:5CBD 74 4C je loc_ret_1186 ; Jump if equal
-273F:5CBF E9 F8BF jmp sub_129
+273F:5CBF E9 F8BF jmp character_walking_end
273F:5CC2 loc_1183: ; xref 273F:5CB8
273F:5CC2 53 push bx
-273F:5CC3 E8 F8C7 call sub_130 ; (558D)
+273F:5CC3 E8 F8C7 call character_walking_end_2
273F:5CC6 5B pop bx
273F:5CC7 E8 EA24 call character_face_hotspot
273F:5CCA BB 0009 mov bx,9
@@ -14039,7 +14050,7 @@ TEMP_DEST_X2 equ 10h
273F:5D0C loc_1187: ; xref 273F:5AC7, 5B90, 5D2F
273F:5D0C B8 000F mov ax,0Fh ; "What???"
273F:5D0F E8 069F call display_message_dialog_3
-273F:5D12 E9 F86C jmp sub_129
+273F:5D12 E9 F86C jmp character_walking_end
drink_proc proc near
273F:5D15 8B DD mov bx,bp
@@ -14055,7 +14066,7 @@ TEMP_DEST_X2 equ 10h
273F:5D2C 3B 47 06 cmp ax,[bx+HS_ROOM_NUM] ; character's inventory
273F:5D2F 75 DB jne loc_1187 ; Jump if not equal
273F:5D31 53 push bx
-273F:5D32 E8 F84C call sub_129 ; (5581)
+273F:5D32 E8 F84C call character_walking_end
273F:5D35 5B pop bx
273F:5D36 E8 F8BD call hotspot_get_action_sequence
273F:5D39 79 03 jns loc_1188 ; Jump if not sign
@@ -14105,10 +14116,10 @@ TEMP_DEST_X2 equ 10h
273F:5D75 83 C5 04 add bp,4
273F:5D78 A3 BA19 mov use_hotspot_id, ax
273F:5D7B A3 BA1B mov active_hotspot_id, ax
-273F:5D7E E8 E826 call sub_107 ; (45A7)
+273F:5D7E E8 E826 call hotspot_action_precheck
273F:5D81 0B C0 or ax,ax ; Zero ?
273F:5D83 75 03 jnz loc_1195 ; Jump if not zero
-273F:5D85 E9 F7F9 jmp sub_129
+273F:5D85 E9 F7F9 jmp character_walking_end
273F:5D88 loc_1195: ; xref 273F:5D83
273F:5D88 3D 0003 cmp ax,3
273F:5D8B 74 E3 je loc_ret_1194 ; Jump if equal
@@ -14125,13 +14136,13 @@ TEMP_DEST_X2 equ 10h
273F:5DA2 8B 07 mov ax,[bx]
273F:5DA4 A3 BA19 mov use_hotspot_id, ax
273F:5DA7 A3 BA1B mov active_hotspot_id, ax
-273F:5DAA E8 E7FA call sub_107 ; (45A7)
+273F:5DAA E8 E7FA call hotspot_action_precheck
273F:5DAD 0B C0 or ax,ax ; Zero ?
273F:5DAF 74 0B jz loc_1196 ; Jump if zero
273F:5DB1 3D 0003 cmp ax,3
273F:5DB4 74 AE je loc_ret_1192 ; Jump if equal
273F:5DB6 83 C5 0A add bp,0Ah
-273F:5DB9 E9 F7C5 jmp sub_129
+273F:5DB9 E9 F7C5 jmp character_walking_end
273F:5DBC loc_1196: ; xref 273F:5DAF
273F:5DBC A1 BA1B mov ax, active_hotspot_id
273F:5DBF 56 push si
@@ -14164,7 +14175,7 @@ TEMP_DEST_X2 equ 10h
273F:5DFC 5E pop si
273F:5DFD loc_1198: ; xref 273F:5DF0
273F:5DFD 83 C5 08 add bp,8
-273F:5E00 E9 F77E jmp sub_129
+273F:5E00 E9 F77E jmp character_walking_end
273F:5E03 loc_ret_1199: ; xref 273F:5DCB
273F:5E03 C3 retn
@@ -14174,7 +14185,7 @@ TEMP_DEST_X2 equ 10h
273F:5E09 89 44 42 mov [si+42h],ax
273F:5E0C C6 44 44 03 mov byte ptr [si+44h],3
273F:5E10 83 C5 04 add bp,4
-273F:5E13 E9 F76B jmp sub_129
+273F:5E13 E9 F76B jmp character_walking_end
;* No entry point to code
273F:5E16 8B DE mov bx, si
273F:5E18 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
@@ -14249,7 +14260,7 @@ TEMP_DEST_X2 equ 10h
273F:5EB9 C7 44 4A 0000 mov word ptr [si+HS_V4A], 0
273F:5EBE F6 44 44 FF test byte ptr [si+HS_V44], 0FFh
273F:5EC2 75 07 jnz loc_1205 ; Jump if not zero
-273F:5EC4 E8 E4C0 call sub_94 ; (4387)
+273F:5EC4 E8 E4C0 call character_pathfind_clear
273F:5EC7 C3 retn
273F:5EC8 loc_1204: ; xref 273F:5EB7
273F:5EC8 E9 E695 jmp loc_869 ; (4560)
@@ -14268,7 +14279,7 @@ TEMP_DEST_X2 equ 10h
273F:5EEC 83 6C 42 01 sub word ptr [si+HS_V42], 1
273F:5EF0 C3 retn
273F:5EF1 loc_1206: ; xref 273F:5EE1
-273F:5EF1 E8 E493 call sub_94 ; (4387)
+273F:5EF1 E8 E493 call character_pathfind_clear
273F:5EF4 C6 44 44 00 mov byte ptr [si+HS_V44], 0
273F:5EF8 F6 44 FF FF test byte ptr [si-1],0FFh
273F:5EFC 74 17 jz loc_ret_1207 ; Jump if zero
@@ -14320,7 +14331,7 @@ TEMP_DEST_X2 equ 10h
273F:5F53 B8 03E8 mov ax, PLAYER_HOTSPOT_ID
273F:5F56 E8 EFF9 call pathfind_reset
273F:5F59 C6 07 04 mov byte ptr [bx], CHAR_ACTION_PROCESSING_PATH
-273F:5F5C E8 E428 call sub_94 ; (4387)
+273F:5F5C E8 E428 call character_pathfind_clear
; Jump point here calculates one sequence of the path finding required to get
; the player to a given destination
@@ -14391,7 +14402,7 @@ TEMP_DEST_X2 equ 10h
; The buffer pointed to by HS[HS_MOVEMENT_SRC_OFFSET] now contains a set of
; direction numbers and steps necessary to get the player to the destination
-; they've clicked on - carry on to st
+; they've clicked on
; Code jumps to this point to handle the continual walking
@@ -17873,7 +17884,7 @@ TEMP_DEST_X2 equ 10h
273F:7751 73 37 jae loc_1507 ; Jump if above or =
273F:7753 8B 77 19 mov si,[bx+19h]
273F:7756 8B FB mov di,bx
-273F:7758 E8 CC2C call sub_94 ; (4387)
+273F:7758 E8 CC2C call character_pathfind_clear
273F:775B C7 44 06 0018 mov word ptr [si+6],18h
273F:7760 C7 47 0E 0018 mov word ptr [bx+0Eh],18h
273F:7765 C7 44 0D 00C0 mov word ptr [si+0Dh],0C0h
@@ -19867,7 +19878,7 @@ TEMP_DEST_X2 equ 10h
273F:8539 D1 E2 shl dx,1 ; Shift w/zeros fill
273F:853B 81 C2 0088 add dx,88h
273F:853F B0 01 mov al,1
-273F:8541 E8 CFD5 call sub_128 ; (5519)
+273F:8541 E8 CFD5 call character_start_walking
273F:8544 33 C9 xor cx,cx ; Zero register
273F:8546 5B pop bx
273F:8547 C3 retn
@@ -20290,7 +20301,7 @@ TEMP_DEST_X2 equ 10h
273F:881C 81 3E 6CFE 00B4 cmp word ptr ds:[6CFEh],0B4h ; (273F:6CFE=76Eh)
273F:8822 73 14 jae loc_ret_1689 ; Jump if above or =
273F:8824 BD 706C mov bp,706Ch
-273F:8827 E9 CD57 jmp sub_129
+273F:8827 E9 CD57 jmp character_walking_end
;* No entry point to code
273F:882A E8 D94B call talk_countdown_handler
273F:882D F7 44 1F FFFF test word ptr [si+1Fh],0FFFFh
@@ -20495,7 +20506,7 @@ TEMP_DEST_X2 equ 10h
273F:89B7 D1 E3 shl bx,1 ; Shift w/zeros fill
273F:89B9 8B 9F 5050 mov bx,word ptr ds:[5050h][bx] ; (273F:5050=34E8h)
273F:89BD E8 00C8 call sub_220 ; (8A88)
-273F:89C0 E9 CBCA jmp sub_130
+273F:89C0 E9 CBCA jmp character_walking_end_2
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
@@ -20520,12 +20531,12 @@ TEMP_DEST_X2 equ 10h
273F:89EB 74 13 je loc_1708 ; Jump if equal
273F:89ED loc_1706: ; xref 273F:89E3
273F:89ED A1 BA19 mov ax, use_hotspot_id
-273F:89F0 E8 BBB4 call sub_107 ; (45A7)
+273F:89F0 E8 BBB4 call hotspot_action_precheck
273F:89F3 0B C0 or ax,ax ; Zero ?
273F:89F5 74 09 jz loc_1708 ; Jump if zero
273F:89F7 3D 0003 cmp ax,3
273F:89FA 74 03 je loc_ret_1707 ; Jump if equal
-273F:89FC E9 CB82 jmp sub_129
+273F:89FC E9 CB82 jmp character_walking_end
273F:89FF loc_ret_1707: ; xref 273F:89FA
273F:89FF C3 retn
@@ -20538,12 +20549,12 @@ TEMP_DEST_X2 equ 10h
273F:8A0B 74 08 jz loc_1710 ; Jump if zero
273F:8A0D E8 B424 call sequence_execute
273F:8A10 74 03 jz loc_1710 ; Jump if zero
-273F:8A12 E9 CB6C jmp sub_129
+273F:8A12 E9 CB6C jmp character_walking_end
273F:8A15 loc_1710: ; xref 273F:8A0B, 8A10
273F:8A15 E8 0009 call sub_218 ; (8A21)
273F:8A18 E8 0026 call talk_get_record
273F:8A1B E8 006A call sub_220 ; (8A88)
-273F:8A1E E9 CB6C jmp sub_130
+273F:8A1E E9 CB6C jmp character_walking_end_2
talk_to_proc endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
@@ -25137,7 +25148,7 @@ TEMP_DEST_X2 equ 10h
31E4:11DA 00 mouse_buttons2 db 0
31E4:11DB 0000 char_dest_x dw 0
31E4:11DD 0000 char_dest_y dw 0
-31E4:11DF 0000 data_632 dw 0
+31E4:11DF 0000 cursor_centroid dw 0
31E4:11E1 0000 cursor_index dw 0
31E4:11E3 00 cursor_index_new db 0
31E4:11E4 0000 hotspot_name_id2 dw 0
@@ -25412,8 +25423,9 @@ TEMP_DEST_X2 equ 10h
31E4:1926 00 data_669 db 0 ; xref 273F:47F3, 273F:4829
; 273F:A00C
31E4:1927 0000 active_animation_offset dw 0
-31E4:1929 96 00 24 81 02 00 db 96h, 00h, 24h, 81h, 02h, 00h
-31E4:192F 00 db 00h
+
+31E4:1929 96 00 24 81 sub_129_list db 96h, 00h, 24h, 81h
+31E4:192D 02 00 00 db 02h, 00h, 00h
31E4:1930 0051[00] db 81 dup (0)
31E4:1981 E3 00 DA 80 01 00 db 0E3h, 00h,0DAh, 80h, 01h, 00h
31E4:1987 44 01 DA 00 03 00 db 44h, 01h,0DAh, 00h, 03h, 00h
@@ -26294,7 +26306,7 @@ TEMP_DEST_X2 equ 10h
31E4:3940 0000 pathfind_buffer_end dw 0
31E4:3942 0000 pathfind_sp dw 0
31E4:3944 0000 pathfind_v2 dw 0
-31E4:3946 0000 pathfind_v3 db 0
+31E4:3946 0000 pathfind_in_progress db 0
31E4:3947 003C[00] db 60 dup (0)
31E4:3983 000A[00] player_pathfind_data dw 5 dup (0)
@@ -27670,7 +27682,7 @@ TEMP_DEST_X2 equ 10h
31E4:6CEF 00 player_hotspot_rec db 0
31E4:6CF0 00 00 40 57 6D db 00h, 00h, 40h, 57h, 6Dh
-31E4:6CF5 0001 data_896 dw 1 ; xref 273F:13B5
+31E4:6CF5 0001 player_room_number dw 1
31E4:6CF7 00 67 71 db 00h, 67h, 71h
31E4:6CFA 0000 data_897 dw 0
31E4:6CFC 0110 data_898 dw 110h
@@ -31603,23 +31615,25 @@ TEMP_DEST_X2 equ 10h
31E4:BC3D 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
31E4:BC43 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
31E4:BC49 00 00 num_groats dw 0
-31E4:BC4B 18 04 43 01 db 18h, 04h, 43h, 01h
-31E4:BC4F 23 81 21 27 44 01 db 23h, 81h, 21h, 27h, 44h, 01h
-31E4:BC55 FB 80 22 27 95 00 db 0FBh, 80h, 22h, 27h, 95h, 00h
-31E4:BC5B 05 81 1F 27 AC 00 db 05h, 81h, 1Fh, 27h,0ACh, 00h
-31E4:BC61 EB 80 20 27 AE 00 db 0EBh, 80h, 20h, 27h,0AEh, 00h
-31E4:BC67 3A 81 1E 27 ED 00 db 3Ah, 81h, 1Eh, 27h,0EDh, 00h
-31E4:BC6D 0C 81 3C 75 6D 01 db 0Ch, 81h, 3Ch, 75h, 6Dh, 01h
-31E4:BC73 0E 01 21 04 12 01 db 0Eh, 01h, 21h, 04h, 12h, 01h
-31E4:BC79 12 01 22 04 F0 00 db 12h, 01h, 22h, 04h,0F0h, 00h
-31E4:BC7F 0A 01 3B 75 2A 01 db 0Ah, 01h, 3Bh, 75h, 2Ah, 01h
-31E4:BC85 1B 81 1F 04 E6 00 db 1Bh, 81h, 1Fh, 04h,0E6h, 00h
-31E4:BC8B 31 01 16 27 9C 00 db 31h, 01h, 16h, 27h, 9Ch, 00h
-31E4:BC91 3A 81 11 27 E5 00 db 3Ah, 81h, 11h, 27h,0E5h, 00h
-31E4:BC97 25 01 12 27 E4 00 db 25h, 01h, 12h, 27h,0E4h, 00h
-31E4:BC9D FA db 0FAh
-31E4:BC9E loc_2353: ; xref 31E4:BCE2
-31E4:BC9E 00 5E 75 add [bp+75h],bl
+
+ hotspot_proximity_list
+31E4:BC4B 0418 0143 8123 dw 418h, 143h, 8123h
+31E4:BC51 2721 0144 80FB
+31E4:BC57 2722 0095 8105
+31E4:BC5D 271F 00AC 80EB
+31E4:BC63 2720 00AE 813A
+31E4:BC69 271E 00ED 810C
+31E4:BC6F 75#C 016D 010E
+31E4:BC75 0421 0112 0112
+31E4:BC7B 0422 00F0 010A
+31E4:BC81 753B 012A 811B
+31E4:BC87 041F 00E6 0131
+31E4:BC8D 2716 009C 813A
+31E4:BC93 2711 00E5 0125
+31E4:BC99 2712 00E4 00FA
+...more...
+
+31E4:BC9E 5E 75 add [bp+75h],bl
31E4:BCA1 59 pop cx
31E4:BCA2 01 31 add [bx+di],si
31E4:BCA4 loc_2354: ; xref 31E4:BCE8
diff --git a/engines/lure/diassembly/Lure_notes.txt b/engines/lure/diassembly/Lure_notes.txt
index 42facfaf90..ca737ab459 100644
--- a/engines/lure/diassembly/Lure_notes.txt
+++ b/engines/lure/diassembly/Lure_notes.txt
@@ -93,21 +93,35 @@ character_find_impinging_chars - Scans through the animation list for any
characters whose position is impinging that of the given character
Input: di = Character animation slot
+character_pathfind_clear - Checks the pathfinding set flag for the given hotspot,
+ and if it set (ie. the hotspot has it's covering cells in the
+ pathfinding layer for the room set), then clears the flag and
+ clears the accompanying pathfinding cells
+ Input: ax = Character Id
+ bx = Destination X
+ cx = Destination Y
+
+
character_pathfind - Handles pathfinding a segment of a walking path to a
given destination
Input: ax = character Id
bx = Dest X Pos
cx = Dest Y Pos
dl = Hotspot[4Ch]
- Output: added segment to the line path in data Hotspot[HS_MOVEMENT_SRC_OFFSET]
+ Output: bx = Pointer to list of walking segments that gets built
ax = 1 => end of pathfinding reached, 0 => pathfinding still needed
character_reset_direction - Rounds off the given character's position, and sets
their current frame to the default frame for the character's
current direction
- Input: si = Character hotspot Id
+ Input: si = Character hotspot record
di = Character animation slot
+character_start_walking - Starts the character walking towards a given position
+ Input: si = Character hotspot record
+ cx = Destination X
+ dx = Destination Y
+
character_translate_movements - Translates a set of instructions of movement
instructions into a set of offsets to movement records
(containing frame number sequence and position changes) for each
@@ -123,6 +137,14 @@ character_update_frame - Handles updating a character's current frame in a
Output: ax = 1 => for end of the path finding list (ie. at destination),
0 => Some walking still remaining
+character_walking_check - Scans through a list for X/Y proximity for different
+ hotspots, and if the character is not within proximity, starts
+ the character walking to it
+ Input: si = character hotspot record
+ di = character animation slot,
+ bx = used object hotspot record
+ Output: ax => 1 = No movement was required, 0 = Wakling has started
+
characters_impinging_check - Checks to see if the given character is close enough
to the player
Input: bx = First character hotspot record
@@ -228,6 +250,13 @@ get_room_resource_pointer3/4 - Gets a pointer to the header entry for a given
Input: bx = Id for _pointer3, ax = Id for _pointer4
Output: si = pointer to header entry
+hotspot_action_precheck - Does the common prechecking for hotspot actions,
+ such as whether the player needs to walk to it or not
+ Input: ax = Hotspot Id to be used
+ si = Character hotspot record
+ di = Character animation slot
+ Output: al = 3 => Player is starting to walk to hotspot
+
hotspot_get_action_sequence - Returns a script offset for the given action on
a hotspot
Input: bx = Hotspot record
@@ -776,6 +805,9 @@ The format of hotspots are as follows:
45h 2 Hotspot Script Id to use. I'm not yet sure why a
different field that 2Dh/2Fh to use
47h 2 Hotspot Id to use.
+ 49h 1 Flags whether the hotspot has currently got the cells
+ of the pathfinding (walkable areas) layer that it's
+ base occupies as covered
50h 2 Character direction: 80h=up, 40h=down, 20h=left, 10h=right
52h 2 Hotspot Id for selected hotspot
54h 2 X ending position for character + 80h - 10h
@@ -898,8 +930,8 @@ aren't necessarily animated.
sets this back to zero
11h 2 Tick handler proc offset - called every frame for hotspots
loaded into the animation table where [0Ch] is non-zero
- 13h 2 Copy of the animation width - this the height copy are
- used in some areas to, for example, varying the strict
+ 13h 2 Copy of the animation width - this and the height copy are
+ used in some areas to, for example, vary the strict
Y ordering of objects in a scene (for example, Ratpouch
has a larger height copy to make him appear on top of
the rack rather than behind it).