[Scummvm-cvs-logs] SF.net SVN: scummvm: [21470] scummvm/trunk/engines/lure/diassembly
dreammaster at users.sourceforge.net
dreammaster at users.sourceforge.net
Mon Mar 27 13:34:13 CEST 2006
Revision: 21470
Author: dreammaster
Date: 2006-03-27 13:32:43 -0800 (Mon, 27 Mar 2006)
ViewCVS: http://svn.sourceforge.net/scummvm/?rev=21470&view=rev
Log Message:
-----------
Further progress on disassembling pathfinding and 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-27 18:20:19 UTC (rev 21469)
+++ scummvm/trunk/engines/lure/diassembly/LURE.ASM 2006-03-27 21:32:43 UTC (rev 21470)
@@ -191,7 +191,7 @@
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 @@
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 \xFABE 4B93 mov si, offset action_name
@@ -3193,7 +3193,9 @@
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 \xFABE 6CEF mov si, offset player_hotspot_rec
@@ -3204,10 +3206,12 @@
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 \xFABE 6CEF mov si, offset player_hotspot_rec
273F:13E4 8B DE mov bx,si
@@ -4732,7 +4736,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
; 7758
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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+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
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
@@ -10430,7 +10434,7 @@
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 @@
; 5B96, 5C34, 5CB3, 5D7E, 5DAA, 89F0
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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
+ 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 @@
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 @@
;
; 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 @@
273F:45EF 72 09 jb loc_881 ; Jump if below
273F:45F1 loc_880: ; xref 273F:4606, 463B, 4641, 4647
; 464F
-273F:45F1 \xFAE8 0E95 call sub_127 ; (5489)
+273F:45F1 \xFAE8 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 @@
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 @@
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
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\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
@@ -11045,7 +11049,7 @@
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_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 \xFABE 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 @@
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 @@
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 \xFA81 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
; Called from: 273F:4F11
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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: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
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
@@ -12148,7 +12160,7 @@
273F:4F53 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
273F:4F56 75 0E jne loc_1019 ; Jump if not equal
273F:4F58 \xFABB 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
; Called from: 273F:45F1
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:5489 sub_127 proc near
-273F:5489 loc_1091: ; xref 273F:5478
+ character_walking_check proc near
273F:5489 57 push di
-273F:548A \xFABF BC4B mov di,data_495e ; (273F:BC4B=0)
+273F:548A \xFABF 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 \xFAF7 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 \xFAF7 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
;\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: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 @@
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
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\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
@@ -12958,16 +12970,16 @@
; 5968, 5ACE, 5B47, 5BA6, 5C15, 5C7A, 5D32
;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:5581 sub_129 proc near
+ character_walking_end proc near
273F:5581 \xFA81 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)
;\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
;
-273F:558D sub_130:
-273F:558D \xFA33 C0 xor ax,
+ character_walking_end_2:
+273F:558D \xFA33 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,9 +12987,8 @@
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
-
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\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
;
@@ -13070,7 +13081,7 @@
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
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\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
@@ -13087,7 +13098,7 @@
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
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
@@ -13217,15 +13228,15 @@
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 @@
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 @@
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 @@
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 @@
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
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
@@ -13428,12 +13439,12 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
@@ -13715,12 +13726,12 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
; 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 @@
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 @@
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 @@
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 @@
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
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\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
@@ -20520,12 +20531,12 @@
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 @@
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
;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
@@ -25137,7 +25148,7 @@
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 @@
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 @@
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 @@
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 @@
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
Modified: scummvm/trunk/engines/lure/diassembly/Lure_notes.txt
===================================================================
--- scummvm/trunk/engines/lure/diassembly/Lure_notes.txt 2006-03-27 18:20:19 UTC (rev 21469)
+++ scummvm/trunk/engines/lure/diassembly/Lure_notes.txt 2006-03-27 21:32:43 UTC (rev 21470)
@@ -93,21 +93,35 @@
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 @@
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 @@
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 @@
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 @@
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).
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