aboutsummaryrefslogtreecommitdiff
path: root/engines/lure
diff options
context:
space:
mode:
authorPaul Gilbert2006-08-27 11:57:30 +0000
committerPaul Gilbert2006-08-27 11:57:30 +0000
commit7649160dde01b5d74335e198d43d22188d6b54c6 (patch)
tree60df60329f558e370053661c8a130c1930a2dee2 /engines/lure
parent2b06882a683d282a3b02f8ae408446c439612db3 (diff)
downloadscummvm-rg350-7649160dde01b5d74335e198d43d22188d6b54c6.tar.gz
scummvm-rg350-7649160dde01b5d74335e198d43d22188d6b54c6.tar.bz2
scummvm-rg350-7649160dde01b5d74335e198d43d22188d6b54c6.zip
Committed recent disassembly efforts
svn-id: r23788
Diffstat (limited to 'engines/lure')
-rw-r--r--engines/lure/disassembly/LURE.ASM641
-rw-r--r--engines/lure/disassembly/Lure_notes.txt28
2 files changed, 363 insertions, 306 deletions
diff --git a/engines/lure/disassembly/LURE.ASM b/engines/lure/disassembly/LURE.ASM
index 105bc1e4dd..af0ae8af7d 100644
--- a/engines/lure/disassembly/LURE.ASM
+++ b/engines/lure/disassembly/LURE.ASM
@@ -26,6 +26,7 @@ NUM_HORIZ_RECTS equ 10
NUM_VERT_RECTS equ 6
FULL_HORIZ_RECTS equ 18
FULL_VERT_RECTS equ 14
+MAX_NUM_LAYERS equ 4
ROOM_PATHS_WIDTH equ 40
ROOM_PATHS_HEIGHT equ 24
@@ -158,9 +159,11 @@ ANIM_START_COLOUR equ 28h
; Hotspot header record constants
HOTSPOT_TABLE_ENTRY_SIZE equ 9
+HSH_OFFSET equ 0
HSH_NAME equ 2
HSH_DESC equ 4
HSH_DESC_2 equ 6
+HSH_FLAGS equ 8
; Hotspot record constants
@@ -168,7 +171,7 @@ HS_DEST2_SET equ -1
HS_DEST2_X equ -5
HS_DEST2_Y equ -3
HS_ACTIONS equ 0
-HS_FLAGS equ 3
+HS_FLAGS1 equ 3
HS_ACTIONS_OFFSET equ 04h
HS_ROOM_NUM equ 06h
HS_LOAD_FLAG equ 08h
@@ -179,6 +182,7 @@ HS_Y equ 0Fh
HS_WIDTH equ 11h
HS_HEIGHT equ 13h
HS_LAYER equ 15h
+HS_FLAGS2 equ 16h
HS_TICK_PROC equ 17h
HS_WIDTH_COPY equ 19h
HS_HEIGHT_COPY equ 1Bh
@@ -194,6 +198,7 @@ HS_ACTION_CTR equ 2Ah
HS_V2B equ 2Bh
HS_HOTSPOT_SCRIPT_ID equ 2Dh
HS_USE_HOTSPOT_ID equ 2Fh
+HS_V32 equ 32h
HS_V33 equ 33h
HS_TALK_X equ 35h
HS_TALK_Y equ 36h
@@ -210,18 +215,25 @@ HS_PATHFIND_COVERED equ 49h
HS_PAUSE_CTR equ 4Ah
HS_BLOCKED_FLAG equ 4Ch
HS_V4D equ 4Dh
-HS_V4E equ 4Eh
+HS_START_ROOM_NUM equ 4Eh
HS_DIRECTION equ 50h
+HS_ACTION_HOTSPOT equ 50h
HS_DEST_HOTSPOT equ 52h
HS_DEST_X equ 54h
HS_DEST_Y equ 56h
HS_V58 equ 58h
HS_MOVEMENT_SRC_OFFSET equ 5Ah
+HS_SUPPORT_TABLE equ 5Ch
HS_BLOCKED_SUPPORT_OFFSET equ 5Eh
HS_EXIT_CTR equ 60h
HS_ACTION_OFFSET equ 61h
HS_FIRST_ACTION_OFFSET equ 63h
+; Hotspot FLAGS1 flags
+HOTSPOTFLAG_HIGHLIGHTED equ 0x80
+HOTSPOTFLAG_SKIP equ 0x40
+HOTSPOTFLAG_20 equ 0x20
+
; Pixel record constants
PIXEL_DISK_ID equ 0
PIXEL_FLAGS equ 2
@@ -247,6 +259,7 @@ GOEWIN_HOTSPOT_ID equ 3EFh
FIRST_OBJECT_HOTSPOT_ID equ 408h
START_EXIT_HOTSPOT_ID equ 2710h
BOTTLE_HOTSPOT_ID equ 2710h
+START_NONVISUAL_HOTSPOT_ID equ 7530h
; Room exit record constants
@@ -272,8 +285,10 @@ REHS_HOTSPOT1_OFFSET equ 0Dh
REHS_HOTSPOT2_OFFSET equ 0Fh
; Room header record constants
+RH_OFFSET equ 0
RH_ROOM_NUM equ 2
RH_DESC_ID equ 4
+RH_FLAGS equ 8
RH_TABLE_ENTRY_SIZE equ 9
; Room record constants
@@ -404,6 +419,25 @@ BS_FINAL equ 2
; Miscellaneous constants
TALK_COUNTDOWN_MAX equ 40
+; Equates for variables in segment allocated at runtime
+ask_num_names equ 30D4h
+ask_name_list equ 30D6h
+data_31e4 equ 31E4h
+saved_zero equ 3350h
+saved_room_number equ 3356h
+saved_hotspot_id equ 3358h
+saved_num_inventory_items equ 3360h
+saved_menu_items_proc equ 3368h
+saved_menubar_block_size equ 336ah
+saved_display_character_proc eqy 336ch
+saved_char_width equ 336eh
+saved_font2_segment equ 3370h
+saved_screen_width equ 3374h
+saved_data_segment2 equ 3376h
+saved_room_number2 equ 3379h
+saved_font_segment equ 337bh
+saved_num_groats equ 337eh
+
;------------------------------------------------------------ seg_code ----
seg_code segment byte public
@@ -468,7 +502,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:0071 E8 A046 call sub_249 ; (A0BA)
273F:0074 E8 08D7 call clear_layer_rects
273F:0077 E8 08F5 call room_load_layers
-273F:007A E8 760F call sub_189 ; (768C)
+273F:007A E8 760F call animations_preload
273F:007D FF 16 074E call word ptr ds:[74Eh] ; (273F:074E=8010h)
273F:0081 E8 0963 call sub_16 ; (09E7)
273F:0084 E8 0A77 call sub_19 ; (0AFE)
@@ -482,8 +516,8 @@ TALK_COUNTDOWN_MAX equ 40
273F:009D E8 3D94 call sequence_execute ; Exeecute room script
273F:00A0 E8 0BDF loc_11: call hotspots_load
-273F:00A3 E8 4738 call sub_113 ; (47DE)
-273F:00A6 E8 6038 call sub_138 ; (60E1)
+273F:00A3 E8 4738 call animations_preload_ticks
+273F:00A6 E8 6038 call check_player_bumped
273F:00A9 E8 1462 call room_add_animations
273F:00AC E8 08B2 call clear_info_table
273F:00AF E8 40E4 call animation_tick
@@ -1085,7 +1119,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:0515 C7 06 0746 FA00 mov screen_size, SCREEN_HEIGHT*SCREEN_WIDTH
273F:051B C7 06 0748 0140 mov screen_width, SCREEN_WIDTH
273F:0521 C7 06 074C 0A00 mov menubar_block_size, MENUBAR_Y_SIZE*SCREEN_WIDTH
-273F:0527 C7 06 074E 346D mov data_555,346Dh ; (31E4:074E=0)
+273F:0527 C7 06 074E 346D mov data_555, offset vga_346d
273F:052D C7 06 0750 3527 mov segment_screen_proc, vga_segment_screen
273F:0533 C7 06 0752 340F mov show_compressed_screen_proc, offset vga_show_compressed_screen
273F:0539 C7 06 0754 37F2 mov add_animation_proc, offset vga_add_animation
@@ -1330,7 +1364,7 @@ TALK_COUNTDOWN_MAX equ 40
; Called from: 273F:6614
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
- sub_11 proc near
+ backup_variables 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]
@@ -1343,32 +1377,32 @@ TALK_COUNTDOWN_MAX equ 40
273F:080B A1 11D6 mov ax, mouse_x2
273F:080E A3 0782 mov saved_mouse_x, ax
273F:0811 A1 076C mov ax, menu_items_proc
-273F:0814 26: A3 3368 mov es:data_78e,ax ; (0874:3368=4758h)
+273F:0814 26: A3 3368 mov es:saved_menu_items_proc, ax
273F:0818 A0 9835 mov al, num_inventory_items
-273F:081B 26: A2 3360 mov es:data_76e,al ; (0874:3360=0FFh)
+273F:081B 26: A2 3360 mov es:saved_num_inventory_items, al
273F:081F A1 BC49 mov ax, num_groats
-273F:0822 26: A3 337E mov es:data_88e,ax ; (0874:337E=0)
-273F:0826 A1 4CE4 mov ax,word ptr ds:[data_segment2]
-273F:0829 26: A3 3376 mov es:data_84e,ax ; (0874:3376=0A321h)
+273F:0822 26: A3 337E mov es:saved_num_groats, ax
+273F:0826 A1 4CE4 mov ax, word ptr ds:data_segment2
+273F:0829 26: A3 3376 mov es:saved_data_segment2, ax
273F:082D A1 4CF2 mov ax, font_segment
-273F:0830 26: A3 337B mov es:data_86e,ax ; (0874:337B=5806h)
+273F:0830 26: A3 337B mov es:saved_font_segment, ax
273F:0834 A1 4CF0 mov ax, font2_segment
-273F:0837 26: A3 3370 mov es:data_82e,ax ; (0874:3370=0F5Eh)
+273F:0837 26: A3 3370 mov es:saved_font2_segment, ax
273F:083B 26: C7 06 3362 0000 mov word ptr es:data_77e,0 ; (0874:3362=0AF06h)
273F:0842 A1 1924 mov ax, hotspot_id
-273F:0845 26: A3 3358 mov es:data_73e,ax ; (0874:3358=5E69h)
+273F:0845 26: A3 3358 mov es:saved_hotspot_id, ax
273F:0849 A1 9832 mov ax, room_number
-273F:084C 26: A3 3356 mov es:data_72e,ax ; (0874:3356=289Ah)
+273F:084C 26: A3 3356 mov es:saved_room_number, ax
273F:0850 A1 074C mov ax, menubar_block_size
-273F:0853 26: A3 336A mov es:data_79e,ax ; (0874:336A=7500h)
+273F:0853 26: A3 336A mov es:saved_menubar_block_size, ax
273F:0857 A1 0748 mov ax, screen_width
-273F:085A 26: A3 3374 mov es:data_83e,ax ; (0874:3374=1EA1h)
+273F:085A 26: A3 3374 mov es:saved_screen_width, ax
273F:085E A1 076A mov ax, display_character_proc
-273F:0861 26: A3 336C mov es:data_80e,ax ; (0874:336C=9A07h)
+273F:0861 26: A3 336C mov es:saved_display_character_proc, ax
273F:0865 A1 074A mov ax, char_width
-273F:0868 26: A3 336E mov es:data_81e,ax ; (0874:336E=8090h)
+273F:0868 26: A3 336E mov es:saved_char_width, ax
273F:086C 8B 36 076E mov si, data_571
-273F:0870 8B 04 mov ax,[si]
+273F:0870 8B 04 mov ax, [si]
273F:0872 26: A3 33DE mov es:data_92e,ax ; (0874:33DE=0A21Dh)
273F:0876 8B 44 02 mov ax,[si+2]
273F:0879 26: A3 33DC mov es:data_91e,ax ; (0874:33DC=11A2h)
@@ -1379,7 +1413,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:0888 06 push es
273F:0889 1F pop ds
273F:088A C3 retn
- sub_11 endp
+ backup_variables endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; JUMP POINT
@@ -1781,23 +1815,23 @@ TALK_COUNTDOWN_MAX equ 40
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
273F:0AFE sub_19 proc near
-273F:0AFE úBE 0B38 mov si,offset data_598 ; (31E4:0B38=0)
-273F:0B01 B9 0003 mov cx,3
+273F:0AFE úBE 0B38 mov si, offset rects_layer_1 + 166
+273F:0B01 B9 0003 mov cx, MAX_NUM_LAYERS - 1
273F:0B04 locloop_87: ; xref 273F:0B25
-273F:0B04 úBB 0009 mov bx,offset copyright+9 ; (31E4:0009=' ')
+273F:0B04 úBB 0009 mov bx, 9
273F:0B07 loc_88: ; xref 273F:0B1F
-273F:0B07 80 38 FF cmp byte ptr [bx+si],0FFh
+273F:0B07 80 38 FF cmp byte ptr [bx+si], 0FFh
273F:0B0A 74 10 je loc_89 ; Jump if equal
-273F:0B0C C6 40 12 FE mov byte ptr [bx+si+12h],0FEh
-273F:0B10 C6 40 24 FE mov byte ptr [bx+si+24h],0FEh
-273F:0B14 C6 40 36 FE mov byte ptr [bx+si+36h],0FEh
-273F:0B18 C6 40 48 FE mov byte ptr [bx+si+48h],0FEh
+273F:0B0C C6 40 12 FE mov byte ptr [bx+si+12h], 0FEh
+273F:0B10 C6 40 24 FE mov byte ptr [bx+si+24h], 0FEh
+273F:0B14 C6 40 36 FE mov byte ptr [bx+si+36h], 0FEh
+273F:0B18 C6 40 48 FE mov byte ptr [bx+si+48h], 0FEh
273F:0B1C loc_89: ; xref 273F:0B0A
-273F:0B1C 83 EB 01 sub bx,1
+273F:0B1C 83 EB 01 sub bx, 1
273F:0B1F 73 E6 jnc loc_88 ; Jump if carry=0
-273F:0B21 81 C6 0100 add si,100h
-273F:0B25 E2 DD loop locloop_87 ; Loop if cx > 0
+273F:0B21 81 C6 0100 add si, 100h ; Move to next layer
+273F:0B25 E2 DD loop locloop_87
273F:0B27 C3 retn
sub_19 endp
@@ -2133,7 +2167,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:0D0A EB 06 jmp short loc_111 ; (0D12)
273F:0D0C loc_110: ; xref 273F:0D02
273F:0D0C úBE 63B1 mov si, offset hotspot_table_4
-273F:0D0F 2D 7530 sub ax,7530h
+273F:0D0F 2D 7530 sub ax, START_NONVISUAL_HOTSPOT_ID
273F:0D12 loc_111: ; xref 273F:0CF0, 0CFD, 0D0A
273F:0D12 03 F0 add si,ax
273F:0D14 D1 E0 shl ax,1 ; Shift w/zeros fill
@@ -2175,7 +2209,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:0D41 EB 06 jmp short loc_114 ; (0D49)
273F:0D43 loc_113: ; xref 273F:0D39
273F:0D43 BE 63B1 mov si, offset hotspot_table_4
-273F:0D46 2D 7530 sub ax,7530h
+273F:0D46 2D 7530 sub ax, START_NONVISUAL_HOTSPOT_ID
273F:0D49 loc_114: ; xref 273F:0D27, 0D34, 0D41
273F:0D49 03 F0 add si,ax
273F:0D4B D1 E0 shl ax,1 ; Shift w/zeros fill
@@ -2198,7 +2232,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:0D56 07 pop es
273F:0D57 8E DD mov ds,bp
273F:0D59 55 push bp
-273F:0D5A úBF 31E6 mov di,31E6h ; (273F:31E6=0CDh)
+273F:0D5A úBF 31E6 mov di, offset popmenu_entry_contents
273F:0D5D 26: C7 45 FE 0000 mov word ptr es:[di-2],0
273F:0D63 úBE 623E mov si, offset hotspot_table_3
273F:0D66 BD 2710 mov bp, START_EXIT_HOTSPOT_ID
@@ -2227,7 +2261,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:0D7D 8A 44 08 mov al,[si+8]
273F:0D80 3C 0F cmp al,0Fh
273F:0D82 74 06 je loc_117 ; Jump if equal
-273F:0D84 84 06 9836 test al,ds:data_55e ; (0000:9836=46h)
+273F:0D84 84 06 9836 test al, header_flag_mask
273F:0D88 74 1D jz loc_118 ; Jump if zero
273F:0D8A loc_117: ; xref 273F:0D82
273F:0D8A 8B C5 mov ax,bp
@@ -2245,7 +2279,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:0D9E 07 pop es
273F:0D9F 5E pop si
273F:0DA0 1F pop ds
-273F:0DA1 26: 83 06 31E4 01 add word ptr es:[31E4h],1 ; (273F:31E4=0E4h)
+273F:0DA1 26: 83 06 31E4 01 add es:data_31e4, 1
273F:0DA7 loc_118: ; xref 273F:0D7B, 0D88
273F:0DA7 83 C5 01 add bp,1
273F:0DAA 83 C6 09 add si,9
@@ -2259,46 +2293,44 @@ TALK_COUNTDOWN_MAX equ 40
; Called from: 273F:66EC, 6787, 680A, 6827, 684A
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:0DAF sub_34 proc near
-273F:0DAF C7 06 31E4 0000 mov word ptr ds:[31E4h],0 ; (273F:31E4=0E4h)
+ prepare_ask_item_list proc near
+273F:0DAF C7 06 31E4 0000 mov data_31e4, 0
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
- nlure.lst Sourcer v6.09 17-Nov- 5 5:53 pm Page 36
-
+273F:0DBB 2D 0001 sub ax, 1
+273F:0DBE 33 DB xor bx, bx ; Set actions word index in hotspot
+273F:0DC0 3C 10 cmp al, ACTION_LOOK_THROUGH - 1
273F:0DC2 72 05 jb loc_119 ; Jump if below
-273F:0DC4 úBB 0002 mov bx,data_1e+2 ; (0000:0002=0)
-273F:0DC7 2C 10 sub al,10h
+273F:0DC4 BB 0002 mov bx, 2
+273F:0DC7 2C 10 sub al, 10h
273F:0DC9 loc_119: ; xref 273F:0DC2
273F:0DC9 BA 0001 mov dx,1
-273F:0DCC 8A C8 mov cl,al
-273F:0DCE D3 E2 shl dx,cl ; Shift w/zeros fill
+273F:0DCC 8A C8 mov cl, al
+273F:0DCE D3 E2 shl dx, cl ; Set bitmask within actions word
273F:0DD0 1E push ds
273F:0DD1 07 pop es
-273F:0DD2 8E DD mov ds,bp
-273F:0DD4 úBF 31E6 mov di,31E6h ; (273F:31E6=0CDh)
-273F:0DD7 26: 8B 0E 3379 mov cx,es:data_266 ; (273F:3379=62C0h)
-273F:0DDC úBE BF49 mov si,data_58e ; (0000:BF49=5)
-273F:0DDF BD 0001 mov bp,1
-273F:0DE2 E8 0029 call sub_35 ; (0E0E)
+273F:0DD2 8E DD mov ds, bp
+273F:0DD4 úBF 31E6 mov di, offset popmenu_entry_contents
+273F:0DD7 26: 8B 0E 3379 mov cx, es:saved_room_number2
+273F:0DDC úBE BF49 mov si, offset room_info_table + RH_TABLE_ENTRY_SIZE
+273F:0DDF BD 0001 mov bp, 1
+273F:0DE2 E8 0029 call prepare_ask_item_list_inner
273F:0DE5 úBE 5D98 mov si, offset hotspot_table_2
273F:0DE8 BD 03E8 mov bp, PLAYER_HOTSPOT_ID
-273F:0DEB E8 0020 call sub_35 ; (0E0E)
+273F:0DEB E8 0020 call prepare_ask_item_list_inner
273F:0DEE úBE 5EB8 mov si, offset hotspot_table_5
273F:0DF1 BD 0408 mov bp, FIRST_OBJECT_HOTSPOT_ID
-273F:0DF4 E8 0017 call sub_35 ; (0E0E)
+273F:0DF4 E8 0017 call prepare_ask_item_list_inner
273F:0DF7 úBE 623E mov si, offset hotspot_table_3
273F:0DFA BD 2710 mov bp, START_EXIT_HOTSPOT_ID
-273F:0DFD E8 000E call sub_35 ; (0E0E)
+273F:0DFD E8 000E call prepare_ask_item_list_inner
273F:0E00 úBE 63B1 mov si, offset hotspot_table_4
-273F:0E03 BD 7530 mov bp,7530h
-273F:0E06 E8 0005 call sub_35 ; (0E0E)
-273F:0E09 8C DD mov bp,ds
+273F:0E03 BD 7530 mov bp, START_NONVISUAL_HOTSPOT_ID
+273F:0E06 E8 0005 call prepare_ask_item_list_inner
+273F:0E09 8C DD mov bp, ds
273F:0E0B 06 push es
273F:0E0C 1F pop ds
273F:0E0D C3 retn
- sub_34 endp
+ prepare_ask_item_list endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
@@ -2307,82 +2339,82 @@ TALK_COUNTDOWN_MAX equ 40
; Called from: 273F:0DE2, 0DEB, 0DF4, 0DFD, 0E06
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:0E0E sub_35 proc near
-273F:0E0E loc_120: ; xref 273F:0EAD
+ prepare_ask_item_list_inner proc near
273F:0E0E ú56 push si
-273F:0E0F 83 3C FF cmp word ptr [si],0FFFFh
+273F:0E0F 83 3C FF cmp word ptr [si+HSH_OFFSET], 0FFFFh ; End of list reached?
273F:0E12 75 02 jne loc_121 ; Jump if not equal
-273F:0E14 5E pop si
+273F:0E14 5E pop si ; Exit
273F:0E15 C3 retn
273F:0E16 loc_121: ; xref 273F:0E12
-273F:0E16 8A 44 08 mov al,[si+8]
-273F:0E19 3C 0F cmp al,0Fh
+273F:0E16 8A 44 08 mov al, [si+HSH_FLAGS]
+273F:0E19 3C 0F cmp al, 15
273F:0E1B 74 09 je loc_122 ; Jump if equal
-273F:0E1D 84 06 9836 test al,ds:data_96e ; (2711:9836=3Ch)
+273F:0E1D 84 06 9836 test al, header_flag_mask
273F:0E21 75 03 jnz loc_122 ; Jump if not zero
273F:0E23 E9 0080 jmp loc_128 ; (0EA6)
273F:0E26 loc_122: ; xref 273F:0E1B, 0E21
-273F:0E26 8B 44 02 mov ax,[si+2]
-273F:0E29 8B 34 mov si,[si]
-273F:0E2B F6 44 03 20 test byte ptr [si+3],20h ; ' '
+273F:0E26 8B 44 02 mov ax, [si+HSH_NAME] ; Get hotspot name
+273F:0E29 8B 34 mov si, [si+HSH_OFFSET]
+273F:0E2B F6 44 03 20 test byte ptr [si+HS_FLAGS1], 20h
273F:0E2F 75 75 jnz loc_128 ; Jump if not zero
-273F:0E31 F6 44 03 80 test byte ptr [si+3],80h
+273F:0E31 F6 44 03 80 test byte ptr [si+HS_FLAGS1], 80h
273F:0E35 74 6F jz loc_128 ; Jump if zero
-273F:0E37 81 FD 03E8 cmp bp, PLAYER_HOTSPOT_ID
-273F:0E3B 72 18 jb loc_124 ; Jump if below
-273F:0E3D F6 44 03 10 test byte ptr [si+3],10h
+273F:0E37 81 FD 03E8 cmp bp, PLAYER_HOTSPOT_ID ; Is it the room list?
+273F:0E3B 72 18 jb loc_124 ; Jump if yes
+273F:0E3D F6 44 03 10 test byte ptr [si+HS_FLAGS1], 10h
273F:0E41 74 05 jz loc_123 ; Jump if zero
-273F:0E43 39 4C 06 cmp [si+6],cx
+273F:0E43 39 4C 06 cmp [si+HS_ROOM_NUM], cx
273F:0E46 75 5E jne loc_128 ; Jump if not equal
273F:0E48 loc_123: ; xref 273F:0E41
-273F:0E48 26: 3B 2E 3350 cmp bp,es:data_43e ; (0000:3350=0C033h)
+273F:0E48 26: 3B 2E 3350 cmp bp, es:saved_zero
273F:0E4D 74 57 je loc_128 ; Jump if equal
273F:0E4F 3B 2E 1924 cmp bp, hotspot_id
273F:0E53 74 51 je loc_128 ; Jump if equal
-273F:0E55 loc_124: ; xref 273F:0E3B
-273F:0E55 85 10 test dx,[bx+si]
-273F:0E57 74 4D jz loc_128 ; Jump if zero
-273F:0E59 3D 017A cmp ax,17Ah
-273F:0E5C 74 43 je loc_127 ; Jump if equal
-273F:0E5E 3D 0147 cmp ax,147h
-273F:0E61 74 3E je loc_127 ; Jump if equal
-273F:0E63 úBE 30D6 mov si,data_41e ; (0000:30D6=81h)
-273F:0E66 26: 8B 0E 30D4 mov cx,es:data_40e ; (0000:30D4=6AEh)
-273F:0E6B 0B C9 or cx,cx ; Zero ?
+273F:0E55 loc_124:
+273F:0E55 85 10 test dx, [bx+si] ; Check if hotspot has action
+273F:0E57 74 4D jz loc_128 ; Skip if not
+273F:0E59 3D 017A cmp ax, 17Ah ; Special name Ids to skip
+273F:0E5C 74 43 je loc_127
+273F:0E5E 3D 0147 cmp ax, 147h
+273F:0E61 74 3E je loc_127
+
+273F:0E63 úBE 30D6 mov si, offset ask_name_list
+273F:0E66 26: 8B 0E 30D4 mov cx, es:ask_num_names
+273F:0E6B 0B C9 or cx, cx ; Zero ?
273F:0E6D 74 0A jz loc_126 ; Jump if zero
273F:0E6F locloop_125: ; xref 273F:0E77
-273F:0E6F 26: 3B 04 cmp ax,es:[si]
-273F:0E72 74 2D je loc_127 ; Jump if equal
-273F:0E74 83 C6 02 add si,2
+273F:0E6F 26: 3B 04 cmp ax, es:[si] ; Is item's name in list?
+273F:0E72 74 2D je loc_127 ; If yes than skip
+273F:0E74 83 C6 02 add si, 2 ; Move to next entry
273F:0E77 E2 F6 loop locloop_125 ; Loop if cx > 0
273F:0E79 loc_126: ; xref 273F:0E6D
-273F:0E79 26: 89 2D mov es:[di],bp
-273F:0E7C 26: C6 45 02 01 mov byte ptr es:[di+2],1
-273F:0E81 83 C7 03 add di,3
-273F:0E84 26: 83 06 31E4 01 add word ptr es:data31e4, 1
-273F:0E8A 26: 89 04 mov es:[si],ax
-273F:0E8D 26: 83 06 30D4 01 add word ptr es:data_40e,1 ; (0000:30D4=6AEh)
+273F:0E79 26: 89 2D mov es:[di], bp ; Save hotspot Id in output list
+273F:0E7C 26: C6 45 02 01 mov byte ptr es:[di+2], 1
+273F:0E81 83 C7 03 add di, 3
+273F:0E84 26: 83 06 31E4 01 add word ptr es:data_31e4, 1
+273F:0E8A 26: 89 04 mov es:[si], ax ; Save hotspot's name
+273F:0E8D 26: 83 06 30D4 01 add es:ask_num_names, 1
273F:0E93 1E push ds
273F:0E94 06 push es
273F:0E95 1F pop ds
273F:0E96 53 push bx
273F:0E97 52 push dx
-273F:0E98 80 E4 1F and ah,1Fh
+273F:0E98 80 E4 1F and ah, 1Fh
273F:0E9B E8 6E9C call decode_string
273F:0E9E 5A pop dx
273F:0E9F 5B pop bx
273F:0EA0 1F pop ds
273F:0EA1 loc_127: ; xref 273F:0E5C, 0E61, 0E72
-273F:0EA1 26: 8B 0E 3379 mov cx,es:data_44e ; (0000:3379=20CEh)
-273F:0EA6 loc_128: ; xref 273F:0E23, 0E2F, 0E35, 0E46
- ; 0E4D, 0E53, 0E57
-273F:0EA6 5E pop si
-273F:0EA7 83 C6 09 add si,9
-273F:0EAA 83 C5 01 add bp,1
-273F:0EAD E9 FF5E jmp loc_120 ; (0E0E)
- sub_35 endp
+273F:0EA1 26: 8B 0E 3379 mov cx, es:saved_room_number2
+273F:0EA6 loc_128:
+
+273F:0EA6 5E pop si ; Move to next header entry
+273F:0EA7 83 C6 09 add si, HOTSPOT_TABLE_ENTRY_SIZE
+273F:0EAA 83 C5 01 add bp, 1
+273F:0EAD E9 FF5E jmp prepare_ask_item_list_inner
+ prepare_ask_item_list_inner endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
@@ -3066,7 +3098,7 @@ TALK_COUNTDOWN_MAX equ 40
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:1391 8A 7F 04 mov bh,[bx+4]
+273F:1391 8A 7F 04 mov bh, [bx+4]
273F:1394 8B 2E 0748 mov bp, screen_width
273F:1398 úBE 4B93 mov si, offset action_name
273F:139B loc_188: ; Loop to display action
@@ -3119,7 +3151,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:1406 loc_192: ; xref 273F:13DA, 13DF
273F:1406 C6 07 01 mov byte ptr [bx], CHAR_ACTION_START_WALK
273F:1409 33 C0 xor ax,ax ; Zero register
-273F:140B A2 9834 mov data_1084, al
+273F:140B A2 9834 mov cursor_state, al
273F:140E úBF 65F3 mov di, offset player_action_support_record
273F:1411 89 7F 01 mov [bx+CURRENT_ACTION_SUPPORT_TABLE], di
273F:1414 89 05 mov [di],ax
@@ -4528,7 +4560,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:1C89 BD 2710 mov bp, START_EXIT_HOTSPOT_ID
273F:1C8C E8 01BC call room_check_hotspots
273F:1C8F úBF 63B1 mov di, offset hotspot_table_4
-273F:1C92 BD 7530 mov bp,7530h
+273F:1C92 BD 7530 mov bp, START_NONVISUAL_HOTSPOT_ID
273F:1C95 E8 01B3 call room_check_hotspots
273F:1C98 úBF 5D98 mov di, offset hotspot_table_2
273F:1C9B BD 03E8 mov bp, PLAYER_HOTSPOT_ID
@@ -4558,7 +4590,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:1CDF BD 03E8 mov bp, PLAYER_HOTSPOT_ID
273F:1CE2 E8 0166 call room_check_hotspots
273F:1CE5 úBF 63B1 mov di, offset hotspot_table_4
-273F:1CE8 BD 7530 mov bp,7530h
+273F:1CE8 BD 7530 mov bp, START_NONVISUAL_HOTSPOT_ID
273F:1CEB E8 015D call room_check_hotspots
273F:1CEE úBF 5EB8 mov di, offset hotspot_table_5
273F:1CF1 BD 0408 mov bp, FIRST_OBJECT_HOTSPOT_ID
@@ -4723,12 +4755,12 @@ TALK_COUNTDOWN_MAX equ 40
273F:1E52 39 54 06 cmp [si+HS_ROOM_NUM], dx ; Entry in same room?
273F:1E55 75 4F jne loc_463 ; No, so go move to next
-273F:1E57 F6 44 03 80 test byte ptr [si+HS_FLAGS],80h
+273F:1E57 F6 44 03 80 test byte ptr [si+HS_FLAGS1], HOTSPOTFLAG_HIGHLIGHTED
273F:1E5B 75 06 jnz loc_459 ; Jump if not zero
-273F:1E5D F6 44 03 40 test byte ptr [si+HS_FLAGS],40h
+273F:1E5D F6 44 03 40 test byte ptr [si+HS_FLAGS1], HOTSPOTFLAG_SKIP
273F:1E61 75 43 jnz loc_463
273F:1E63 loc_459:
-273F:1E63 F6 44 03 20 test byte ptr [si+HS_FLAGS],20h
+273F:1E63 F6 44 03 20 test byte ptr [si+HS_FLAGS1], HOTSPOTFLAG_20
273F:1E67 75 3D jnz loc_463 ; Jump if not zero
273F:1E69 81 FD 0409 cmp bp,409h
273F:1E6D 73 05 jae loc_460 ; Jump if above or =
@@ -4782,7 +4814,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:1ED2 3B C8 cmp cx, ax
273F:1ED4 72 D0 jb loc_463 ; Jump if below
273F:1ED6 loc_465: ; xref 273F:1EA4
-273F:1ED6 80 4C 03 80 or byte ptr [si+HS_FLAGS], 80h
+273F:1ED6 80 4C 03 80 or byte ptr [si+HS_FLAGS1], HOTSPOTFLAG_HIGHLIGHTED
273F:1EDA 89 2E 1924 mov hotspot_id, bp
273F:1EDE 8B 45 02 mov ax, [di+2]
273F:1EE1 80 E4 1F and ah, 1Fh
@@ -8030,7 +8062,8 @@ TALK_COUNTDOWN_MAX equ 40
; SUBROUTINE
;
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-
+
+ vga_346d proc near
273F:346D úBE 0992 mov si, offset rects_layer_0
273F:3470 83 C6 4C add si,4Ch
273F:3473 C7 06 0DA6 0D92 mov rect_x_start, room_layers
@@ -8126,6 +8159,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:3526 loc_ret_694: ; xref 273F:350F
273F:3526 C3 retn
+ vga_346d endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
@@ -10717,7 +10751,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:45F9 C3 retn
273F:45FA loc_881: ; xref 273F:45EF
273F:45FA 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:45FD 3B 47 50 cmp ax, [bx+HS_DIRECTION]
+273F:45FD 3B 47 50 cmp ax, [bx+HS_ACTION_HOTSPOT]
273F:4600 74 C6 je loc_877 ; Jump if equal
273F:4602 80 7F 44 04 cmp byte ptr [bx+HS_CHAR_MODE], CHARMODE_4
273F:4606 74 E9 je loc_880 ; Jump if equal
@@ -10781,7 +10815,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:4692 C6 47 44 08 mov byte ptr [bx+HS_CHAR_MODE], CHARMODE_8
273F:4696 C7 47 42 001E mov word ptr [bx+HS_DELAY_CTR], 30
273F:469B 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
-273F:469E 89 47 50 mov [bx+HS_DIRECTION], ax
+273F:469E 89 47 50 mov [bx+HS_ACTION_HOTSPOT], ax
273F:46A1 loc_889: ; xref 273F:4690
273F:46A1 33 C0 xor ax,ax ; Zero register
273F:46A3 C3 retn
@@ -10882,7 +10916,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:471D 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
273F:4720 8A 07 mov al, [bx] ; Get current action
273F:4722 5B pop bx
-273F:4723 81 3E BA1B 7530 cmp active_hotspot_id, 7530h
+273F:4723 81 3E BA1B 7530 cmp active_hotspot_id, START_NONVISUAL_HOTSPOT_ID
273F:4729 72 17 jb loc_897
273F:472B 5E pop si ; Non selectable hotspot
273F:472C 5F pop di
@@ -11007,40 +11041,40 @@ TALK_COUNTDOWN_MAX equ 40
; Called from: 273F:00A3
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:47DE sub_113 proc near
+ animations_preload_ticks proc near
273F:47DE A1 9832 mov ax, room_number
273F:47E1 E8 C506 call get_room_resource_pointer2
273F:47E4 83 7C 13 FF cmp word ptr [si+ROOM_ENTRY_TIME], 0FFFFh
273F:47E8 74 3F je loc_909 ; Jump if equal
273F:47EA 8B 0E B0AA mov cx, game_time_ctr
273F:47EE 2B 4C 13 sub cx, [si+ROOM_ENTRY_TIME]
-273F:47F1 74 36 jz loc_909 ; Jump if zero
+273F:47F1 74 36 jz loc_909 ; Exit if same
273F:47F3 C6 06 1926 01 mov data_669, 1
-273F:47F8 81 F9 012C cmp cx, 12Ch
+273F:47F8 81 F9 012C cmp cx, 300 ; Max value
273F:47FC 72 03 jb locloop_906 ; Jump if below
-273F:47FE B9 012C mov cx, 12Ch
+273F:47FE B9 012C mov cx, 300
-273F:4801 locloop_906: ; xref 273F:47FC, 4827
+273F:4801 locloop_906:
273F:4801 51 push cx
273F:4802 úBF B14E mov di, offset animation_table
273F:4805 B9 002D mov cx, NUM_ANIMATION_SLOTS
273F:4808 locloop_907: ; xref 273F:4824
273F:4808 F6 45 0C FF test byte ptr [di+ANIM_LAYER], 0FFh
-273F:480C 74 13 jz loc_908 ; Jump if zero
+273F:480C 74 13 jz loc_908 ; Skip animation
273F:480E 81 7D 1B 0408 cmp word ptr [di+ANIM_HOTSPOT_ID], FIRST_OBJECT_HOTSPOT_ID
-273F:4813 72 0C jb loc_908 ; Jump if below
+273F:4813 72 0C jb loc_908 ; Skip character hotspots
273F:4815 8B 75 19 mov si, [di+ANIM_HOTSPOT_OFFSET]
273F:4818 8B 45 11 mov ax, [di+ANIM_TICK_PROC]
273F:481B 57 push di
273F:481C 51 push cx
-273F:481D FF D0 call ax
+273F:481D FF D0 call ax ; Call hotspot's tick proc
273F:481F 59 pop cx
273F:4820 5F pop di
273F:4821 loc_908: ; xref 273F:480C, 4813
-273F:4821 83 C7 29 add di, ANIMATION_SLOT_SIZE
-273F:4824 E2 E2 loop locloop_907 ; Loop if cx > 0
+273F:4821 83 C7 29 add di, ANIMATION_SLOT_SIZE ; Move to next animation
+273F:4824 E2 E2 loop locloop_907
273F:4826 59 pop cx
273F:4827 E2 D8 loop locloop_906 ; Loop if cx > 0
@@ -11048,7 +11082,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:4829 loc_909: ; xref 273F:47E8, 47F1
273F:4829 C6 06 1926 00 mov data_669, 0
273F:482E C3 retn
- sub_113 endp
+ animations_preload_ticks endp
273F:482F 00 db 0
@@ -12243,14 +12277,14 @@ TALK_COUNTDOWN_MAX equ 40
273F:5078 5B pop bx
273F:5079 C3 retn
-273F:507A loc_1034: ; HS[44h] != 6
+273F:507A loc_1034:
273F:507A F7 44 42 FFFF test word ptr [si+HS_DELAY_CTR], 0FFFFh
273F:507F 74 27 jz loc_1038 ; Jump if zero
273F:5081 E8 F2E2 call character_update_movement
-273F:5084 F7 44 50 FFFF test word ptr [si+HS_DIRECTION], 0FFFFh
+273F:5084 F7 44 50 FFFF test word ptr [si+HS_ACTION_HOTSPOT], 0FFFFh
273F:5089 74 17 jz loc_1035 ; Jump if zero
273F:508B 56 push si
-273F:508C 8B 5C 50 mov bx, [si+HS_DIRECTION]
+273F:508C 8B 5C 50 mov bx, [si+HS_ACTION_HOTSPOT]
273F:508F E8 BC56 call get_room_resource_pointer
273F:5092 5B pop bx
273F:5093 87 F3 xchg si, bx ; si=char Id,
@@ -12268,7 +12302,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:50A7 5B pop bx
273F:50A8 loc_1038: ; xref 273F:507F, 509B, 50A0
273F:50A8 33 C0 xor ax,ax ; Zero register
-273F:50AA 89 44 50 mov [si+HS_DIRECTION], ax
+273F:50AA 89 44 50 mov [si+HS_ACTION_HOTSPOT], ax
273F:50AD 86 44 44 xchg [si+HS_CHAR_MODE], al
273F:50B0 50 push ax
273F:50B1 E8 F2D3 call character_pathfind_clear
@@ -12546,7 +12580,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:52C2 F7 44 61 FFFF test word ptr [si+HS_ACTION_OFFSET], 0FFFFh
273F:52C7 74 28 jz loc_1077 ; Jump if no cached actions
273F:52C9 53 push bx
-273F:52CA F7 44 4E FFFF test word ptr [si+HS_V4E], 0FFFFh
+273F:52CA F7 44 4E FFFF test word ptr [si+HS_START_ROOM_NUM], 0FFFFh
273F:52CF 74 18 jz loc_1075 ; Jump if zero
273F:52D1 8B 5F 01 mov bx, [bx+CURRENT_ACTION_SUPPORT_TABLE]
273F:52D4 81 FB 13BE cmp bx, 13BEh
@@ -12743,7 +12777,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:5430 8B 45 1B mov ax,[di+ANIM_HOTSPOT_ID] ; Move item into char's inventory
273F:5433 89 47 06 mov [bx+HS_ROOM_NUM], ax
273F:5436 E8 0920 call player_inc_inventory_items
-273F:5439 81 3E BA19 7530 cmp use_hotspot_id, 7530h
+273F:5439 81 3E BA19 7530 cmp use_hotspot_id, START_NONVISUAL_HOTSPOT_ID
273F:543F 73 1B jae loc_ret_1090 ; Jump if above or =
273F:5441 56 push si
273F:5442 57 push di
@@ -13339,9 +13373,9 @@ TALK_COUNTDOWN_MAX equ 40
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
tell_proc proc near
-273F:5809 8B DD mov bx,bp
-273F:580B 8B 07 mov ax,[bx]
-273F:580D 83 C5 02 add bp,2
+273F:5809 8B DD mov bx, bp
+273F:580B 8B 07 mov ax, [bx] ; Talked to Hotspot Id
+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 hotspot_action_precheck
@@ -13352,55 +13386,55 @@ TALK_COUNTDOWN_MAX equ 40
273F:5821 EB 68 jmp short loc_1134 ; (588B)
273F:5823 loc_1129: ; xref 273F:581B
273F:5823 8B 0E BA19 mov cx, use_hotspot_id
-273F:5827 B8 0001 mov ax,1
-273F:582A BA 007C mov dx,7Ch
+273F:5827 B8 0001 mov ax, 1
+273F:582A BA 007C mov dx, 7Ch
273F:582D E8 0922 call talk_converse_2
273F:5830 E8 FDC3 call hotspot_get_action_sequence
-273F:5833 79 03 jns loc_1130 ; Jump if not sign
+273F:5833 79 03 jns loc_1130
273F:5835 E9 0B79 jmp display_message_dialog_3
273F:5838 loc_1130: ; xref 273F:5833
273F:5838 E8 E5F9 call sequence_execute
273F:583B 75 4E jnz loc_1134 ; Jump if not zero
-273F:583D 8B 44 06 mov ax, [si+HS_ROOM_NUM]
-273F:5840 89 47 4E mov [bx+HS_V4E],ax
+273F:583D 8B 44 06 mov ax, [si+HS_ROOM_NUM] ; si/di=Player, bx=Ratpouch
+273F:5840 89 47 4E mov [bx+HS_START_ROOM_NUM], ax
273F:5843 C7 47 61 0005 mov word ptr [bx+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
-273F:5848 C6 47 4D 00 mov byte ptr [bx+4Dh],0
-273F:584C 8B 4F 5C mov cx,[bx+5Ch]
-273F:584F 89 4F 69 mov [bx+69h],cx
-273F:5852 8B 44 06 mov ax,[si+6]
-273F:5855 89 47 6B mov [bx+6Bh],ax
-273F:5858 C6 47 68 02 mov byte ptr [bx+68h],2
+273F:5848 C6 47 4D 00 mov byte ptr [bx+HS_V4D], 0
+273F:584C 8B 4F 5C mov cx, [bx+HS_SUPPORT_TABLE] ; Get support table to use
+273F:584F 89 4F 69 mov [bx+HS_FIRST_ACTION_OFFSET+CURRENT_ACTION_RECORD_SIZE+CURRENT_ACTION_SUPPORT_TABLE], cx
+273F:5852 8B 44 06 mov ax, [si+HS_ROOM_NUM]
+273F:5855 89 47 6B mov [bx+HS_FIRST_ACTION_OFFSET+CURRENT_ACTION_RECORD_SIZE+CURRENT_ACTION_ROOM_NUM], ax
+273F:5858 C6 47 68 02 mov byte ptr [bx+HS_FIRST_ACTION_OFFSET+CURRENT_ACTION_RECORD_SIZE], CHAR_ACTION_DISPATCH_ACTION
273F:585C 56 push si
273F:585D 57 push di
-273F:585E 8B F5 mov si,bp
-273F:5860 8B F9 mov di,cx
+273F:585E 8B F5 mov si, bp ; si => instruction data
+273F:5860 8B F9 mov di, cx ; cx => start of support table buffer
273F:5862 1E push ds
273F:5863 07 pop es
-273F:5864 loc_1131: ; xref 273F:5875, 587B
-273F:5864 úAD lodsw ; String [si] to ax
+273F:5864 loc_1131:
+273F:5864 úAD lodsw ; Get next word
273F:5865 8B D0 mov dx,ax
-273F:5867 loc_1132: ; xref 273F:5870
-273F:5867 AB stosw ; Store ax to es:[di]
-273F:5868 0B C0 or ax,ax ; Zero ?
+273F:5867 loc_1132:
+273F:5867 AB stosw ; Store in output buffer
+273F:5868 0B C0 or ax, ax ; Zero ?
273F:586A 74 11 jz loc_1133 ; Jump if zero
273F:586C AD lodsw ; String [si] to ax
-273F:586D 3D 7D00 cmp ax,7D00h
+273F:586D 3D 7D00 cmp ax, 7D00h
273F:5870 75 F5 jne loc_1132 ; Jump if not equal
-273F:5872 83 FA 17 cmp dx,17h
+273F:5872 83 FA 17 cmp dx, 17h
273F:5875 75 ED jne loc_1131 ; Jump if not equal
-273F:5877 B8 0020 mov ax,20h
+273F:5877 B8 0020 mov ax, 20h
273F:587A AB stosw ; Store ax to es:[di]
273F:587B EB E7 jmp short loc_1131 ; (5864)
273F:587D loc_1133: ; xref 273F:586A
-273F:587D 26: C7 45 FE 0020 mov word ptr es:[di-2],20h
+273F:587D 26: C7 45 FE 0020 mov word ptr es:[di-2], 20h
273F:5883 AB stosw ; Store ax to es:[di]
-273F:5884 8B EE mov bp,si
-273F:5886 83 ED 02 sub bp,2
+273F:5884 8B EE mov bp, si
+273F:5886 83 ED 02 sub bp, 2
273F:5889 5F pop di
273F:588A 5E pop si
-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:588B loc_1134:
+273F:588B 8B DD mov bx, bp
+273F:588D C7 07 0000 mov word ptr [bx], 0
273F:5891 E9 FCF9 jmp character_walking_end_2
tell_proc endp
@@ -13683,7 +13717,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:5A82 8B DE mov bx, si
273F:5A84 03 5C 61 add bx, [si+HS_ACTION_OFFSET]
273F:5A87 83 C3 63 add bx, HS_FIRST_ACTION_OFFSET
-273F:5A8A 8B 44 4E mov ax, [si+HS_V4E]
+273F:5A8A 8B 44 4E mov ax, [si+HS_START_ROOM_NUM]
273F:5A8D 89 47 03 mov [bx+CURRENT_ACTION_ROOM_NUM], ax
273F:5A90 E9 FAEE jmp character_walking_end
return_proc endp
@@ -13993,7 +14027,7 @@ TALK_COUNTDOWN_MAX equ 40
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
+273F:5CCA BB 0009 mov bx, 9
273F:5CCD E8 06D2 call display_message_dialog_2
273F:5CD0 E8 F923 call hotspot_get_action_sequence
273F:5CD3 78 0C js loc_1184 ; Jump if sign=1
@@ -14004,20 +14038,20 @@ TALK_COUNTDOWN_MAX equ 40
273F:5CDF 74 2A je loc_ret_1186 ; Jump if equal
273F:5CE1 loc_1184: ; xref 273F:5CD3
273F:5CE1 8B 0E BA1B mov cx, active_hotspot_id
-273F:5CE5 8B 55 1B mov dx,[di+1Bh]
-273F:5CE8 8B D8 mov bx,ax
+273F:5CE5 8B 55 1B mov dx, [di+ANIM_HOTSPOT_ID]
+273F:5CE8 8B D8 mov bx, ax
273F:5CEA E9 06A3 jmp display_message_dialog
273F:5CED loc_1185: ; xref 273F:5CDA
273F:5CED 56 push si
273F:5CEE A1 BA19 mov ax, use_hotspot_id
273F:5CF1 E8 AFF6 call get_room_resource_pointer2
-273F:5CF4 8B 4D 1B mov cx,[di+1Bh]
-273F:5CF7 89 4C 06 mov [si+6],cx
+273F:5CF4 8B 4D 1B mov cx, [di+ANIM_HOTSPOT_ID]
+273F:5CF7 89 4C 06 mov [si+HS_ROOM_NUM], cx
273F:5CFA 5E pop si
273F:5CFB E8 005B call player_inc_inventory_items
-273F:5CFE BB 0020 mov bx,20h
+273F:5CFE BB 0020 mov bx, 20h
273F:5D01 8B 0E BA1B mov cx, active_hotspot_id
-273F:5D05 8B 55 1B mov dx,[di+1Bh]
+273F:5D05 8B 55 1B mov dx, [di+ANIM_HOTSPOT_ID]
273F:5D08 E9 0685 jmp display_message_dialog
273F:5D0B loc_ret_1186: ; xref 273F:5CBD, 5CD5, 5CDF
@@ -14558,8 +14592,8 @@ TALK_COUNTDOWN_MAX equ 40
; Called from: 273F:00A6
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:60E1 sub_138 proc near
-273F:60E1 loc_1230: ; xref 273F:6106
+ check_player_bumped proc near
+
273F:60E1 úBF B14E mov di, offset animation_table
273F:60E4 BE 6CEF mov si, offset player_hotspot_rec
273F:60E7 E8 B021 call character_find_impinging_chars
@@ -14570,11 +14604,11 @@ TALK_COUNTDOWN_MAX equ 40
273F:60FC E8 E311 call character_paused_list_countdown
273F:60FF E8 E094 call animation_tick
273F:6102 8F 06 6D06 pop player_tick_handler
-273F:6106 EB D9 jmp short loc_1230 ; (60E1)
+273F:6106 EB D9 jmp check_player_bumped
273F:6108 loc_ret_1231: ; xref 273F:60F0
273F:6108 C3 retn
- sub_138 endp
+ check_player_bumped endp
273F:6109 00 db 0
@@ -14882,7 +14916,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:6302 80 E4 1F and ah, 1Fh
273F:6305 E8 1A32 call decode_string
273F:6308 A1 983D mov ax, data_434 ; (273F:983D=3B75h)
-273F:630B E8 005A call sub_148 ; (6368)
+273F:630B E8 005A call decode_character_and_hotspot_names
273F:630E BF CCF4 mov di, offset talk_text_buffer
273F:6311 A1 983D mov ax, data_434
273F:6314 E8 1A23 call decode_string
@@ -14921,26 +14955,27 @@ TALK_COUNTDOWN_MAX equ 40
; SUBROUTINE
;
; Called from: 273F:630B, 6428
- ; ax=11fh, dx=player id, si=player hotspot, di=player anim slot
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:6368 sub_148 proc near
-273F:6368 E8 1B28 call sub_208 ; (7E93)
+ decode_character_and_hotspot_names proc near
+273F:6368 E8 1B28 call decode_character_and_hotspot_names_init
273F:636B 8A D8 mov bl,al
273F:636D 56 push si
273F:636E 53 push bx
273F:636F BF 4B43 mov di, offset hotspot_name
-273F:6372 A1 9843 mov ax,data_437 ; (273F:9843=3F75h)
-273F:6375 E8 1B2E call sub_209 ; (7EA6)
+273F:6372 A1 9843 mov ax, current_hotspot_id
+273F:6375 E8 1B2E call decode_hotspot_name
273F:6378 5B pop bx
273F:6379 5E pop si
273F:637A 56 push si
-273F:637B BF 4B93 mov di, action_name
-273F:637E A1 9845 mov ax,data_438 ; (273F:9845=448Bh)
-273F:6381 E8 1B22 call sub_209 ; (7EA6)
+273F:637B BF 4B93 mov di, offset character_name
+273F:637E A1 9845 mov ax, current_character_id
+273F:6381 E8 1B22 call decode_hotspot_name
273F:6384 5E pop si
273F:6385 C3 retn
- sub_148 endp
+ decode_character_and_hotspot_names endp
+
+ ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;* No entry point to code
273F:6386 B9 03E7 mov cx,3E7h
@@ -14955,7 +14990,7 @@ TALK_COUNTDOWN_MAX equ 40
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
display_message_dialog proc near
-273F:6390 89 16 4B41 mov data_792, dx
+273F:6390 89 16 4B41 mov saved_dest_character, dx
273F:6394 53 push bx
273F:6395 8B D9 mov bx, cx
273F:6397 E8 A94E call get_room_resource_pointer
@@ -14971,7 +15006,7 @@ TALK_COUNTDOWN_MAX equ 40
display_message_dialog_2:
273F:63A2 8B 16 BA1B mov dx, active_hotspot_id
-273F:63A6 89 16 4B41 mov data_792, dx
+273F:63A6 89 16 4B41 mov saved_dest_character, 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
@@ -15040,16 +15075,16 @@ TALK_COUNTDOWN_MAX equ 40
273F:6411 8B D8 mov bx, ax
273F:6413 80 E7 7F and bh, 7Fh ; bx=811fh
273F:6416 A1 BA19 mov ax, use_hotspot_id ; ax=41Bh
-273F:6419 A3 9843 mov data_437,ax
+273F:6419 A3 9843 mov current_hotspot_id, ax
273F:641C A1 BA1B mov ax, active_hotspot_id ; ax=41bh
-273F:641F A3 9845 mov data_438,ax
+273F:641F A3 9845 mov current_character_id, ax
273F:6422 56 push si
273F:6423 57 push di
273F:6424 55 push bp
273F:6425 53 push bx
273F:6426 8B C3 mov ax,bx
; ax=11fh, dx=player id, si=player hotspot, di=player anim slot
-273F:6428 E8 FF3D call sub_148 ; (6368)
+273F:6428 E8 FF3D call decode_character_and_hotspot_names
273F:642B 5B pop bx
273F:642C E8 248D call display_dialog
273F:642F 5D pop bp
@@ -15064,7 +15099,7 @@ TALK_COUNTDOWN_MAX equ 40
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, data_792
+273F:643A 8B 0E 4B41 mov cx, saved_dest_character
273F:643E E9 FCEE jmp talk_setup_3
273F:6441 loc_1266: ; xref 273F:6438
273F:6441 B9 03E7 mov cx, 3E7h
@@ -15133,9 +15168,9 @@ TALK_COUNTDOWN_MAX equ 40
273F:64CB 8B 45 1B mov ax, [di+ANIM_HOTSPOT_ID]
273F:64CE A3 983B mov talk_character_id, ax
273F:64D1 8B 44 3E mov ax, [si+HS_V3E]
-273F:64D4 A3 9843 mov data_437,ax ; (273F:9843=3F75h)
+273F:64D4 A3 9843 mov current_hotspot_id, ax
273F:64D7 8B 44 40 mov ax, [si+HS_V40]
-273F:64DA A3 9845 mov data_438,ax ; (273F:9845=448Bh)
+273F:64DA A3 9845 mov current_character_id, ax
273F:64DD C3 retn
;* No entry point to code
273F:64DE 89 1E 983F mov data_1090, bx
@@ -15301,18 +15336,18 @@ TALK_COUNTDOWN_MAX equ 40
room_show_rightclick_menu proc near
-273F:6614 E8 A1D7 call sub_11 ; (07EE)
+273F:6614 E8 A1D7 call backup_variables
273F:6617 loc_1283: ; xref 273F:670A
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 data_75e, 1
-273F:6629 B8 0007 mov ax,7
+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
273F:6630 03 06 336E add ax,ds:data_81e ; (0874:336E=8090h)
273F:6634 A3 335A mov ds:data_74e,ax ; (0874:335A=0C70Fh)
-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:6637 C7 06 3350 0000 mov ds:saved_zero, 0
+273F:663D A1 3356 mov ax, ds:saved_room_number
+273F:6640 A3 3379 mov saved_room_number2, ax
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
@@ -15394,26 +15429,32 @@ TALK_COUNTDOWN_MAX equ 40
273F:66DE loc_1290: ; xref 273F:668B
273F:66DE EB 55 jmp action_handle
+ ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
+ ; SUBROUTINE
+ ;
+ ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:66E0 E8 0242 action_ask: call sub_159 ; (6925)
-273F:66E3 BB 33F1 mov bx,33F1h
+ action_ask proc near
+273F:66E0 E8 0242 call sub_159 ; (6925)
+273F:66E3 BB 33F1 mov bx, 33F1h
273F:66E6 E8 0567 call sub_166 ; (6C50)
-273F:66E9 B8 0001 mov ax,1
-273F:66EC E8 A6C0 call sub_34 ; (0DAF)
+273F:66E9 B8 0001 mov ax, ACTION_GET
+273F:66EC E8 A6C0 call prepare_ask_item_list
273F:66EF F7 06 31E4 FFFF test popmenu_entry_count, 0FFFFh
273F:66F5 74 09 jz loc_1291 ; Jump if zero
273F:66F7 E8 0297 call menu_make_selections
-273F:66FA 0B C0 or ax,ax ; Zero ?
+273F:66FA 0B C0 or ax, ax ; Zero ?
273F:66FC 78 05 js loc_1292 ; Jump if sign=1
273F:66FE EB 35 jmp action_handle
-273F:6700 loc_1291: ; xref 273F:66A7, 66BC, 66F5
-273F:6700 E8 000A call sub_156 ; (670D)
-273F:6703 loc_1292: ; xref 273F:66AE, 66C3, 66FC, 6763
+273F:6700 loc_1291:
+273F:6700 E8 000A call sub_156
+273F:6703 loc_1292:
273F:6703 1E push ds
-273F:6704 8E DD mov ds,bp
+273F:6704 8E DD mov ds, bp
273F:6706 E8 08FC call menubar_clear_image
273F:6709 1F pop ds
273F:670A E9 FF0A jmp loc_1283 ; (6617)
+ action_ask endp
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;
@@ -15456,13 +15497,13 @@ TALK_COUNTDOWN_MAX equ 40
273F:6741 loc_1295: ; xref 273F:676E, 67EA
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)
-273F:674E loc_1296: ; xref 273F:6746
-273F:674E BA 006A mov dx,6Ah
+273F:6748 A1 3356 mov ax, saved_room_number
+273F:674B A3 3379 mov saved_room_number2, ax
+273F:674E loc_1296:
+273F:674E BA 006A mov dx,6Ah ; Actions set to select from
273F:6751 B8 07FD mov ax,7FDh
273F:6754 E8 0203 call popmenu_populate_list
-273F:6757 E8 0237 call menu_make_selections
+273F:6757 E8 0237 call menu_make_selections ; Choose action from list
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 data_3380, 8
@@ -15472,19 +15513,19 @@ TALK_COUNTDOWN_MAX equ 40
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
+273F:6770 3D 0017 cmp ax, ACTION_RETURN
273F:6773 74 4B je loc_1304 ; Jump if equal
-273F:6775 3D 000A cmp ax,0Ah
+273F:6775 3D 000A cmp ax, ACTION_USE
273F:6778 74 0A je loc_1299 ; Jump if equal
-273F:677A 3D 0014 cmp ax,14h
+273F:677A 3D 0014 cmp ax, ACTION_DRINK
273F:677D 74 05 je loc_1299 ; Jump if equal
-273F:677F 3D 000B cmp ax,0Bh
+273F:677F 3D 000B cmp ax, ACTION_GIVE
273F:6782 75 03 jne loc_1300 ; Jump if not equal
273F:6784 loc_1299: ; xref 273F:6778, 677D
-273F:6784 B8 0001 mov ax,1
+273F:6784 B8 0001 mov ax, ACTION_GET
273F:6787 loc_1300: ; xref 273F:6782
-273F:6787 E8 A625 call sub_34 ; (0DAF)
-273F:678A F7 06 31E4 FFFF test word ptr ds:[31E4h],0FFFFh ; (273F:31E4=0E4h)
+273F:6787 E8 A625 call prepare_ask_item_list
+273F:678A F7 06 31E4 FFFF test data_31e4, 0FFFFh
273F:6790 75 05 jnz loc_1302 ; Jump if not zero
273F:6792 loc_1301: ; xref 273F:683B
273F:6792 úE8 FF78 call sub_156 ; (670D)
@@ -15497,7 +15538,7 @@ TALK_COUNTDOWN_MAX equ 40
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
-273F:67AB A3 3379 mov data_266,ax ; (273F:3379=62C0h)
+273F:67AB A3 3379 mov saved_room_number2, ax
273F:67AE loc_1303: ; xref 273F:67A9
273F:67AE 83 FB 12 cmp bx,12h
273F:67B1 74 4E je loc_1308 ; Jump if equal
@@ -15537,9 +15578,9 @@ TALK_COUNTDOWN_MAX equ 40
273F:6801 loc_1308: ; xref 273F:67B1
273F:6801 BB 33F1 mov bx,33F1h
273F:6804 E8 0449 call sub_166 ; (6C50)
-273F:6807 B8 0001 mov ax,1
-273F:680A E8 A5A2 call sub_34 ; (0DAF)
-273F:680D F7 06 31E4 FFFF test word ptr ds:[31E4h],0FFFFh ; (273F:31E4=0E4h)
+273F:6807 B8 0001 mov ax, ACTION_GET
+273F:680A E8 A5A2 call prepare_ask_item_list
+273F:680D F7 06 31E4 FFFF test data_31e4, 0FFFFh
273F:6813 74 26 jz loc_1310 ; Jump if zero
273F:6815 E8 0179 call menu_make_selections
273F:6818 0B C0 or ax,ax ; Zero ?
@@ -15548,9 +15589,9 @@ TALK_COUNTDOWN_MAX equ 40
273F:681E loc_1309: ; xref 273F:67B6
273F:681E BB 33E4 mov bx,33E4h
273F:6821 E8 042C call sub_166 ; (6C50)
-273F:6824 B8 000B mov ax,0Bh
-273F:6827 E8 A585 call sub_34 ; (0DAF)
-273F:682A F7 06 31E4 FFFF test word ptr ds:[31E4h],0FFFFh ; (273F:31E4=0E4h)
+273F:6824 B8 000B mov ax, ACTION_GIVE
+273F:6827 E8 A585 call prepare_ask_item_list
+273F:682A F7 06 31E4 FFFF test data_31e4, 0FFFFh
273F:6830 74 09 jz loc_1310 ; Jump if zero
273F:6832 E8 015C call menu_make_selections
273F:6835 0B C0 or ax,ax ; Zero ?
@@ -15563,9 +15604,9 @@ TALK_COUNTDOWN_MAX equ 40
273F:6841 loc_1312: ; xref 273F:67BD
273F:6841 BB 33E0 mov bx,33E0h
273F:6844 E8 0409 call sub_166 ; (6C50)
-273F:6847 B8 000A mov ax,0Ah
-273F:684A E8 A562 call sub_34 ; (0DAF)
-273F:684D F7 06 31E4 FFFF test word ptr ds:[31E4h],0FFFFh ; (273F:31E4=0E4h)
+273F:6847 B8 000A mov ax, ACTION_USE
+273F:684A E8 A562 call prepare_ask_item_list
+273F:684D F7 06 31E4 FFFF test data_31e4, 0FFFFh
273F:6853 74 E6 jz loc_1310 ; Jump if zero
273F:6855 E8 0139 call menu_make_selections
273F:6858 0B C0 or ax,ax ; Zero ?
@@ -16283,7 +16324,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:6D2C 1E push ds
273F:6D2D 07 pop es
273F:6D2E 8E DD mov ds,bp
-273F:6D30 úBF 31E4 mov di,31E4h ; (273F:31E4=0E4h)
+273F:6D30 úBF 31E4 mov di, offset data_31e4
273F:6D33 0B C9 or cx,cx ; Zero ?
273F:6D35 79 05 jns loc_1370 ; Jump if not sign
273F:6D37 8A 4C FF mov cl,[si-1]
@@ -16972,7 +17013,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:7192 89 45 06 mov [di+ANIM_HEIGHT], ax
273F:7195 8A 44 15 mov al, [si+HS_LAYER] ; Copy layer
273F:7198 88 45 0C mov [di+ANIM_LAYER], al
-273F:719B 8A 44 16 mov al, [si+16h]
+273F:719B 8A 44 16 mov al, [si+HS_FLAGS2]
273F:719E 88 45 0D mov [di+ANIM_FLAGS], al
273F:71A1 C6 45 10 01 mov byte ptr [di+ANIM_CAN_UNLOAD], 1
273F:71A5 8B 44 17 mov ax, [si+HS_TICK_PROC] ; Copy tick handler proc
@@ -17785,10 +17826,10 @@ TALK_COUNTDOWN_MAX equ 40
; Called from: 273F:007A
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:768C sub_189 proc near
+ animations_preload proc near
273F:768C E8 8B6C call read_and_validate_header
273F:768F úBE B883 mov si, offset animation_block_list
-273F:7692 loc_1492:
+273F:7692 loc_1492:
273F:7692 ú8B 1C mov bx, [si]
273F:7694 0B DB or bx, bx ; End of list?
273F:7696 74 09 jz loc_1493 ; Jump if yes
@@ -17796,7 +17837,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:769B 80 67 02 F7 and byte ptr [bx+2], 0F7h
273F:769F EB F1 jmp short loc_1492
-273F:76A1 loc_1493:
+273F:76A1 loc_1493:
273F:76A1 úBE B883 mov si, offset animation_block_list
273F:76A4 loc_1494:
273F:76A4 ú8B 1C mov bx, [si]
@@ -17822,12 +17863,11 @@ TALK_COUNTDOWN_MAX equ 40
; Called from: 273F:8FD0
; si = Offset of table for animation resources for a room
-273F:76CE sub_190:
-273F:76CE loc_1496:
+ animations_preload_2:
273F:76CE ú8B 1C mov bx, [si]
273F:76D0 0B DB or bx, bx ; End of list reached?
273F:76D2 74 1A jz loc_1498 ; Jump if yes
-273F:76D4 F7 47 03 FFFF test word ptr [bx+3], 0FFFFh
+273F:76D4 F7 47 03 FFFF test word ptr [bx+3], 0FFFFh
273F:76D9 75 0E jnz loc_1497 ; Jump if not zero
273F:76DB 89 1D mov [di], bx ; Store in output list
273F:76DD 83 C7 02 add di, 2 ; Move to next position
@@ -17839,17 +17879,16 @@ TALK_COUNTDOWN_MAX equ 40
273F:76E7 72 0A jc loc_1499 ; Jump if carry Set
273F:76E9 loc_1497: ; xref 273F:76D9
273F:76E9 83 C6 02 add si,2
-273F:76EC EB E0 jmp short loc_1496 ; (76CE)
+273F:76EC EB E0 jmp animations_preload_2
273F:76EE loc_1498: ; xref 273F:76CC, 76D2
273F:76EE C7 05 0000 mov word ptr [di],0
273F:76F2 C3 retn
273F:76F3 loc_1499: ; xref 273F:76E7
273F:76F3 C7 05 0000 mov word ptr [di],0
273F:76F7 E8 00A8 call sub_192 ; (77A2)
-273F:76FA 73 90 jnc sub_189
+273F:76FA 73 90 jnc animations_preload
273F:76FC C3 retn
- sub_189 endp
-
+ animations_preload endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
@@ -18590,7 +18629,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:7C03 hotspot_disable proc near
273F:7C03 E8 90E2 call get_room_resource_pointer
-273F:7C06 80 64 03 7F and byte ptr [si+HS_FLAGS], 7Fh
+273F:7C06 80 64 03 7F and byte ptr [si+HS_FLAGS1], 7Fh
273F:7C0A C3 retn
hotspot_disable endp
@@ -18603,7 +18642,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:7C0B hotspot_enable proc near
273F:7C0B E8 90DA call get_room_resource_pointer
-273F:7C0E 80 4C 03 80 or byte ptr [si+HS_FLAGS], 80h
+273F:7C0E 80 4C 03 80 or byte ptr [si+HS_FLAGS1], 80h
273F:7C12 C3 retn
hotspot_enable endp
@@ -18741,7 +18780,6 @@ TALK_COUNTDOWN_MAX equ 40
decode_string proc near
-273F:7D3A loc_1558: ; xref 273F:7EEA
273F:7D3A ú1E push ds
273F:7D3B 25 1FFF and ax,1FFFh
273F:7D3E E8 0099 call decode_string_init
@@ -18772,7 +18810,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:7D6A BE 4B43 mov si, offset hotspot_name
273F:7D6D 3C 31 cmp al,31h ; '1'
273F:7D6F 74 03 je loc_1563 ; Jump if equal
-273F:7D71 úBE 4B93 mov si, offset action_name
+273F:7D71 úBE 4B93 mov si, offset character_name
273F:7D74 loc_1563:
273F:7D74 úAC lodsb ; String [si] to al
273F:7D75 0A C0 or al,al
@@ -18990,7 +19028,7 @@ TALK_COUNTDOWN_MAX equ 40
; Called from: 273F:6368
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:7E93 sub_208 proc near
+ decode_character_and_hotspot_names_init proc near
273F:7E93 1E push ds
273F:7E94 E8 FF43 call decode_string_init
273F:7E97 loc_1584: ; xref 273F:7E9F
@@ -19002,8 +19040,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:7EA1 E8 FF01 call read_bit
273F:7EA4 1F pop ds
273F:7EA5 C3 retn
- sub_208 endp
-
+ decode_character_and_hotspot_names_init endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
@@ -19011,49 +19048,49 @@ TALK_COUNTDOWN_MAX equ 40
; Called from: 273F:6375, 6381
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
-273F:7EA6 sub_209 proc near
-273F:7EA6 3D 03E7 cmp ax,3E7h
+ decode_hotspot_name proc near
+273F:7EA6 3D 03E7 cmp ax, 3E7h
273F:7EA9 74 05 je loc_1586 ; Jump if equal
-273F:7EAB 3D 03E5 cmp ax,3E5h
+273F:7EAB 3D 03E5 cmp ax, 3E5h
273F:7EAE 75 04 jne loc_1587 ; Jump if not equal
273F:7EB0 loc_1586: ; xref 273F:7EA9
-273F:7EB0 C6 05 00 mov byte ptr [di],0
+273F:7EB0 C6 05 00 mov byte ptr [di], 0
273F:7EB3 C3 retn
273F:7EB4 loc_1587: ; xref 273F:7EAE
-273F:7EB4 E8 8E6A call get_room_resource_pointer3
-273F:7EB7 8B 44 02 mov ax,[si+2]
-273F:7EBA F6 C3 FF test bl,0FFh
-273F:7EBD 74 28 jz loc_1593 ; Jump if zero
-273F:7EBF F6 C4 C0 test ah,0C0h
+273F:7EB4 E8 8E6A call get_room_resource_pointer4
+273F:7EB7 8B 44 02 mov ax, [si+HSH_NAME]
+273F:7EBA F6 C3 FF test bl, 0FFh ; Special handling?
+273F:7EBD 74 28 jz loc_1593 ; If not then go do normal decode
+273F:7EBF F6 C4 C0 test ah, 0C0h ; Test upper two bits
273F:7EC2 74 0C jz loc_1589 ; Jump if zero
273F:7EC4 78 05 js loc_1588 ; Jump if sign=1
-273F:7EC6 BE 4F90 mov si,4F90h
-273F:7EC9 EB 0D jmp short loc_1590 ; (7ED8)
-273F:7ECB loc_1588: ; xref 273F:7EC4
-273F:7ECB BE 4F92 mov si,4F92h
-273F:7ECE EB 08 jmp short loc_1590 ; (7ED8)
-273F:7ED0 loc_1589: ; xref 273F:7EC2
-273F:7ED0 F6 C4 20 test ah,20h ; ' '
-273F:7ED3 74 12 jz loc_1593 ; Jump if zero
-273F:7ED5 úBE 4F95 mov si,4F95h ; (273F:4F95=44h)
+273F:7EC6 BE 4F90 mov si, offset a_str ; 'a'
+273F:7EC9 EB 0D jmp short loc_1590
+273F:7ECB loc_1588:
+273F:7ECB BE 4F92 mov si, offset an_str
+273F:7ECE EB 08 jmp short loc_1590
+273F:7ED0 loc_1589:
+273F:7ED0 F6 C4 20 test ah, 20h
+273F:7ED3 74 12 jz loc_1593
+273F:7ED5 úBE 4F95 mov si, offset the_str ; 'the'
273F:7ED8 loc_1590: ; xref 273F:7EC9, 7ECE
273F:7ED8 50 push ax
273F:7ED9 1E push ds
273F:7EDA 07 pop es
-273F:7EDB loc_1591: ; xref 273F:7EE1
+273F:7EDB loc_1591: ; Loop to copy selected article
273F:7EDB úAC lodsb ; String [si] to al
273F:7EDC 0A C0 or al,al ; Zero ?
273F:7EDE 74 03 jz loc_1592 ; Jump if zero
273F:7EE0 AA stosb ; Store al to es:[di]
273F:7EE1 EB F8 jmp short loc_1591 ; (7EDB)
273F:7EE3 loc_1592: ; xref 273F:7EDE
-273F:7EE3 B0 20 mov al,20h ; ' '
+273F:7EE3 B0 20 mov al, 20h ; ' '
273F:7EE5 AA stosb ; Store al to es:[di]
273F:7EE6 58 pop ax
-273F:7EE7 loc_1593: ; xref 273F:7EBD, 7ED3
-273F:7EE7 80 E4 1F and ah,1Fh
-273F:7EEA E9 FE4D jmp loc_1558 ; (7D3A)
- sub_209 endp
+273F:7EE7 loc_1593:
+273F:7EE7 80 E4 1F and ah, 1Fh ; Default decoding
+273F:7EEA E9 FE4D jmp decode_string
+ decode_hotspot_name endp
db 0
@@ -19458,7 +19495,7 @@ TALK_COUNTDOWN_MAX equ 40
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
seq_method_3 proc near
-273F:81AE 88 1E 9836 mov data_1085, bl ; Set HS-435h(4802h)[34h]
+273F:81AE 88 1E 9836 mov header_flag_mask, bl
273F:81B2 C3 retn
seq_method_3 endp
@@ -19770,7 +19807,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:83F3 loc_1642: ; xref 273F:833A
273F:83F3 F6 44 28 40 test byte ptr [si+28h],40h ; '@'
273F:83F7 75 BB jnz loc_1640 ; Jump if not zero
-273F:83F9 8B 47 16 mov ax,[bx+16h]
+273F:83F9 8B 47 16 mov ax, [bx+HS_FLAGS2]
273F:83FC 89 44 24 mov [si+24h],ax
273F:83FF EB B3 jmp short loc_1640 ; (83B4)
273F:8401 loc_1643: ; xref 273F:8334, 83D0, 83E7, 83F1
@@ -21434,7 +21471,7 @@ TALK_COUNTDOWN_MAX equ 40
273F:8FC8 E8 84D7 call sub_45 ; (14A2)
273F:8FCB úBE B883 mov si, offset animation_block_list
273F:8FCE 8B FE mov di,si
-273F:8FD0 E8 E6FB call sub_190 ; (76CE)
+273F:8FD0 E8 E6FB call animations_preload_2
273F:8FD3 E8 EA89 call sub_195 ; (7A5F)
assume ds:seg_code
273F:8FD6 C6 06 9837 00 mov talk_dialog_active, 0
@@ -23287,7 +23324,7 @@ TALK_COUNTDOWN_MAX equ 40
seq_deactivate_hotspot proc near
273F:9E8E E8 6E57 call get_room_resource_pointer
-273F:9E91 81 FB 7530 cmp bx, 7530h ; Non-visual hotspot?
+273F:9E91 81 FB 7530 cmp bx, START_NONVISUAL_HOTSPOT_ID ; Non-visual hotspot?
273F:9E95 73 0A jae loc_1943 ; Skip unloading
273F:9E97 8B 7C 0B mov di,[si+HS_ANIM_OFFSET]
273F:9E9A 0B FF or di,di ; Is hotspot active?
@@ -23295,8 +23332,8 @@ TALK_COUNTDOWN_MAX equ 40
273F:9E9E E8 73D1 call animation_unload ; Unload hotspot
273F:9EA1 loc_1943:
273F:9EA1 C7 44 06 FFFF mov word ptr [si+HS_ROOM_NUM], 0FFFFh
-273F:9EA6 80 4C 03 20 or byte ptr [si+HS_FLAGS], 20h
-273F:9EAA 81 FB 7530 cmp bx,7530h
+273F:9EA6 80 4C 03 20 or byte ptr [si+HS_FLAGS1], 20h
+273F:9EAA 81 FB 7530 cmp bx, START_NONVISUAL_HOTSPOT_ID
273F:9EAE 73 04 jae loc_ret_1944 ; Jump if above or =
273F:9EB0 C6 44 15 FF mov byte ptr [si+HS_LAYER], 0FFh
@@ -23338,7 +23375,7 @@ TALK_COUNTDOWN_MAX equ 40
seq_add_item_to_inventory proc near
273F:9EC9 E8 6E1C call get_room_resource_pointer
273F:9ECC C7 44 06 03E8 mov word ptr [si+HS_ROOM_NUM], PLAYER_HOTSPOT_ID
-273F:9ED1 80 4C 03 80 or byte ptr [si+HS_FLAGS], 80h
+273F:9ED1 80 4C 03 80 or byte ptr [si+HS_FLAGS1], 80h
273F:9ED5 83 06 9835 01 add num_inventory_items, 1
273F:9EDA 8B 7C 0B mov di, [si+HS_ANIM_OFFSET]
273F:9EDD C3 retn
@@ -25160,7 +25197,7 @@ TALK_COUNTDOWN_MAX equ 40
31E4:0766 0000 fade_out_proc dw 0
31E4:0768 0000 data_568 dw 0
31E4:076A 0000 display_character_proc dw 0
-31E4:076C 0000 menu_items_proc dw 0
+31E4:076C 0000 menu_items_proc dw 0
31E4:076E 0000 data_571 dw 0
31E4:0770 0000 data_572 dw 0 ; xref 273F:0587, 273F:064E
31E4:0772 0000 toggle_menu_highlight_proc dw 0
@@ -25190,7 +25227,6 @@ TALK_COUNTDOWN_MAX equ 40
31E4:0B92 0100[00] rects_layer_2 db 256 dup (0)
31E4:0C92 0100[00] rects_layer_3 db 256 dup (0)
-
31E4:0ADE 00 data_593 db 0 ; xref 273F:09E7
31E4:0ADF 0026[00] db 38 dup (0)
31E4:0B05 00 data_594 db 0
@@ -25201,7 +25237,7 @@ TALK_COUNTDOWN_MAX equ 40
31E4:0B1E 00 00 00 db 0, 0, 0
31E4:0B21 00 data_597 db 0 ; Data table (indexed access)
31E4:0B22 0016[00] db 22 dup (0)
-31E4:0B38 00 data_598 db 0 ; xref 273F:0AFE
+31E4:0B38 00 db 0 ; xref 273F:0AFE
31E4:0B39 00A5[00] db 165 dup (0)
31E4:0BDE 00 data_599 db 0 ; xref 273F:09ED
31E4:0BDF 0048[00] db 72 dup (0)
@@ -25953,7 +25989,7 @@ TALK_COUNTDOWN_MAX equ 40
31E4:2F06 01 38 01 9C 00 9F db 01h, 38h, 01h, 9Ch, 00h, 9Fh
31E4:2F0C 01 0D 01 38 01 9C db 01h, 0Dh, 01h, 38h, 01h, 9Ch
31E4:2F12 00 9F 01 F7 db 00h, 9Fh, 01h,0F7h
-31E4:2F16 00 db 0
+31E4:2F16 00 db 0
31E4:2F17 38 01 CF 00 70 01 db 38h, 01h,0CFh, 00h, 70h, 01h
31E4:2F1D EF 00 28 01 9C 00 db 0EFh, 00h, 28h, 01h, 9Ch, 00h
31E4:2F23 9F 01 0E 01 38 01 db 9Fh, 01h, 0Eh, 01h, 38h, 01h
@@ -26202,9 +26238,11 @@ TALK_COUNTDOWN_MAX equ 40
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 db 0Dh, 00h, 00h
+31E4:3377 2F 01 db 2Fh, 01h
+31E4:3379 00CB dw 00CBh
+31E4:337B 00F9 dw 00F9h
+31E4:337D 0D 00 00 db 0Dh, 00h, 00h
31E4:3380 1C00 data_3380 dw 1C00h
31E4:3382 00 00 data_3382 dw 0
31E4:3384 D400 data_3384 dw 0D400h
@@ -26486,9 +26524,10 @@ TALK_COUNTDOWN_MAX equ 40
31E4:4B34 000C[00] db 13 dup (0)
31E4:4B40 00 data_791 db 0
-31E4:4B41 00 00 data_792 dw 0
+31E4:4B41 00 00 saved_dest_character dw 0
31E4:4B43 0050[00] hotspot_name db 80 dup (0)
+ character_name db ?
31E4:4B93 005D[00] action_name db 93 dup (0)
31E4:4BF0 00 data_794 db 0 ; xref 273F:207A, 273F:7016
@@ -26717,11 +26756,14 @@ TALK_COUNTDOWN_MAX equ 40
31E4:4F83 db 24h, 14h, 31h, 2Ch, 2Fh, 2Ch
31E4:4F89 db 00h
-31E4:4F8A 00 data_817 db 0
-31E4:4F8B 00 00 00 00 00 61 db 00h, 00h, 00h, 00h, 00h, 61h
-31E4:4F91 00 61 6E 00 db 00h, 61h, 6Eh, 00h
-31E4:4F95 74 68 65 db 74h, 68h, 65h
-31E4:4F98 0008[00] db 8 dup (0)
+31E4:4F8A 00 data_817 db 0
+31E4:4F8B 00 00 00 00 00 db 00h, 00h, 00h, 00h, 00h
+
+31E4:4F90 a_str db 'a', 0
+31E4:4F92 an_str db 'an', 0
+31E4:4F95 the_str db 'the', 0
+
+31E4:4F99 0007[00] db 7 dup (0)
31E4:4FA0 15 16 17 18 19 1A db 15h, 16h, 17h, 18h, 19h, 1Ah
31E4:4FA6 19 18 17 16 17 18 db 19h, 18h, 17h, 16h, 17h, 18h
31E4:4FAC 19 1A 19 18 17 16 db 19h, 1Ah, 19h, 18h, 17h, 16h
@@ -30432,13 +30474,9 @@ TALK_COUNTDOWN_MAX equ 40
31E4:982E 0000 new_room_x dw 0 ; xref 273F:6093
31E4:9830 0000 new_room_y dw 0 ; xref 273F:609F
31E4:9832 0001 room_number dw 1
-31E4:9834 00 data_1084 db 0 ; xref 273F:12AF, 273F:12BE
- ; 273F:12C5, 273F:132F
- ; 273F:140B, 273F:1C4B
- ; 273F:1C52, 273F:1C70
- ; 273F:5588
-31E4:9835 00 num_inventory_items db 0 ; xref 273F:59DB, 273F:5A03
-31E4:9836 01 data_1085 db 1
+31E4:9834 00 cursor_state db 0
+31E4:9835 00 num_inventory_items db 0
+31E4:9836 01 header_flag_mask db 1
31E4:9837 00 talk_dialog_active db 0
31E4:9838 0000 data_1087 dw 0
31E4:983A 00 data_1088 db 0
@@ -30446,7 +30484,8 @@ TALK_COUNTDOWN_MAX equ 40
31E4:983D 6B 00 db 6Bh, 00h
31E4:983F 03EA data_1090 dw 3EAh ; xref 273F:1FC8
31E4:9841 0000 data_1091 dw 0 ; xref 273F:1489
-31E4:9843 00 00 00 00 db 0, 0, 0, 0
+31E4:9843 0000 current_hotspot_id dw 0
+31E4:9845 0000 current_character_id dw 0
31E4:9847 0000 data_1093 dw 0 ; xref 273F:62B6
31E4:9849 00 pathfind_data db 00 ; Set of entries each 120 bytes
diff --git a/engines/lure/disassembly/Lure_notes.txt b/engines/lure/disassembly/Lure_notes.txt
index a4a744f509..0b95e8583c 100644
--- a/engines/lure/disassembly/Lure_notes.txt
+++ b/engines/lure/disassembly/Lure_notes.txt
@@ -33,13 +33,10 @@ animation_load/animation_load_2 - Makes a hotspot 'active' by loading it into
Input: load => bx = resource Id
load_2 => si = offset of hotspot record
-Seems to load a single animation entry into the runtime
- location for animations.
-
animation_load_entry - Not sure if this method is just for loading animations; it
does some checks, and if passed, then takes the word at offset
9h in the resource and jumps to that location. In calls I've
- seen so far, this is 7167h, which then calls animation_load
+ seen so far, this is 7167h, which then calls animation_load
Input: bx = Resource Id for animation entry
animation_load_entry_2 - Alternate form of the animation load
@@ -64,6 +61,14 @@ animation_unload/animation_unload_2 - Removes a hotspot from the active hotspot
sets field 0Bh of the hotspot (the offset in the animation list where
a hotspot is loaded) to zero.
+animations_preload - Decodes any animations ilsted for the current room, based
+ on a system list. This is likely intended to improve performance on
+ low end systems, as it means the bulk of animations are already decoded
+ before a new screen is faded in
+
+animations_preload_ticks - Handles repeatably calling the animation tick method
+ for hotspots in a room several times before the room is displayed
+
char_face_up/char_face_down/char_face_left/char_face_right - Faces the character
represented by a given hotspot in the given direction
Input: si = Hotspot record
@@ -206,13 +211,19 @@ copy_rectangle - Copys a 32x32 rectangular area from a source buffer to a
copy_protection_check - Performs the copy protection check. Note that in the
English version of the game supplied by Revolution, this has been cracked.
- This is
+ This is
decode_character - Decodes a character from a compressed bit-stream of text
Input: DL = current bit position for read is set
DS:SI = current byte to read data from
Output: AL = output byte
+decode_character_and_hotspot_names - Decodes the names of both the current
+ talking character as well as the active hotspot. Note that the
+ input and output fields/buffers are hardcoded, and not passed
+ to the method
+ Input: al = A value of zero suppresses adding the prefix
+
decode_file_entry - Decodes a file resource, normally a graphics screen
Input: dx = source data segment
es = destination segment (for example, A000h for direct to screen)
@@ -231,6 +242,9 @@ decode_string_init - Initialises a source pointer for decoding a compressed
dl = Starting bit position for reading string
+decode_hotspot_name - Decodes the name of a hotspot, prefixing with the
+ correct article of 'a', 'an', or 'the'
+
decode_and_fade_in_display - Decodes the data for a given screen, and then fades it into
view by using the defined fade in proc for the given video mode
Input: [buffer_segment1] = Loaded entry data
@@ -425,6 +439,10 @@ popmenu_populate_list - Populates the contents of the list used to define
Input: dx:ax = Bitset indicating which actions should be displayed, in
order of their placement in the action list
+prepare_ask_item_list - Creates a list of menuitems for the things a character
+ can be asked for
+ Input: ax = Action index whose context to generate the list for
+
protection_cycle_characters - Cycles through a single frame in the list of
possible characters in the copy protection check and displays them
on screen.