aboutsummaryrefslogtreecommitdiff
path: root/engines/lure
diff options
context:
space:
mode:
authorPaul Gilbert2006-04-25 22:38:00 +0000
committerPaul Gilbert2006-04-25 22:38:00 +0000
commit14beeb3492e7d46515d003399ecdbc393d3e1a0f (patch)
treec103f18a7e29d8f52472d33aa7ec24fc847a46f1 /engines/lure
parent3b35bc353cbe13b8e4faf4f42aa48c17565db2b4 (diff)
downloadscummvm-rg350-14beeb3492e7d46515d003399ecdbc393d3e1a0f.tar.gz
scummvm-rg350-14beeb3492e7d46515d003399ecdbc393d3e1a0f.tar.bz2
scummvm-rg350-14beeb3492e7d46515d003399ecdbc393d3e1a0f.zip
Added disassembly of door close support routines and other miscellaneous action support code
svn-id: r22162
Diffstat (limited to 'engines/lure')
-rw-r--r--engines/lure/diassembly/LURE.ASM506
-rw-r--r--engines/lure/diassembly/Lure_notes.txt17
2 files changed, 286 insertions, 237 deletions
diff --git a/engines/lure/diassembly/LURE.ASM b/engines/lure/diassembly/LURE.ASM
index 664d615105..8304cf9295 100644
--- a/engines/lure/diassembly/LURE.ASM
+++ b/engines/lure/diassembly/LURE.ASM
@@ -145,6 +145,7 @@ ANIM_HOTSPOT_OFFSET equ 19h
ANIM_HOTSPOT_ID equ 1Bh
ANIM_LAYER1_SKIP equ 1Dh
ANIM_VOICE_CHAR_ID equ 1Eh
+ANIM_V20 equ 20h
ANIM_CHAR_RECT_Y equ 22h
ANIM_VOICE_CTR equ 24h
ANIM_DIRECTION equ 26h
@@ -182,7 +183,7 @@ HS_SCRIPT_OFFSET equ 24h
HS_MOVEMENT_OFFSET equ 24h
HS_STEP_CTR equ 26h
HS_FRAME_OFFSET equ 28h
-HS_FRAME_NUM equ 2Ah
+HS_ACTION_CTR equ 2Ah
HS_V2B equ 2Bh
HS_HOTSPOT_SCRIPT_ID equ 2Dh
HS_USE_HOTSPOT_ID equ 2Fh
@@ -351,6 +352,11 @@ PATHFIND_Y_CHANGE1 equ 16h
PATHFIND_X_CHANGE2 equ 18h
PATHFIND_Y_CHANGE2 equ 1Ah
+WALKTO_RECORD_SIZE equ 6
+WALKTO_HOTSPOT_ID equ 0
+WALKTO_X equ 2
+WALKTO_Y equ 4
+
; The following equates show data references outside the range of the program.
= 0000 data_1e equ 0 ; (0000:0000=30h)
@@ -386,7 +392,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
= 2800 data_37e equ 2800h ;*(0000:2800=1F12h)
= 2B01 data_38e equ 2B01h ;*(0000:2B01=663Eh)
- = 30D4 data_40e equ 30D4h ;*(0000:30D4=6AEh)
+
= 30D6 data_41e equ 30D6h ;*(0000:30D6=81h)
= 31E4 data_42e equ 31E4h ;*(0000:31E4=830Fh)
= 3350 data_43e equ 3350h ;*(0000:3350=0C033h)
@@ -421,7 +427,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
= 31E4 data_70e equ 31E4h ;*(0874:31E4=2E11h)
= 3350 data_71e equ 3350h ;*(0874:3350=9A90h)
= 3356 data_72e equ 3356h ;*(0874:3356=289Ah)
- = 3358 data_73e equ 3358h ;*(0874:3358=5E69h)
+
= 335A data_74e equ 335Ah ;*(0874:335A=0C70Fh)
= 335E data_75e equ 335Eh ;*(0874:335E=0FF47h)
= 3360 data_76e equ 3360h ;*(0874:3360=0FFh)
@@ -436,7 +442,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
= 3379 data_85e equ 3379h ;*(0874:3379=0C722h)
= 337B data_86e equ 337Bh ;*(0874:337B=5806h)
= 337E data_88e equ 337Eh ;*(0874:337E=0)
- = 3380 data_89e equ 3380h ;*(0874:3380=6F6h)
+
= 33DC data_91e equ 33DCh ;*(0874:33DC=11A2h)
= 33DE data_92e equ 33DEh ;*(0874:33DE=0A21Dh)
@@ -1456,12 +1462,14 @@ PATHFIND_Y_CHANGE2 equ 1Ah
; allocate memory, bx=bytes/16
273F:07ED vga_no_implementation retn
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
+ ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
+ ; SUBROUTINE
;
; Called from: 273F:6614
+ ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:07EE sub_11:
-273F:07EE C6 06 38B0 01 mov byte ptr ds:[38B0h],1 ; (273F:38B0=0EAh)
+ sub_11 proc near
+273F:07EE C6 06 38B0 01 mov data_781, 1
273F:07F3 80 0E 11D0 01 or menubar_state, 1 ; (273F:11D0=56h)
273F:07F8 FF 16 075E call [show_cursor_proc]
273F:07FC 8C DD mov bp,ds
@@ -1493,7 +1501,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:0853 26: A3 336A mov es:data_79e,ax ; (0874:336A=7500h)
273F:0857 A1 0748 mov ax, screen_width
273F:085A 26: A3 3374 mov es:data_83e,ax ; (0874:3374=1EA1h)
-273F:085E A1 076A mov ax, display_character_proc
+273F:085E A1 076A mov ax, display_character_proc
273F:0861 26: A3 336C mov es:data_80e,ax ; (0874:336C=9A07h)
273F:0865 A1 074A mov ax, char_width
273F:0868 26: A3 336E mov es:data_81e,ax ; (0874:336E=8090h)
@@ -1509,7 +1517,8 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:0888 06 push es
273F:0889 1F pop ds
273F:088A C3 retn
-
+ sub_11 endp
+
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; JUMP POINT
;
@@ -1517,7 +1526,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:088B ú8E C5 action_look_2: mov es,bp
273F:088D úBF 65F3 mov di, offset player_action_support_record
-273F:0890 úBE 3382 mov si, offset data_770
+273F:0890 úBE 3382 mov si, offset data_3382
273F:0893 F7 04 FFFF test word ptr [si],0FFFFh
273F:0897 78 37 js loc_65 ; Jump if sign=1
273F:0899 loc_63: ; xref 273F:089F
@@ -1534,7 +1543,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:08AB A3 1924 mov hotspot_id, ax
273F:08AE úBE 6CEF mov si, offset player_hotspot_rec
273F:08B1 89 44 52 mov [si+HS_DEST_HOTSPOT],ax
-273F:08B4 88 44 2A mov [si+2Ah],al
+273F:08B4 88 44 2A mov [si+HS_ACTION_CTR],al
273F:08B7 88 44 FF mov [si-1],al
273F:08BA 8B DE mov bx,si
273F:08BC 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
@@ -2390,7 +2399,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:0DAF sub_34 proc near
273F:0DAF C7 06 31E4 0000 mov word ptr ds:[31E4h],0 ; (273F:31E4=0E4h)
-273F:0DB5 C7 06 30D4 0000 mov word ptr ds:[30D4h],0 ; (273F:30D4=0A311h)
+273F:0DB5 C7 06 30D4 0000 mov hotspot_display_buffer, 0
273F:0DBB 2D 0001 sub ax,1
273F:0DBE 33 DB xor bx,bx ; Zero register
273F:0DC0 3C 10 cmp al,10h
@@ -3164,7 +3173,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:1334 úBE 6CEF mov si, offset player_hotspot_rec
273F:1337 33 C0 xor ax,ax ; Zero register
273F:1339 89 44 52 mov [si+HS_DEST_HOTSPOT],ax
-273F:133C 88 44 2A mov [si+2Ah],al
+273F:133C 88 44 2A mov [si+HS_ACTION_CTR], al
273F:133F 89 44 42 mov [si+42h],ax
273F:1342 88 44 44 mov [si+44h],al
273F:1345 8B DE mov bx,si
@@ -3252,7 +3261,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:1411 89 7F 01 mov [bx+1],di
273F:1414 89 05 mov [di],ax
273F:1416 88 44 FF mov [si-1],al
-273F:1419 88 44 2A mov [si+2Ah],al
+273F:1419 88 44 2A mov [si+HS_ACTION_CTR],al
273F:141C 89 44 42 mov [si+42h],ax
273F:141F 88 44 44 mov [si+44h],al
273F:1422 88 44 FF mov [si-1],al
@@ -10458,8 +10467,8 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:43D0 75 03 jnz loc_846 ; Is width < 8 pixels?
273F:43D2 BA 0001 mov dx, 1 ; Yes, default to 1 (8 pixels)
273F:43D5 loc_846:
-273F:43D5 2D 0010 sub ax, 10h ; Is left <= 128
-273F:43D8 73 0A jnc loc_847 ; Jump if carry=0
+273F:43D5 2D 0010 sub ax, 10h ; Is left < 0
+273F:43D8 73 0A jnc loc_847 ; Jump if not
273F:43DA F7 D8 neg ax
273F:43DC 2B D0 sub dx, ax
273F:43DE 72 2D jc loc_850 ; Exit if offscreen to left
@@ -10468,7 +10477,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:43E4 loc_847:
273F:43E4 8B E8 mov bp, ax
273F:43E6 03 EA add bp, dx ; Add width
-273F:43E8 83 ED 29 sub bp, 29h
+273F:43E8 83 ED 29 sub bp, ROOM_PATHS_WIDTH+1
273F:43EB 72 09 jc loc_848 ; Jump if on screen
273F:43ED 83 C5 01 add bp, 1
273F:43F0 2B D5 sub dx, bp
@@ -10721,7 +10730,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:4552 C6 07 02 mov byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
273F:4555 8B 44 06 mov ax, [si+HS_ROOM_NUM]
273F:4558 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
-273F:455B C6 44 2A 00 mov byte ptr [si+HS_FRAME_NUM], 0
+273F:455B C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
273F:455F C3 retn
seq_method_48 endp
@@ -10831,9 +10840,9 @@ PATHFIND_Y_CHANGE2 equ 1Ah
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:45DF F6 44 2A FF test byte ptr [si+HS_ACTION_CTR], 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
+273F:45E5 C6 44 2A 01 mov byte ptr [si+HS_ACTION_CTR], 1
273F:45E9 81 3E BA1B 0408 cmp active_hotspot_id, 408h
273F:45EF 72 09 jb loc_881 ; Jump if below
273F:45F1 loc_880: ; xref 273F:4606, 463B, 4641, 4647
@@ -10854,7 +10863,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:4610 BB 0005 mov bx,5
273F:4613 E8 1D8C call display_message_dialog_2
273F:4616 5B pop bx
-273F:4617 C7 44 42 0004 mov word ptr [si+42h],4
+273F:4617 C7 44 42 0004 mov word ptr [si+HS_V42],4
273F:461C loc_882: ; xref 273F:460D
273F:461C C7 47 2B 002A mov word ptr [bx+HS_V2B], 2Ah
273F:4621 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
@@ -10862,8 +10871,8 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:4627 B8 0003 mov ax,3
273F:462A C3 retn
273F:462B loc_883: ; xref 273F:45E3
-273F:462B 80 44 2A 01 add byte ptr [si+HS_FRAME_NUM], 1
-273F:462F 80 7C 2A 06 cmp byte ptr [si+HS_FRAME_NUM], 6
+273F:462B 80 44 2A 01 add byte ptr [si+HS_ACTION_CTR], 1
+273F:462F 80 7C 2A 06 cmp byte ptr [si+HS_ACTION_CTR], 6
273F:4633 73 41 jae loc_887 ; Jump if above or =
273F:4635 81 3E BA1B 0408 cmp active_hotspot_id, 408h
273F:463B 73 B4 jae loc_880 ; Jump if above or =
@@ -10875,18 +10884,18 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:464D 75 17 jne loc_886 ; Jump if not equal
273F:464F EB A0 jmp short loc_880 ; (45F1)
273F:4651 loc_884: ; xref 273F:45DD
-273F:4651 F6 44 2A FF test byte ptr [si+HS_FRAME_NUM],0FFh ; char has frame set?
+273F:4651 F6 44 2A FF test byte ptr [si+HS_ACTION_CTR],0FFh
273F:4655 75 07 jnz loc_885 ; Jump if yes
273F:4657 33 C0 xor ax, ax ; Zero register
273F:4659 53 push bx
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+HS_FRAME_NUM], 0
+273F:465E C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 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+HS_FRAME_NUM], 0
+273F:4666 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
273F:466A B8 000E mov ax,0Eh
273F:466D 53 push bx
273F:466E E8 1D40 call display_message_dialog_3
@@ -10894,7 +10903,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
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+HS_FRAME_NUM], 0
+273F:4676 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
273F:467A B8 000D mov ax, 0Dh
273F:467D 53 push bx
273F:467E E8 1D30 call display_message_dialog_3
@@ -10902,7 +10911,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
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+HS_FRAME_NUM], 0
+273F:4686 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 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
@@ -11002,7 +11011,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:470A 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
273F:470D 3D 03E8 cmp ax, PLAYER_HOTSPOT_ID
273F:4710 72 70 jb loc_903 ; Jump if below
-273F:4712 3D 0408 cmp ax,408h
+273F:4712 3D 0408 cmp ax, 408h
273F:4715 73 6B jae loc_903 ; Jump if above or =
273F:4717 53 push bx
273F:4718 8B DE mov bx, si
@@ -11014,7 +11023,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:4729 72 17 jb loc_897
273F:472B 5E pop si ; Non selectable hotspot
273F:472C 5F pop di
-273F:472D 8A 47 08 mov al, [bx+8]
+273F:472D 8A 47 08 mov al, [bx+HS_LOAD_FLAG]
273F:4730 88 45 26 mov [di+ANIM_DIRECTION], al
273F:4733 8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
273F:4736 3C 01 cmp al, FACING_DOWN
@@ -12885,18 +12894,18 @@ PATHFIND_Y_CHANGE2 equ 1Ah
character_walking_check proc near
273F:5489 57 push di
-273F:548A úBF BC4B mov di, offset hotspot_proximity_list
+273F:548A úBF BC4B mov di, offset hotspot_walkto_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 ; End of list reached?
+273F:5490 úF7 05 FFFF test word ptr [di+WALKTO_HOTSPOT_ID], 0FFFFh ; End of list reached?
273F:5494 74 4F jz loc_1094 ; Jump if yes
-273F:5496 3B 05 cmp ax, [di] ; Found entry for active hotspot?
+273F:5496 3B 05 cmp ax, [diWALKTO_HOTSPOT_ID] ; Found entry for active hotspot?
273F:5498 74 05 je loc_1093 ; Jump if yes
273F:549A 83 C7 06 add di, 6 ; Move to next record
273F: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:549F 8B 4D 02 mov cx, [di+WALKTO_X]
+273F:54A2 8B 55 04 mov dx, [di+WALKTO_Y]
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
@@ -13036,7 +13045,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
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:5592 88 44 2A mov [si+HS_ACTION_CTR], al
273F:5595 8B DE mov bx, si
273F:5597 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
273F:559A 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
@@ -13284,16 +13293,16 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:570F 5E pop si
273F:5710 A1 BA19 mov ax, use_hotspot_id
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:5716 0B C0 or ax, ax ; Execute?
+273F:5718 74 08 jz loc_1116 ; Jump if yes
+273F:571A 3D 0003 cmp ax, 3 ; Initial?
+273F:571D 74 47 je loc_ret_1119 ; Exit if not
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 character_walking_end
273F:5726 5B pop bx
-273F:5727 C6 44 2A 00 mov byte ptr [si+2Ah],0
+273F:5727 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
273F:572B E8 EFC0 call character_face_hotspot
273F:572E E8 FEC5 call hotspot_get_action_sequence
273F:5731 79 03 jns loc_1117 ; Jump if not sign
@@ -13301,7 +13310,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:5736 loc_1117: ; xref 273F:5731
273F:5736 74 0A jz loc_1118 ; Jump if zero
273F:5738 E8 E6F9 call sequence_execute
-273F:573B 3D 0001 cm5708p ax,1
+273F:573B 3D 0001 cmp ax,1
273F:573E 74 26 je loc_ret_1119 ; Jump if equal
273F:5740 73 2F jnc loc_1121 ; Jump if carry=0
273F:5742 loc_1118: ; xref 273F:5736
@@ -13310,13 +13319,13 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:5746 E8 1AA5 call room_exit_hs_get_pointer
273F:5749 5B pop bx
273F:574A 87 F3 xchg si,bx
-273F:574C F6 47 0C FF test byte ptr [bx+0Ch],0FFh
+273F:574C F6 47 0C FF test byte ptr [bx+REHS_EXIT_BLOCKED], 0FFh
273F:5750 74 14 jz loc_ret_1119 ; Jump if zero
-273F:5752 C6 47 0C 00 mov byte ptr [bx+0Ch],0
-273F:5756 81 7D 1B 03E8 cmp word ptr [di+1Bh], PLAYER_HOTSPOT_ID
+273F:5752 C6 47 0C 00 mov byte ptr [bx+REHS_EXIT_BLOCKED], 0
+273F:5756 81 7D 1B 03E8 cmp word ptr [di+ANIM_HOTSPOT_ID], PLAYER_HOTSPOT_ID
273F:575B 74 09 je loc_ret_1119 ; Jump if equal
-273F:575D C6 44 44 03 mov byte ptr [si+44h],3
-273F:5761 C7 44 42 0004 mov word ptr [si+42h],4
+273F:575D C6 44 44 03 mov byte ptr [si+HS_V44], 3
+273F:5761 C7 44 42 0004 mov word ptr [si+HS_V42], 4
273F:5766 loc_ret_1119: ; xref 273F:571D, 573E, 5750, 575B
273F:5766 C3 retn
@@ -13326,9 +13335,9 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:576B E8 0C43 call display_message_dialog_3
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:5771 F6 44 60 FF test byte ptr [si+HS_V60],0FFh
273F:5775 74 04 jz loc_1122 ; Jump if zero
-273F:5777 C6 44 60 04 mov byte ptr [si+60h],4
+273F:5777 C6 44 60 04 mov byte ptr [si+HS_V60],4
273F:577B loc_1122: ; xref 273F:5775
273F:577B E9 0C33 jmp display_message_dialog_3
open_proc endp
@@ -13348,9 +13357,9 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:578C BEB04C mov si, offset exit_hotspots_list
273F:578F E801EE call is_roomexit_hotspot
273F:5792 7516 jnz close_proc_2
-273F:5794 A119BA mov ax, [BA19]
+273F:5794 A119BA mov ax, use_hotspot_id
273F:5797 E8541A call room_exit_hs_get_pointer
-273F:579A F6440CFF test byte ptr [si+0Ch], 0FFh
+273F:579A F6440CFF test byte ptr [si+REHS_EXIT_BLOCKED], 0FFh
273F:579E 740A jz close_proc_2
273F:57A0 5E pop si
273F:57A1 B80300 mov ax, 3
@@ -13361,14 +13370,14 @@ PATHFIND_Y_CHANGE2 equ 1Ah
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:57B5 3D0300 cmp ax, 3
273F:57B8 7448 jz loc_ret_1127
273F:57BA E9C4FD jmp character_walking_end
273F:57BD loc_1123:
273F:57BD 53 push bx
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:57C2 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
273F:57C6 E8 EF25 call character_face_hotspot
273F:57C9 E8 FE2A call hotspot_get_action_sequence
273F:57CC 79 03 jns loc_1125 ; Jump if not sign
@@ -13384,19 +13393,19 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:57DC E8 1A0F call room_exit_hs_get_pointer
273F:57DF 5B pop bx
273F:57E0 87 DE xchg bx,si
-273F:57E2 F6 47 0C FF test byte ptr [bx+0Ch],0FFh
+273F:57E2 F6 47 0C FF test byte ptr [bx+REHS_EXIT_BLOCKED], 0FFh
273F:57E6 75 1A jnz loc_ret_1127 ; Jump if not zero
-273F:57E8 8B EB mov bp,bx
-
-273F:57EA 8B 5F 0D mov bx,[bx+0Dh]
-273F:57ED E8 1A7B call sub_183 ; (726B)
-273F:57F0 74 11 jz loc_1128 ; Jump if zero
-273F:57F2 8B DD mov bx,bp
-273F:57F4 8B 5F 0F mov bx,[bx+0Fh]
-273F:57F7 E8 1A71 call sub_183 ; (726B)
-273F:57FA 74 07 jz loc_1128 ; Jump if zero
+273F:57E8 8B EB mov bp, bx
+
+273F:57EA 8B 5F 0D mov bx, [bx+REHS_HOTSPOT1_OFFSET]
+273F:57ED E8 1A7B call door_close_check
+273F:57F0 74 11 jz loc_1128 ; Jump if can't close
+273F:57F2 8B DD mov bx, bp
+273F:57F4 8B 5F 0F mov bx, [bx+REHS_HOTSPOT2_OFFSET]
+273F:57F7 E8 1A71 call door_close_check
+273F:57FA 74 07 jz loc_1128 ; Jump if can't close
273F:57FC 8B DD mov bx,bp
-273F:57FE C6 47 0C 01 mov byte ptr [bx+0Ch],1
+273F:57FE C6 47 0C 01 mov byte ptr [bx+REHS_EXIT_BLOCKED], 1
273F:5802 loc_ret_1127: ; xref 273F:57E6, 581F
273F:5802 C3 retn
@@ -13567,7 +13576,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:5913 74 E6 je loc_ret_1140 ; Jump if equal
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:5918 88 44 2A mov [si+HS_ACTION_CTR], al
273F:591B 53 push bx
273F:591C E8 FC62 call character_walking_end
273F:591F 5B pop bx
@@ -13661,7 +13670,6 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:59A7 D0 EB shr bl,1 ; Shift w/zeros fill
273F:59A9 2E: 88 1E 5977 mov cs:data_359,bl ; (273F:5977=0)
273F:59AE BD 0001 mov bp,1
- assume ds:data_seg
273F:59B1 FF 16 077A call [draw_dialog_proc]
273F:59B5 A1 9832 mov ax, room_number ; Get the current room's
273F:59B8 E8 B366 call get_room_resource_pointer3 ; short name
@@ -13777,8 +13785,8 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:5AA7 E8 B240 call get_room_resource_pointer2
273F:5AAA 5B pop bx
273F:5AAB 87 DE xchg bx,si ; bx=item to use, si=hotspot
-273F:5AAD 8B 47 06 mov ax,[bx+6]
-273F:5AB0 3B 45 1B cmp ax,[di+1Bh]
+273F:5AAD 8B 47 06 mov ax, [bx+HS_ROOM_NUM]
+273F:5AB0 3B 45 1B cmp ax, [di+ANIM_HOTSPOT_ID]; Item in char's inventory?
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 hotspot_action_precheck
@@ -13797,10 +13805,10 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:5ACD 53 push bx
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:5AD2 81 7D 1B 03E9 cmp word ptr [di+ANIM_HOTSPOT_ID], 3E9h
273F:5AD7 75 09 jne loc_1157 ; Jump if not equal
-273F:5AD9 C6 44 FF 28 mov byte ptr [si-1],28h ; '('
-273F:5ADD C7 44 1F 0050 mov word ptr [si+1Fh],50h
+273F:5AD9 C6 44 FF 28 mov byte ptr [si-1], 28h ; '('
+273F:5ADD C7 44 1F 0050 mov word ptr [si+HS_FRAME_CTR], 50h
273F:5AE2 loc_1157: ; xref 273F:5AD7
273F:5AE2 E8 FB11 call hotspot_get_action_sequence
273F:5AE5 79 03 jns loc_1158 ; Jump if not sign
@@ -13833,20 +13841,20 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:5B0E 81 3E BA19 0408 cmp use_hotspot_id, 408h
273F:5B14 72 29 jb loc_1163 ; Jump if below
273F:5B16 56 push si
-273F:5B17 úBE 4AD0 mov si, 4AD0h ; (273F:4AD0=0E2h)
+273F:5B17 úBE 4AD0 mov si, offset lookat_hotspot_list
273F:5B1A 8B 0E BA19 mov cx, use_hotspot_id
-273F:5B1E loc_1160: ; xref 273F:5B27
-273F:5B1E úAD lodsw ; String [si] to ax
-273F:5B1F 0B C0 or ax,ax ; Zero ?
-273F:5B21 74 09 jz loc_1162 ; Jump if zero
-273F:5B23 3B C1 cmp ax,cx
-273F:5B25 74 02 je loc_1161 ; Jump if equal
-273F:5B27 EB F5 jmp short loc_1160 ; (5B1E)
-273F:5B29 loc_1161: ; xref 273F:5B25
+273F:5B1E loc_1160:
+273F:5B1E úAD lodsw ; Get next hotspot Id
+273F:5B1F 0B C0 or ax,ax ; Reached end of list?
+273F:5B21 74 09 jz loc_1162 ; Jump if yes
+273F:5B23 3B C1 cmp ax,cx ; Found hotspot?
+273F:5B25 74 02 je loc_1161 ; Jump if yes
+273F:5B27 EB F5 jmp short loc_1160 ; Keep scanning
+273F:5B29 loc_1161:
273F:5B29 5E pop si
-273F:5B2A EB 13 jmp short loc_1163 ; (5B3F)
-273F:5B2C loc_1162: ; xref 273F:5B21
-273F:5B2C 5E pop si
+273F:5B2A EB 13 jmp short loc_1163
+273F:5B2C loc_1162:
+273F:5B2C 5E pop si ; Hotspot not found
273F:5B2D A1 BA19 mov ax, use_hotspot_id
273F:5B30 E8 EA74 call hotspot_action_precheck
273F:5B33 0B C0 or ax,ax ; Zero ?
@@ -13855,7 +13863,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:5B3A 74 8A je loc_ret_1154 ; Jump if equal
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:5B3F C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
273F:5B43 E8 EBA8 call character_face_hotspot
273F:5B46 53 push bx
273F:5B47 E8 FA37 call character_walking_end
@@ -13870,12 +13878,12 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:5B5A loc_1165: ; xref 273F:5B53, 5C1E
273F:5B5A úA1 BA1B mov ax, active_hotspot_id
273F:5B5D E8 B1C1 call get_room_resource_pointer3
-273F:5B60 8B 5C 06 mov bx,[si+6]
-273F:5B63 0B DB or bx,bx ; Zero ?
+273F:5B60 8B 5C 06 mov bx, [si+HSH_DESC_2]
+273F:5B63 0B DB or bx, bx ; Zero ?
273F:5B65 75 03 jnz loc_1166 ; Jump if not zero
-273F:5B67 8B 5C 04 mov bx,[si+4]
+273F:5B67 8B 5C 04 mov bx, [si+HSH_DESC]
273F:5B6A loc_1166:
-273F:5B6A 80 E7 1F and bh,1Fh
+273F:5B6A 80 E7 1F and bh, 1Fh
273F:5B6D E9 2D4C jmp display_dialog
273F:5B70 loc_ret_1167: ; xref 273F:5B58, 5BA0, 5BCD, 5BDD
273F:5B70 C3 retn
@@ -13888,17 +13896,17 @@ PATHFIND_Y_CHANGE2 equ 1Ah
give_proc proc near
273F:5B71 8B DD mov bx,bp
-273F:5B73 8B 47 02 mov ax,[bx+2]
+273F:5B73 8B 47 02 mov ax, [bx+2]
273F:5B76 A3 BA1B mov active_hotspot_id, ax
-273F:5B79 8B 07 mov ax,[bx]
+273F:5B79 8B 07 mov ax, [bx]
273F:5B7B A3 BA19 mov use_hotspot_id, ax
-273F:5B7E 83 C5 04 add bp,4
+273F:5B7E 83 C5 04 add bp, 4
273F:5B81 56 push si
273F:5B82 E8 B165 call get_room_resource_pointer2
273F:5B85 5B pop bx
273F:5B86 87 DE xchg bx,si
-273F:5B88 8B 47 06 mov ax,[bx+6]
-273F:5B8B 3B 45 1B cmp ax,[di+1Bh]
+273F:5B88 8B 47 06 mov ax, [bx+HS_ROOM_NUM]
+273F:5B8B 3B 45 1B cmp ax, [di+ANIM_HOTSPOT_ID]; Is item in char's inventory?
273F:5B8E 74 03 je loc_1168 ; Jump if equal
273F:5B90 E9 0179 jmp loc_1187 ; (5D0C)
273F:5B93 loc_1168: ; xref 273F:5B8E
@@ -13949,7 +13957,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:5BF4 loc_1174: ; xref 273F:5BDF
273F:5BF4 8B D8 mov bx,ax
273F:5BF6 8B 0E BA1B mov cx, active_hotspot_id
-273F:5BFA 8B 55 1B mov dx,[di+1Bh]
+273F:5BFA 8B 55 1B mov dx, [di+ANIM_HOTSPOT_ID]
273F:5BFD E9 0790 jmp display_message_dialog
give_proc endp
@@ -14004,15 +14012,15 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:5C43 B8 014B mov ax,14Bh
273F:5C46 8B 16 BA1B mov dx, active_hotspot_id
273F:5C4A 53 push bx
-273F:5C4B úBB 4AE6 mov bx,4AE6h ; (273F:4AE6=0EEh)
-273F:5C4E loc_1179: ; xref 273F:5C59
-273F:5C4E 83 C3 04 add bx,4
-273F:5C51 F7 07 FFFF test word ptr [bx],0FFFFh
-273F:5C55 74 12 jz loc_1180 ; Jump if zero
-273F:5C57 3B 17 cmp dx,[bx]
-273F:5C59 75 F3 jne loc_1179 ; Jump if not equal
-273F:5C5B 8B 47 02 mov ax,[bx+2]
-273F:5C5E F6 C4 80 test ah,80h
+273F:5C4B úBB 4AE6 mov bx, offset bribe_hotspot_list - 4
+273F:5C4E loc_1179:
+273F:5C4E 83 C3 04 add bx, 4 ; Move to next entry
+273F:5C51 F7 07 FFFF test word ptr [bx],0FFFFh ; End of list reached?
+273F:5C55 74 12 jz loc_1180 ; Jump if yes
+273F:5C57 3B 17 cmp dx, [bx] ; Char Id found?
+273F:5C59 75 F3 jne loc_1179 ; Keep scanning if not
+273F:5C5B 8B 47 02 mov ax, [bx+2] ; Get
+273F:5C5E F6 C4 80 test ah, 80h
273F:5C61 74 06 jz loc_1180 ; Jump if zero
273F:5C63 80 E4 7F and ah,7Fh
273F:5C66 E8 E1CB call sequence_execute
@@ -14026,7 +14034,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:5C79 53 push bx
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:5C7E C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
273F:5C82 E8 F971 call hotspot_get_action_sequence
273F:5C85 74 05 jz loc_1181 ; Jump if zero
273F:5C87 E8 E1AA call sequence_execute
@@ -14034,10 +14042,10 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:5C8C loc_1181: ; xref 273F:5C85
273F:5C8C BA 03E8 mov dx, PLAYER_HOTSPOT_ID
273F:5C8F 8B 0E BA19 mov cx, use_hotspot_id
-273F:5C93 BB 0029 mov bx,29h
+273F:5C93 BB 0029 mov bx, 29h
273F:5C96 83 3E BA3B 06 cmp talk_record_index, 6
273F:5C9B 75 03 jne loc_1182 ; Jump if not equal
-273F:5C9D úBB 0030 mov bx,30h ; (273F:0030=0Ah)
+273F:5C9D úBB 0030 mov bx, 30h
273F:5CA0 loc_1182: ; xref 273F:5C9B
273F:5CA0 E9 06ED jmp display_message_dialog
bribe_proc endp
@@ -14097,16 +14105,21 @@ PATHFIND_Y_CHANGE2 equ 1Ah
ask_proc endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
- ; SUBROUTINE
+ ; JUMP POINT
;
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
273F:5D0C loc_1187: ; xref 273F:5AC7, 5B90, 5D2F
-273F:5D0C B8 000F mov ax,0Fh ; "What???"
+273F:5D0C B8 000F mov ax, 0Fh ; "What???"
273F:5D0F E8 069F call display_message_dialog_3
273F:5D12 E9 F86C jmp character_walking_end
+ ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
+ ; SUBROUTINE
+ ;
+ ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
+
drink_proc proc near
273F:5D15 8B DD mov bx,bp
273F:5D17 8B 07 mov ax,[bx]
@@ -14989,7 +15002,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
display_message_dialog proc near
-273F:6390 89 16 4B41 mov word ptr ds:[4B41h],dx ; (273F:4B41=0DB33h)
+273F:6390 89 16 4B41 mov data_792, dx
273F:6394 53 push bx
273F:6395 8B D9 mov bx, cx
273F:6397 E8 A94E call get_room_resource_pointer
@@ -15005,8 +15018,8 @@ PATHFIND_Y_CHANGE2 equ 1Ah
display_message_dialog_2:
273F:63A2 8B 16 BA1B mov dx, active_hotspot_id
-273F:63A6 89 16 4B41 mov word ptr ds:[4B41h],dx ; (273F:4B41=0DB33h)
-273F:63AA 8B 4D 1B mov cx,[di+1Bh]
+273F:63A6 89 16 4B41 mov data_792, dx
+273F:63AA 8B 4D 1B mov cx, [di+ANIM_HOTSPOT_ID]
273F:63AD B2 01 mov dl,1
273F:63AF EB 0A jmp display_message_dialog_4
@@ -15091,14 +15104,14 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:6431 5E pop si
273F:6432 C3 retn
-; Further handling code for if the ax is not signed. This is starting to get
-; ridiculous
+; Further handling code for if the ax is not signed. In this case the message
+; is shown as a talk dialog
273F:6433 loc_1265: ; xref 273F:640F
273F:6433 8B D0 mov dx,ax
273F:6435 F6 C1 FF test cl,0FFh
273F:6438 74 07 jz loc_1266 ; Jump if zero
-273F:643A 8B 0E 4B41 mov cx,word ptr ds:[4B41h] ; (273F:4B41=0DB33h)
+273F:643A 8B 0E 4B41 mov cx, data_792
273F:643E E9 FCEE jmp talk_setup_3
273F:6441 loc_1266: ; xref 273F:6438
273F:6441 B9 03E7 mov cx,3E7h
@@ -15176,11 +15189,13 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:64E2 89 0E 9841 mov data_436,cx ; (273F:9841=20EFh)
273F:64E6 C3 retn
- ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
+ ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
+ ; SUBROUTINE
;
; Called from: 273F:654F, 655F
+ ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:64E7 sub_154:
+ sub_154:
273F:64E7 8B DA mov bx,dx
273F:64E9 53 push bx
273F:64EA E8 A7FB call get_room_resource_pointer
@@ -15188,34 +15203,42 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:64F0 5A pop dx
273F:64F1 B9 002D mov cx, NUM_ANIMATION_SLOTS
-273F:64F4 locloop_1276: ; xref 273F:6502
-273F:64F4 F6 47 0C FF test byte ptr [bx+0Ch],0FFh
-273F:64F8 74 0D jz loc_1277 ; Jump if zero
-273F:64FA 39 57 1E cmp [bx+1Eh],dx
+273F:64F4 locloop_1276:
+273F:64F4 F6 47 0C FF test byte ptr [bx+ANIM_LAYER], 0FFh
+273F:64F8 74 0D jz loc_1277 ; Jump if anim has no layer
+273F:64FA 39 57 1E cmp [bx+ANIM_VOICE_CHAR_ID], dx
273F:64FD 74 08 je loc_1277 ; Jump if equal
-273F:64FF 83 C3 29 add bx,29h
+273F:64FF 83 C3 29 add bx, ANIMATION_SLOT_SIZE
273F:6502 E2 F0 loop locloop_1276 ; Loop if cx > 0
-273F:6504 83 EB 29 sub bx,29h
-273F:6507 loc_1277: ; xref 273F:64F8, 64FD
-273F:6507 8B 44 06 mov ax,[si+6]
-273F:650A 89 47 0E mov [bx+0Eh],ax
-273F:650D C7 47 1B FFFE mov word ptr [bx+1Bh],0FFFEh
-273F:6512 C7 47 20 0028 mov word ptr [bx+20h],28h
-273F:6517 89 57 1E mov [bx+1Eh],dx
-273F:651A C6 47 0D 01 mov byte ptr [bx+0Dh],1
-273F:651E C7 47 04 0020 mov word ptr [bx+4],20h
-273F:6523 C7 47 06 0012 mov word ptr [bx+6],12h
-273F:6528 C6 47 0C 01 mov byte ptr [bx+0Ch],1
-273F:652C C6 47 10 01 mov byte ptr [bx+10h],1
-273F:6530 C7 47 11 6571 mov word ptr [bx+11h],6571h
-273F:6535 C7 47 13 0013 mov word ptr [bx+13h],13h
-273F:653A C7 47 15 0012 mov word ptr [bx+15h],12h
-273F:653F 8B 44 1B mov ax,[si+1Bh]
-273F:6542 01 47 15 add [bx+15h],ax
-273F:6545 C7 47 17 0001 mov word ptr [bx+17h],1
-273F:654A C6 47 28 00 mov byte ptr [bx+28h],0
+273F:6504 83 EB 29 sub bx, ANIMATION_SLOT_SIZE
+273F:6507 loc_1277:
+273F:6507 8B 44 06 mov ax, [si+HS_ROOM_NUM]
+273F:650A 89 47 0E mov [bx+ANIM_ROOM_NUM], ax
+273F:650D C7 47 1B FFFE mov word ptr [bx+ANIM_HOTSPOT_ID], 0FFFEh
+273F:6512 C7 47 20 0028 mov word ptr [bx+ANIM_V20], 40
+273F:6517 89 57 1E mov [bx+ANIM_VOICE_CHAR_ID], dx
+273F:651A C6 47 0D 01 mov byte ptr [bx+ANIM_FLAGS], 1
+273F:651E C7 47 04 0020 mov word ptr [bx+ANIM_WIDTH], 20h
+273F:6523 C7 47 06 0012 mov word ptr [bx+ANIM_HEIGHT], 12h
+273F:6528 C6 47 0C 01 mov byte ptr [bx+ANIM_LAYER], 1
+273F:652C C6 47 10 01 mov byte ptr [bx+ANIM_CAN_UNLOAD], 1
+273F:6530 C7 47 11 6571 mov word ptr [bx+ANIM_TICK_PROC], offset tick_proc_6571
+273F:6535 C7 47 13 0013 mov word ptr [bx+ANIM_WIDTH_COPY], 19
+273F:653A C7 47 15 0012 mov word ptr [bx+ANIM_HEIGHT_COPY], 18
+273F:653F 8B 44 1B mov ax, [si+HS_HEIGHT_COPY]
+273F:6542 01 47 15 add [bx+ANIM_HEIGHT_COPY], ax
+273F:6545 C7 47 17 0001 mov word ptr [bx+ANIM_Y_CORRECTION], 1
+273F:654A C6 47 28 00 mov byte ptr [bx+ANIM_START_COLOUR], 0
273F:654E C3 retn
+ sub_154 endp
+
+ ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
+ ; SUPPORT CODE
+ ;
+ ; This is support code used by display_message_dialog
+ ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
+
273F:654F loc_1278: ; xref 273F:6408
273F:654F E8 FF95 call sub_154 ; (64E7)
273F:6552 A1 5813 mov ax, voice_pixel_segment
@@ -15231,9 +15254,13 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:656B D1 E0 shl ax,1 ; Shift w/zeros fill
273F:656D 89 47 08 mov [bx+ANIM_FRAME_OFFSET], ax
273F:6570 C3 retn
- display_message_dialog endp
- ;* No entry point to code
+ ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
+ ; SUBROUTINE
+ ;
+ ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
+
+ tick_proc_6571 proc near
273F:6571 8B 45 1E mov ax,[di+1Eh]
273F:6574 E8 A773 call get_room_resource_pointer2
273F:6577 8B 44 06 mov ax,[si+6]
@@ -15258,6 +15285,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:65A0 2D 0014 sub ax, 20
273F:65A3 89 45 02 mov [di+ANIM_Y],ax
273F:65A6 C3 retn
+ tick_proc_6571 endp
;* No entry point to code
273F:65A7 A1 983B mov ax, talk_character_id
273F:65AA E8 A73B call get_room_resource_pointer
@@ -15284,7 +15312,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
273F:65DE 0000 actions_proc_list dw 0
-273F:65E0 6698 dw offset action_use ; 01 - GET
+273F:65E0 6698 dw offset action_do ; 01 - GET
273F:65E2 0000 dw 0
273F:65E4 6698 dw offset action_do ; 03 - PUSH
273F:65E6 6698 dw offset action_do ; 04 - PULL
@@ -15321,8 +15349,8 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:6614 E8 A1D7 call sub_11 ; (07EE)
273F:6617 loc_1283: ; xref 273F:670A
-273F:6617 úC7 06 3382 FFFF mov data_770, 0FFFFh
-273F:661D C7 06 3380 0000 mov word ptr ds:data_89e,0 ; (0874:3380=6F6h)
+273F:6617 úC7 06 3382 FFFF mov data_3382, 0FFFFh
+273F:661D C7 06 3380 0000 mov data_3380, 0
273F:6623 C7 06 335E 0001 mov word ptr ds:data_75e,1 ; (0874:335E=0FF47h)
273F:6629 B8 0007 mov ax,7
273F:662C F7 26 336A mul word ptr ds:data_79e ; (0874:336A=7500h) dx:ax = data * ax
@@ -15331,7 +15359,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:6637 C7 06 3350 0000 mov word ptr ds:data_71e,0 ; (0874:3350=9A90h)
273F:663D A1 3356 mov ax,ds:data_72e ; (0874:3356=289Ah)
273F:6640 A3 3379 mov ds:data_85e,ax ; (0874:3379=0C722h)
-273F:6643 A1 3358 mov ax,ds:data_73e ;
+273F:6643 A1 3358 mov ax, data_3358
273F:6646 0B C0 or ax,ax ; Hotspot highlighted?
273F:6648 74 19 jz loc_1284 ; No, so set up for look/status menu
@@ -15380,7 +15408,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
-273F:6698 E8 028A action_do: call sub_159
+273F:6698 E8 028A action_do: call sub_159
273F:669B E9 0097 action_status: jmp action_look
@@ -15396,10 +15424,10 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:66B3 E8 A69E action_use: call sub_32 ; (0D54)
273F:66B6 F7 06 31E4 FFFF test popmenu_entry_count, 0FFFFh
273F:66BC 74 42 jz loc_1291 ; Jump if zero
-273F:66BE E8 02D0 call menu_make_selections
+273F:66BE E8 02D0 call menu_make_selections ; Select inventory item
273F:66C1 0B C0 or ax,ax ; Zero ?
273F:66C3 78 3E js loc_1292 ; Jump if sign=1
-273F:66C5 8B 36 3380 mov si,ds:data_89e ; (0874:3380=6F6h)
+273F:66C5 8B 36 3380 mov si, data_3380 ; Get the hotspot
273F:66C9 83 BC 337C 0B cmp word ptr ds:data_86e+1[si],0Bh ; (0874:337C=4758h)
273F:66CE 75 05 jne loc_1288 ; Jump if not equal
273F:66D0 BB 33E4 mov bx,33E4h
@@ -15472,7 +15500,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:673B BB 33E4 mov bx,33E4h
273F:673E E8 050F call sub_166 ; (6C50)
273F:6741 loc_1295: ; xref 273F:676E, 67EA
-273F:6741 ú83 3E 3380 08 cmp word ptr ds:[3380h],8 ; (273F:3380=12Dh)
+273F:6741 ú83 3E 3380 08 cmp data_3380, 8
273F:6746 75 06 jne loc_1296 ; Jump if not equal
273F:6748 A1 3356 mov ax,word ptr ds:[3356h] ; (273F:3356=9B9h)
273F:674B A3 3379 mov data_266,ax ; (273F:3379=62C0h)
@@ -15483,11 +15511,11 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:6757 E8 0237 call menu_make_selections
273F:675A 0B C0 or ax,ax ; Zero ?
273F:675C 79 12 jns loc_1298 ; Jump if not sign
-273F:675E 83 3E 3380 08 cmp word ptr ds:[3380h],8 ; (273F:3380=12Dh)
+273F:675E 83 3E 3380 08 cmp data_3380, 8
273F:6763 74 9E je loc_1292 ; Jump if equal
273F:6765 loc_1297: ; xref 273F:6795, 679C, 683E
273F:6765 úE8 00F7 call sub_157 ; (685F)
-273F:6768 C7 06 3380 0008 mov word ptr ds:[3380h],8 ; (273F:3380=12Dh)
+273F:6768 C7 06 3380 0008 mov data_3380, 8
273F:676E EB D1 jmp short loc_1295 ; (6741)
273F:6770 loc_1298: ; xref 273F:675C
273F:6770 3D 0017 cmp ax,17h
@@ -15511,7 +15539,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:6797 E8 01F7 call menu_make_selections
273F:679A 0B C0 or ax,ax ; Zero ?
273F:679C 78 C7 js loc_1297 ; Jump if sign=1
-273F:679E 8B 1E 3380 mov bx,word ptr ds:[3380h] ; (273F:3380=12Dh)
+273F:679E 8B 1E 3380 mov bx, data_3380
273F:67A2 8B 9F 337C mov bx,word ptr data_267+1[bx] ; (273F:337C=4Eh)
273F:67A6 83 FB 16 cmp bx,16h
273F:67A9 75 03 jne loc_1303 ; Jump if not equal
@@ -15526,7 +15554,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:67BD E9 0081 jmp loc_1312 ; (6841)
273F:67C0 loc_1304: ; xref 273F:6773, 67BB, 681C, 6839
; 685C
-273F:67C0 ú83 3E 3380 4A cmp word ptr ds:[3380h],4Ah ; (273F:3380=12Dh)
+273F:67C0 ú83 3E 3380 4A cmp data_3380, 4Ah
273F:67C5 73 0B jae loc_1305 ; Jump if above or =
273F:67C7 BE 2E41 mov si,2E41h
273F:67CA BB 2E53 mov bx,2E53h
@@ -15599,10 +15627,10 @@ PATHFIND_Y_CHANGE2 equ 1Ah
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
273F:685F sub_157 proc near
-273F:685F 83 2E 3380 04 sub word ptr ds:[3380h],4 ; (273F:3380=12Dh)
-273F:6864 8B 1E 3380 mov bx,word ptr ds:[3380h] ; (273F:3380=12Dh)
-273F:6868 8B 87 3382 mov ax, data_770[bx]
-273F:686C C7 87 3382 FFFF mov data_770[bx],0FFFFh
+273F:685F 83 2E 3380 04 sub data_3380, 4
+273F:6864 8B 1E 3380 mov bx, data_3380
+273F:6868 8B 87 3382 mov ax, data_3382[bx]
+273F:686C C7 87 3382 FFFF mov data_3382[bx],0FFFFh
273F:6872 B9 0140 mov cx,140h
273F:6875 50 push ax
273F:6876 33 D2 xor dx,dx ; Zero register
@@ -15706,22 +15734,22 @@ PATHFIND_Y_CHANGE2 equ 1Ah
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
273F:6925 sub_159 proc near
-273F:6925 8B 1E 3358 mov bx,word ptr ds:[3358h] ; (273F:3358=0F300h)
-273F:6929 8B 36 3380 mov si,word ptr ds:[3380h] ; (273F:3380=12Dh)
-273F:692D 89 9C 3382 mov data_770[si],bx
-273F:6931 89 9C 3384 mov word ptr ds:[3384h][si],bx ; (273F:3384=810Ch)
-273F:6935 C7 84 3386 FFFF mov word ptr ds:[3386h][si],0FFFFh ; (273F:3386=0EFh)
-273F:693B 83 06 3380 04 add word ptr ds:[3380h],4 ; (273F:3380=12Dh)
+273F:6925 8B 1E 3358 mov bx, data_3358 ; Get the hotspot Id
+273F:6929 8B 36 3380 mov si, data_3380 ; Get offset
+273F:692D 89 9C 3382 mov data_3382[si], bx ; Store hotspot Id
+273F:6931 89 9C 3384 mov word ptr ds:[3384h][si], bx
+273F:6935 C7 84 3386 FFFF mov word ptr ds:[3386h][si], 0FFFFh
+273F:693B 83 06 3380 04 add data_3380, 4
273F:6940 1E push ds
273F:6941 8E DD mov ds,bp
-273F:6943 E8 A3D9 call get_room_resource_pointer3
-273F:6946 8B 44 02 mov ax,[si+2]
-273F:6949 80 E4 1F and ah,1Fh
+273F:6943 E8 A3D9 call get_room_resource_pointer3 ; Get header pointer
+273F:6946 8B 44 02 mov ax, [si+HSH_NAME]
+273F:6949 80 E4 1F and ah, 1Fh
273F:694C 1F pop ds
-273F:694D BF 30D4 mov di,30D4h
-273F:6950 E8 13E7 call decode_string
-273F:6953 BB 30D4 mov bx,30D4h
-273F:6956 E8 02F7 call sub_166 ; (6C50)
+273F:694D BF 30D4 mov di, offset hotspot_display_buffer
+273F:6950 E8 13E7 call decode_string ; Decode hotspot name
+273F:6953 BB 30D4 mov bx, offset hotspot_display_buffer
+273F:6956 E8 02F7 call sub_166 ; Displays name
273F:6959 C3 retn
sub_159 endp
@@ -15783,7 +15811,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
menu_make_selections proc near
-273F:6991 8B 36 3380 mov si,word ptr ds:[3380h] ; (273F:3380=12Dh)
+273F:6991 8B 36 3380 mov si, data_3380
273F:6995 F6 84 3383 80 test byte ptr ds:[3383h][si],80h ; (273F:3383=74h)
273F:699A 74 36 jz loc_1327 ; Jump if zero
273F:699C C6 06 337D 00 mov data_269,0 ; (273F:337D=0)
@@ -15796,17 +15824,17 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:69B0 FF 36 335E push word ptr ds:[335Eh] ; (273F:335E=0C183h)
273F:69B4 E8 0299 call sub_166 ; (6C50)
273F:69B7 5B pop bx
-273F:69B8 8B 36 3380 mov si,word ptr ds:[3380h] ; (273F:3380=12Dh)
-273F:69BC 89 9C 3382 mov data_770[si],bx
+273F:69B8 8B 36 3380 mov si, data_3380
+273F:69BC 89 9C 3382 mov data_3382[si],bx
273F:69C0 89 84 3384 mov word ptr ds:[3384h][si],ax ; (273F:3384=810Ch)
273F:69C4 83 C6 04 add si,4
-273F:69C7 C7 84 3382 FFFF mov data_770[si], 0FFFFh
-273F:69CD 89 36 3380 mov word ptr ds:[3380h],si ; (273F:3380=12Dh)
+273F:69C7 C7 84 3382 FFFF mov data_3382[si], 0FFFFh
+273F:69CD 89 36 3380 mov data_3380, si
273F:69D1 loc_ret_1326: ; xref 273F:69A9, 69AE
273F:69D1 C3 retn
273F:69D2 loc_1327: ; xref 273F:699A
-273F:69D2 83 06 3380 04 add word ptr ds:[3380h],4 ; (273F:3380=12Dh)
+273F:69D2 83 06 3380 04 add data_3380, 4
273F:69D7 8B 84 3384 mov ax,word ptr ds:[3384h][si] ; (273F:3384=810Ch)
273F:69DB C6 06 337D 01 mov data_269,1 ; (273F:337D=0)
273F:69E0 C3 retn
@@ -16182,8 +16210,6 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:6C73 D3 E0 shl ax,cl ; Shift w/zeros fill
273F:6C75 8B D8 mov bx,ax
273F:6C77 26: 02 17 add dl,es:[bx]
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 261
-
273F:6C7A EB F0 jmp short loc_1362 ; (6C6C)
273F:6C7C loc_1363: ; xref 273F:6C6F
273F:6C7C 26: 02 16 0000 add dl,es:data_1454e ; (E375:0000=0)
@@ -17125,30 +17151,27 @@ PATHFIND_Y_CHANGE2 equ 1Ah
; SUBROUTINE
;
; Called from: 273F:57ED, 57F7
- ; This whole routine seems to be about finding any animation entry that
- ; falls within the bounds of a given rectangle. Called only by the
- ; close door proc.
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:726B sub_183 proc near
+ door_close_check proc near
273F:726B 55 push bp
273F:726C 56 push si
-273F:726D 8B 5F 0B mov bx,[bx+0Bh]
-273F:7270 8B 57 0E mov dx, [bx+0Eh] ; Get room number
+273F:726D 8B 5F 0B mov bx, [bx+HS_ANIM_OFFSET]
+273F:7270 8B 57 0E mov dx, [bx+ANIM_ROOM_NUM] ; Get room number
273F:7273 úBE B14E mov si, offset animation_table
273F:7276 B9 002D mov cx, NUM_ANIMATION_SLOTS
-273F:7279 8B 07 mov ax,[bx]
+273F:7279 8B 07 mov ax, [bx+ANIM_X]
273F:727B A3 10E6 mov char_rect_left, ax
-273F:727E 03 47 13 add ax,[bx+13h]
+273F:727E 03 47 13 add ax, [bx+ANIM_WIDTH_COPY]
273F:7281 A3 10E8 mov char_rect_right, ax
-273F:7284 8B 47 02 mov ax,[bx+2]
-273F:7287 03 47 15 add ax,[bx+15h]
+273F:7284 8B 47 02 mov ax, [bx+ANIM_Y]
+273F:7287 03 47 15 add ax, [bx+ANIM_HEIGHT_COPY]
273F:728A 50 push ax
-273F:728B 2B 47 17 sub ax,[bx+17h]
-273F:728E 2B 47 22 sub ax,[bx+22h]
+273F:728B 2B 47 17 sub ax, [bx+ANIM_Y_CORRECTION]
+273F:728E 2B 47 22 sub ax, [bx+ANIM_CHAR_RECT_Y]
273F:7291 A3 10EA mov char_rect_top, ax
273F:7294 58 pop ax
-273F:7295 03 47 22 add ax,[bx+22h]
+273F:7295 03 47 22 add ax, [bx+ANIM_CHAR_RECT_Y]
273F:7298 A3 10EC mov char_rect_bottom, ax
273F:729B locloop_1429: ; xref 273F:72FC
@@ -17171,11 +17194,11 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:72C0 loc_1430:
273F:72C0 3D FFFE cmp ax,0FFFEh
273F:72C3 73 34 jae loc_1431 ; Skip if Id is 0fffeh or 0ffffh
-273F:72C5 8B 04 mov ax, [si] ; Get anim x pos
+273F:72C5 8B 04 mov ax, [si+ANIM_X] ; Get anim x pos
273F:72C7 3B 06 10E8 cmp ax, char_rect_right ; More than set X pos?
273F:72CB 73 2C jae loc_1431 ; If yes, skip entry
-273F:72CD 03 44 13 add ax,[si+13h] ; Copy of anim width
-273F:72D0 3B 06 10E6 cmp ax, char_rect_left ; Compare against loaded right
+273F:72CD 03 44 13 add ax,[si+ANIM_WIDTH_COPY] ; anim width
+273F:72D0 3B 06 10E6 cmp ax, char_rect_left ; Compare against loaded right
273F:72D4 72 23 jb loc_1431 ; Skip if less or equal
273F:72D6 74 21 jz loc_1431
@@ -17184,32 +17207,31 @@ PATHFIND_Y_CHANGE2 equ 1Ah
; is greater than the X end position. That is to say, the given horizontal slice
273F:72D8 8B 44 02 mov ax, [si+ANIM_Y] ; Get Y position
-273F:72DB 03 44 15 add ax,[si+15h] ; Add copy of anim height
+273F:72DB 03 44 15 add ax, [si+ANIM_HEIGHT_COPY]; Add copy of anim height
273F:72DE 8B E8 mov bp,ax
-273F:72E0 03 44 22 add ax,[si+22h] ; ???
+273F:72E0 03 44 22 add ax, [si+ANIM_CHAR_RECT_Y]
273F:72E3 3B 06 10EA cmp ax, char_rect_top
273F:72E7 72 10 jb loc_1431 ; Not meeting Y start
273F:72E9 8B C5 mov ax, bp
-273F:72EB 2B 44 17 sub ax, [si+17h]
-273F:72EE 2B 44 22 sub ax, [si+22h]
+273F:72EB 2B 44 17 sub ax, [si+ANIM_Y_CORRECTION]
+273F:72EE 2B 44 22 sub ax, [si+ANIM_CHAR_RECT_Y]
273F:72F1 3B 06 10EC cmp ax, char_rect_bottom
273F:72F5 74 0B je loc_1432 ; Jump if equal
273F:72F7 72 09 jc loc_1432 ; Jump if carry Set
-273F:72F9 loc_1431: ; xref 273F:729D, 72A1, 72A7, 72AC
- ; 72B4, 72BE, 72C3, 72CB
- ; 72D4, 72D6, 72E7
+
+273F:72F9 loc_1431:
273F:72F9 83 C6 29 add si, ANIMATION_SLOT_SIZE
273F:72FC E2 9D loop locloop_1429 ; Loop if cx > 0
-273F:72FE 0C 01 or al,1
-273F:7300 EB 02 jmp short loc_1433 ; (7304)
-273F:7302 loc_1432: ; xref 273F:72F5, 72F7
-273F:7302 33 C0 xor ax,ax ; Zero register
-273F:7304 loc_1433: ; xref 273F:7300
+273F:72FE 0C 01 or al,1 ; Result = 1 (no blockings)
+273F:7300 EB 02 jmp short loc_1433
+273F:7302 loc_1432:
+273F:7302 33 C0 xor ax,ax ; Result = 0 (a blocking)
+273F:7304 loc_1433:
273F:7304 5E pop si
273F:7305 5D pop bp
273F:7306 C3 retn
- sub_183 endp
+ door_close_check endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
@@ -19247,10 +19269,10 @@ PATHFIND_Y_CHANGE2 equ 1Ah
;
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:800F C6 44 2A 00 mov byte ptr [si+HS_FRAME_NUM], 0
+273F:800F C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
273F:8013 loc_set_frame_offset: ; xref 273F:8269, 83C8, 840E, 84C7
; 84D2, 85D1
-273F:8013 ú8A 44 2A mov al, [si+HS_FRAME_NUM]
+273F:8013 ú8A 44 2A mov al, [si+HS_ACTION_CTR]
273F:8016 32 E4 xor ah, ah ; Zero register
273F:8018 8B 5C 21 mov bx, [si+HS_PIXEL_OFFSET]
273F:801B F7 67 07 mul word ptr [bx+PIXEL_FRAME_SIZE]
@@ -19351,7 +19373,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:80AE 8B 45 0F mov ax,[di+HS_Y]
273F:80B1 2D 000A sub ax, 10
273F:80B4 89 44 0F mov [si+HS_Y], ax ; Set y position
-273F:80B7 C6 44 2A 00 mov byte ptr [si+HS_FRAME_NUM], 0
+273F:80B7 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
273F:80BB C7 44 24 0630 mov word ptr [si+HS_SCRIPT_OFFSET], 630h
273F:80C0 BB 0425 mov bx, 425h
273F:80C3 E9 8C00 jmp animation_load_entry
@@ -19432,7 +19454,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
seq_method_55 proc near
-273F:816C C6 06 7D4B 01 mov BYTE PTR [goewin_hotspot_rec+HS_FRAME_NUM], 1
+273F:816C C6 06 7D4B 01 mov BYTE PTR [goewin_hotspot_rec+HS_ACTION_CTR], 1
273F:8171 2E A1 8168 mov ax, cs:data_410
273F:8175 A3 7D21 mov [goewin_hotspot_rec], ax
273F:8178 2E A1 816A mov ax, cs:data_411
@@ -19445,13 +19467,13 @@ PATHFIND_Y_CHANGE2 equ 1Ah
;
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:8180 F6 44 2A FF test bye ptr [SI+HS_FRAME_NUM], 0FFh
+273F:8180 F6 44 2A FF test bye ptr [SI+HS_ACTION_CTR], 0FFh
273F:8184 74 B8 jz loc_ret_1607
273F:8186 E8 20 8E call hotspot_script_execute
273F:8189 75 B3 jnz loc_ret_1607
273F:818B C7 44 17 4F82 mov word ptr [si+HS_TICK_PROC], 4F82h
273F:8190 C7 45 11 4F82 mov word ptr [di+ANIM_TICK_PROC], 4F82h
-273F:8195 C6 44 2A 00 mov byte ptr [si+HS_FRAME_NUM], 0
+273F:8195 C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
273F:8199 C3 ret
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
@@ -19962,7 +19984,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:855A sub_213 proc near
273F:855A 53 push bx
273F:855B E8 FD29 call sub_211 ; list[room #] => bx
-273F:855E F6 44 2A FF test byte ptr [si+HS_FRAME_NUM], 0FFh
+273F:855E F6 44 2A FF test byte ptr [si+HS_ACTION_CTR], 0FFh
273F:8562 75 45 jnz loc_1669 ; Jump if not zero
273F:8564 58 pop ax
273F:8565 E8 FF6D call sub_212 ; (84D5)
@@ -20013,7 +20035,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:85B6 83 C3 04 add bx,4
273F:85B9 E2 F7 loop locloop_1670 ; Loop if cx > 0
-273F:85BB C6 44 2A 00 mov byte ptr [si+HS_FRAME_NUM], 0
+273F:85BB C6 44 2A 00 mov byte ptr [si+HS_ACTION_CTR], 0
273F:85BF loc_1671: ; xref 273F:85C7
273F:85BF 5B pop bx
273F:85C0 33 C0 xor ax,ax ; Zero register
@@ -20278,7 +20300,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
273F:87A4 loc_1685: ; xref 273F:8780
273F:87A4 33 C0 xor ax,ax ; Zero register
273F:87A6 89 44 61 mov [si+HS_ACTION_OFFSET], ax
-273F:87A9 88 44 2A mov [si+HS_FRAME_NUM], al
+273F:87A9 88 44 2A mov [si+HS_ACTION_CTR], al
273F:87AC 89 44 42 mov [si+HS_V42], ax
273F:87AF 88 44 44 mov [si+HS_V44], al
273F:87B2 C3 retn
@@ -25999,7 +26021,9 @@ PATHFIND_Y_CHANGE2 equ 1Ah
31E4:30BF 32 00 67 01 8A 01 db 32h, 00h, 67h, 01h, 8Ah, 01h
31E4:30C5 BE 00 01 01 0B 00 db 0BEh, 00h, 01h, 01h, 0Bh, 00h
31E4:30CB 00 00 2D 00 00 00 db 00h, 00h, 2Dh, 00h, 00h, 00h
-31E4:30D1 7F 00 9A 00 C6 00 db 7Fh, 00h, 9Ah, 00h,0C6h, 00h
+31E4:30D1 7F 00 9A db 7Fh, 00h, 9Ah
+
+31E4:30D4 00 C6 00 hotspot_display_buffer db 00h,0C6h, 00h
31E4:30D7 19 01 0D 00 00 00 db 19h, 01h, 0Dh, 00h, 00h, 00h
31E4:30DD 2A 00 A7 01 BF 01 db 2Ah, 00h,0A7h, 01h,0BFh, 01h
31E4:30E3 CF 00 21 01 0E 00 db 0CFh, 00h, 21h, 01h, 0Eh, 00h
@@ -26120,8 +26144,9 @@ PATHFIND_Y_CHANGE2 equ 1Ah
31E4:3347 23 00 00 00 7F db 23h, 00h, 00h, 00h, 7Fh
31E4:334C 8700 popmenu_num_entries dw 8700h
31E4:334D 00 02 01 47 01 db 00h, 02h, 01h, 47h, 01h
-31E4:3353 0D 00 00 00 17 00 db 0Dh, 00h, 00h, 00h, 17h, 00h
-31E4:3359 3B 01 7E 01 B5 00 db 3Bh, 01h, 7Eh, 01h,0B5h, 00h
+31E4:3353 0D 00 00 00 17 db 0Dh, 00h, 00h, 00h, 17h
+31E4:3358 3B00 data_3358 dw 3B00h
+31E4:335A 01 7E 01 B5 00 db 01h, 7Eh, 01h,0B5h, 00h
31E4:335F EB 00 0B db 0EBh, 00h, 0Bh
31E4:3362 0000 popmenu_current_index dw 0
31E4:3364 0100 popmenu_prior_index dw 100h
@@ -26131,11 +26156,13 @@ PATHFIND_Y_CHANGE2 equ 1Ah
31E4:336B 0F 01 47 01 0E 00 db 0Fh, 01h, 47h, 01h, 0Eh, 00h
31E4:3371 00 00 18 00 0C 01 db 00h, 00h, 18h, 00h, 0Ch, 01h
31E4:3377 2F 01 CB 00 F9 00 db 2Fh, 01h,0CBh, 00h,0F9h, 00h
-31E4:337D 0D 00 00 00 1C db 0Dh, 00h, 00h, 00h, 1Ch
-
-31E4:3382 00 00 data_770 dw 0
+31E4:337D 0D 00 00 db 0Dh, 00h, 00h
-31E4:3384 00 D4 00 0B 01 db 00h,0D4h, 00h, 0Bh, 01h
+31E4:3380 1C00 data_3380 dw 1C00h
+31E4:3382 00 00 data_3382 dw 0
+31E4:3384 D400 data_3384 dw 0D400h
+31E4:3386 0B00 data_3386 dw 0B00h
+31E4:3388 01 db 01h
31E4:3389 BB 00 0A 01 0B 00 db 0BBh, 00h, 0Ah, 01h, 0Bh, 00h
31E4:338F 00 00 10 00 9B 00 db 00h, 00h, 10h, 00h, 9Bh, 00h
31E4:3395 DF 00 21 01 47 01 db 0DFh, 00h, 21h, 01h, 47h, 01h
@@ -26377,16 +26404,23 @@ PATHFIND_Y_CHANGE2 equ 1Ah
........
31E4:47DD 0000 0000 data_786 dd 00000h ; Data table (indexed access)
31E4:47E1 02EF[00] db 751 dup (0)
-31E4:4AD0 11 04 12 04 1F 04 db 11h, 04h, 12h, 04h, 1Fh, 04h
-31E4:4AD6 20 04 21 04 22 04 db 20h, 04h, 21h, 04h, 22h, 04h
-31E4:4ADC 26 04 27 04 28 04 db 26h, 04h, 27h, 04h, 28h, 04h
-31E4:4AE2 29 04 36 04 37 04 db 29h, 04h, 36h, 04h, 37h, 04h
-31E4:4AE8 00 00 21 04 79 08 db 00h, 00h, 21h, 04h, 79h, 08h
-31E4:4AEE E9 03 C7 08 29 04 db 0E9h, 03h,0C7h, 08h, 29h, 04h
-31E4:4AF4 D1 08 22 04 D4 08 db 0D1h, 08h, 22h, 04h,0D4h, 08h
-31E4:4AFA 20 04 D6 08 2B 04 db 20h, 04h,0D6h, 08h, 2Bh, 04h
-31E4:4B00 56 09 F2 03 E6 0B db 56h, 09h,0F2h, 03h,0E6h, 0Bh
-31E4:4B06 00 00 db 00h, 00h
+
+; List of hotspots that don't to be walked to before being looked at
+ lookat_hotspot_list
+31E4:4AD0 0411 0412 041F 0420 dw 0411h, 0412h, 041Fh, 0420h
+31E4:4AD8 0421 0422 0426 0427 dw 0421h, 0422h, 0426h, 0427h
+31E4:4AE0 0428 0429 0436 0437 dw 0428h, 0429h, 0436h, 0437h
+31E4:4AE8 0000 dw 0
+
+31E4:4AEA 0421 0879 bribe_hotspot_list dw 421h, 879h
+31E4:4AEE 03E9 08C7 dw 3E9h, 8C7h
+31E4:4AF2 0429 08D1 dw 429h, 8D1h
+31E4:4AF6 0422 08D4 dw 422h, 8D4h
+31E4:4AFA 0420 08D6 dw 420h, 8D6h
+31E4:4AFE 042B 0956 dw 42Bh, 956h
+31E4:4B02 03F2 0BE6 dw 3F2h,0BE6h
+31E4:4B06 0000 dw 0
+
31E4:4B08 59 6F 75 20 61 72 carrying_str db 'You are carrying '
31E4:4B0E 65 20 63 61 72 72
31E4:4B14 79 69 6E 67 20
@@ -26400,7 +26434,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
31E4:4B34 000C[00] db 13 dup (0)
31E4:4B40 00 data_791 db 0
-31E4:4B41 00 00 db 0, 0
+31E4:4B41 00 00 data_792 dw 0
31E4:4B43 0050[00] hotspot_name db 80 dup (0)
31E4:4B93 005D[00] action_name db 93 dup (0)
@@ -31674,7 +31708,7 @@ PATHFIND_Y_CHANGE2 equ 1Ah
31E4:BC43 06 00 00 00 00 00 db 06h, 00h, 00h, 00h, 00h, 00h
31E4:BC49 00 00 num_groats dw 0
- hotspot_proximity_list
+ hotspot_walkto_list
31E4:BC4B 0418 0143 8123 dw 418h, 143h, 8123h
31E4:BC51 2721 0144 80FB
31E4:BC57 2722 0095 8105
diff --git a/engines/lure/diassembly/Lure_notes.txt b/engines/lure/diassembly/Lure_notes.txt
index 394f46adcd..8a84ffb214 100644
--- a/engines/lure/diassembly/Lure_notes.txt
+++ b/engines/lure/diassembly/Lure_notes.txt
@@ -212,6 +212,11 @@ display_message - Displays a message to the user
dh = 0=>non fatal error, 1=>fatal error
If a fatal error, function does not return
+display_message_dialog - Uses the message segment data to look up the
+ specific response to an action for a specific character
+ Input: cx = character Id
+ ??
+
display_message_dialog_3 - Uses the message segment data to look up the
specific response to an action for a specific character
Input: ax = Message Id. Commonly stored in the sequence field for
@@ -219,6 +224,11 @@ display_message_dialog_3 - Uses the message segment data to look up the
si = Character hotspot record
di = Player animation slot
+door_close_check - Checks the passed hotspot, which is one half of a doorway,
+ to make sure there's no character within it, preventing closing
+ Input: bx = Hotspot offset
+ Output: al = 1 => Door can close, 0 => Door can't close
+
draw_dialog_frame - Draws the frame for a dialog in an off-screen buffer
Input: es:di = Destination buffer
bx = Horizontal size of dialog - 16
@@ -780,6 +790,9 @@ The format of hotspots are as follows:
8h 1 Script flag - a non-zero value indicates that the value
at offset 9h is a script offset to execute. Otherwise,
the offset is treated as a code subroutine, and jumped to
+ Also used by non-visual hotspots to indicate the direction
+ to face the character in when an action is performed on
+ the hotspot
9h 2 Script sequence to execute, or offset for loading
routine for hotspot. So far I'm aware of two code routines:
7167h = stub method that calls animation_load
@@ -817,7 +830,9 @@ The format of hotspots are as follows:
frames for a given direction to quickly retrieve the
position change and frame number in a walking sequence -
used along with offset 26h to handling walking
- 2Ah 1 Current frame number
+ 2Ah 1 A counter used to determine the number of times the
+ action precheck method has been called within the
+ handling of an action
2Bh 2 ???
2Dh 2 Script Id of a hotspot the character is to use
2Fh 2 Hotspot Id of a hotspot the character is to use