[Scummvm-cvs-logs] SF.net SVN: scummvm: [23418] scummvm/trunk/engines/lure/disassembly

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Sat Jul 8 10:45:03 CEST 2006


Revision: 23418
Author:   dreammaster
Date:     2006-07-08 01:44:53 -0700 (Sat, 08 Jul 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=23418&view=rev

Log Message:
-----------
General additions of newly understood hotspot fields, further decoded talk handling, ratpouch being freed, and several more script methods

Modified Paths:
--------------
    scummvm/trunk/engines/lure/disassembly/LURE.ASM
    scummvm/trunk/engines/lure/disassembly/Lure_notes.txt
Modified: scummvm/trunk/engines/lure/disassembly/LURE.ASM
===================================================================
--- scummvm/trunk/engines/lure/disassembly/LURE.ASM	2006-07-08 08:43:52 UTC (rev 23417)
+++ scummvm/trunk/engines/lure/disassembly/LURE.ASM	2006-07-08 08:44:53 UTC (rev 23418)
@@ -92,8 +92,12 @@
 NUM_ANIMATION_SLOTS       equ  2dh
 ANIMATION_SLOT_SIZE       equ  29h
 
-NUM_HOTSPOT_ACTION_SLOTS  equ  14h
-HOTSPOT_ACTION_SLOT_SIZE  equ  8
+NUM_PAUSED_CHARS_SLOTS    equ  14h
+PAUSED_CHAR_SLOT_SIZE     equ   8
+PC_SRC_CHAR_ID            equ   0
+PC_DEST_CHAR_ID           equ   2
+PC_COUNTER                equ   4
+PC_HOTSPOT_PTR            equ   6
 
 ACTION_GET                equ   1
 ACTION_PUSH               equ   3
@@ -145,11 +149,11 @@
 ANIM_HOTSPOT_ID           equ  1Bh
 ANIM_SKIP                 equ  1Dh
 ANIM_VOICE_CHAR_ID        equ  1Eh
-ANIM_V20                  equ  20h
+ANIM_CTR                  equ  20h
 ANIM_CHAR_RECT_Y          equ  22h
 ANIM_VOICE_CTR            equ  24h
 ANIM_DIRECTION            equ  26h
-ANIM_UNKNOWN1             equ  27h
+ANIM_WALK_FLAG            equ  27h
 ANIM_START_COLOUR         equ  28h
 
 ; Hotspot header record constants
@@ -160,6 +164,9 @@
 
 ; Hotspot record constants
 
+HS_DEST2_SET              equ   -1
+HS_DEST2_X                equ   -5
+HS_DEST2_Y                equ   -3
 HS_ACTIONS                equ   0
 HS_FLAGS                  equ   3
 HS_ACTIONS_OFFSET         equ  04h
@@ -198,9 +205,9 @@
 HS_DELAY_CTR              equ  42h
 HS_CHAR_MODE              equ  44h
 HS_TICK_SCRIPT_OFFSET     equ  45h
-HS_USE2_HOTSPOT_ID        equ  47h
+SCRIPT_HOTSPOT_ID         equ  47h
 HS_PATHFIND_COVERED       equ  49h
-HS_V4A                    equ  4Ah
+HS_PAUSE_CTR              equ  4Ah
 HS_BLOCKED_FLAG           equ  4Ch
 HS_V4D                    equ  4Dh
 HS_V4E                    equ  4Eh
@@ -236,7 +243,10 @@
 PLAYER_HOTSPOT_ID         equ  3E8h
 RATPOUCH_HOTSPOT_ID       equ  3E9h
 SKORL_HOTSPOT_ID          equ  3EAh
+GOEWIN_HOTSPOT_ID         equ  3EFh
 FIRST_OBJECT_HOTSPOT_ID   equ  408h
+START_EXIT_HOTSPOT_ID     equ  2710h
+BOTTLE_HOTSPOT_ID         equ  2710h
 
 
 ; Room exit record constants
@@ -379,9 +389,21 @@
 CHARMODE_4              equ  4
 CHARMODE_CONVERSING     equ  5
 CHARMODE_6              equ  6
-CHARMODE_7              equ  7              
+CHARMODE_7              equ  7
 CHARMODE_8              equ  8
 
+; Pathfinder results
+PF_OK                   equ  1
+PF_DEST_OCCUPIED        equ  2
+
+; HS_BLOCKED_FLAG states
+BS_NONE                 equ  0
+BS_INITIAL              equ  1
+BS_FINAL                equ  2
+
+; Miscellaneous constants
+TALK_COUNTDOWN_MAX      equ  40
+
                                 ;------------------------------------------------------------  seg_code   ----
 
                                 seg_code        segment byte public
@@ -415,17 +437,17 @@
 273F:0018 \xFAC6 06 38B0 01                        mov     data_781, 1 
 273F:001D  E8 1F3F                              call    show_disk_cursor
 273F:0020  FF 16 0766                           call    word ptr ds:[fade_out_proc]
-273F:0024  E8 4818                              call    sub_115                 ; (483F)
+273F:0024  E8 4818                              call    clear_sequence_delay_table
 273F:0027  E8 10BE                              call    hotspots_unload         ; Disable unneeded hotspots
-273F:002A  83 3E BAAD 01                        cmp     script_val_82, 1
+273F:002A  83 3E BAAD 01                        cmp     room_exit_animation_flag, 1
 273F:002F  72 0A                                jb      loc_8                   ; Jump if below
 273F:0031  75 05                                jnz     loc_7                   ; Jump if not zero
-273F:0033  E8 A576                              call    sub_261                 ; (A5AC)
+273F:0033  E8 A576                              call    display_chute_animation
 273F:0036  EB 03                                jmp     short loc_8             ; (003B)
 273F:0038                       loc_7:                                          ;  xref 273F:0031
-273F:0038  E8 A680                              call    sub_263                 ; (A6BB)
+273F:0038  E8 A680                              call    display_barrel_animation
 273F:003B                       loc_8:                                          ;  xref 273F:002F, 0036
-273F:003B  C7 06 BAAD 0000                      mov     word ptr ds:data_490e,0 ; (273F:BAAD=0)
+273F:003B  C7 06 BAAD 0000                      mov     room_exit_animation_flag, 0
 273F:0041  C6 06 9837 00                        mov     talk_dialog_active, 0
 273F:0046  C7 06 9838 0000                      mov     data_431,0              ; (273F:9838=5C8Bh)
 273F:004C  A1 9832                              mov     ax, room_number
@@ -499,7 +521,7 @@
 273F:00FA  83 16 B0AC 00                        adc     game_time_ctr_2, 0
 273F:00FF  C6 06 00B0 00                        mov     data_525, 0
 273F:0104  E8 92C1                              call    room_check_keypresses
-273F:0107  E8 4306                              call    sub_96                  ; Talking countdown proc
+273F:0107  E8 4306                              call    character_paused_list_countdown
 273F:010A  E8 1B05                              call    room_check_cursors
 273F:010D  E8 1189                              call    room_handle_click
 273F:0110  E8 4083                              call    animation_tick
@@ -2098,7 +2120,7 @@
 273F:0CEA  BE BF40                              mov     si, offset room_info_table
 273F:0CED  3D 03E8                              cmp     ax, PLAYER_HOTSPOT_ID
 273F:0CF0  78 20                                js      loc_111                 ; Jump if sign=1
-273F:0CF2  3D 2710                              cmp     ax,2710h
+273F:0CF2  3D 2710                              cmp     ax, START_EXIT_HOTSPOT_ID
 273F:0CF5  73 08                                jae     loc_109                 ; Jump if above or =
 273F:0CF7  BE 5D98                              mov     si, offset hotspot_table_2
 273F:0CFA  2D 03E8                              sub     ax, PLAYER_HOTSPOT_ID
@@ -2107,7 +2129,7 @@
 273F:0CFF  3D 4E20                              cmp     ax,4E20h
 273F:0D02  73 08                                jae     loc_110                 ; Jump if above or =
 273F:0D04  BE 623E                              mov     si, offset hotspot_table_3
-273F:0D07  2D 2710                              sub     ax,2710h
+273F:0D07  2D 2710                              sub     ax, START_EXIT_HOTSPOT_ID
 273F:0D0A  EB 06                                jmp     short loc_111           ; (0D12)
 273F:0D0C                       loc_110:                                        ;  xref 273F:0D02
 273F:0D0C \xFABE 63B1                              mov     si, offset hotspot_table_4
@@ -2140,7 +2162,7 @@
 273F:0D21  BE BF40                              mov     si, offset room_info_table
 273F:0D24  3D 03E8                              cmp     ax, PLAYER_HOTSPOT_ID
 273F:0D27  72 20                                jb      loc_114                 ; Jump if below
-273F:0D29  3D 2710                              cmp     ax,2710h
+273F:0D29  3D 2710                              cmp     ax, START_EXIT_HOTSPOT_ID
 273F:0D2C  73 08                                jae     loc_112                 ; Jump if above or =
 273F:0D2E  BE 5D98                              mov     si, offset hotspot_table_2
 273F:0D31  2D 03E8                              sub     ax, PLAYER_HOTSPOT_ID
@@ -2149,7 +2171,7 @@
 273F:0D36  3D 4E20                              cmp     ax,4E20h
 273F:0D39  73 08                                jae     loc_113                 ; Jump if above or =
 273F:0D3B  BE 623E                              mov     si, offset hotspot_table_3
-273F:0D3E  2D 2710                              sub     ax,2710h
+273F:0D3E  2D 2710                              sub     ax, START_EXIT_HOTSPOT_ID
 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
@@ -2179,7 +2201,7 @@
 273F:0D5A \xFABF 31E6                              mov     di,31E6h                ; (273F:31E6=0CDh)
 273F:0D5D  26: C7 45 FE 0000                    mov     word ptr es:[di-2],0
 273F:0D63 \xFABE 623E                              mov     si, offset hotspot_table_3
-273F:0D66  BD 2710                              mov     bp,2710h
+273F:0D66  BD 2710                              mov     bp, START_EXIT_HOTSPOT_ID
 273F:0D69  E8 0003                              call    sub_33                  ; (0D6F)
 273F:0D6C  5D                                   pop     bp
 273F:0D6D  1F                                   pop     ds
@@ -2267,7 +2289,7 @@
 273F:0DF1  BD 0408                              mov     bp, FIRST_OBJECT_HOTSPOT_ID
 273F:0DF4  E8 0017                              call    sub_35                  ; (0E0E)
 273F:0DF7 \xFABE 623E                              mov     si, offset hotspot_table_3
-273F:0DFA  BD 2710                              mov     bp,2710h
+273F:0DFA  BD 2710                              mov     bp, START_EXIT_HOTSPOT_ID
 273F:0DFD  E8 000E                              call    sub_35                  ; (0E0E)
 273F:0E00 \xFABE 63B1                              mov     si, offset hotspot_table_4
 273F:0E03  BD 7530                              mov     bp,7530h
@@ -2536,19 +2558,19 @@
 273F:0FEA  75 7E                                jne     loc_150
 
 273F:0FEC  26: 8B 04                            mov     ax,es:[si]              ; Change position by amount
-273F:0FEF  83 C6 02                             add     si,2
+273F:0FEF  83 C6 02                             add     si, 2
 
-273F:0FF2  01 05                                add     [di],ax                 ; Add to X start
-273F:0FF4  01 47 0D                             add     [bx+0Dh],ax
-273F:0FF7  26: 8B 04                            mov     ax,es:[si]
-273F:0FFA  83 C6 02                             add     si,2
-273F:0FFD  01 45 02                             add     [di+2],ax               ; Add to Y start
-273F:1000  01 47 0F                             add     [bx+0Fh],ax
+273F:0FF2  01 05                                add     [di+ANIM_X], ax         ; Add to X start
+273F:0FF4  01 47 0D                             add     [bx+HS_X], ax
+273F:0FF7  26: 8B 04                            mov     ax, es:[si]
+273F:0FFA  83 C6 02                             add     si, 2
+273F:0FFD  01 45 02                             add     [di+ANIM_Y], ax         ; Add to Y start
+273F:1000  01 47 0F                             add     [bx+HS_Y], ax
 273F:1003  EB AF                                jmp     short loc_143
 
 273F:1005                       loc_144:                                        ;  xref 273F:0FBD
-273F:1005  33 C0                                xor     ax,ax                   ; Zero register
-273F:1007  8B F3                                mov     si,bx
+273F:1005  33 C0                                xor     ax, ax                  ; Zero register
+273F:1007  8B F3                                mov     si, bx
 273F:1009  5B                                   pop     bx
 273F:100A  C3                                   retn
 273F:100B                       loc_145:                                        ;  xref 273F:0FCC
@@ -2558,11 +2580,11 @@
 273F:1013  D1 E0                                shl     ax,1
 273F:1015  D1 E0                                shl     ax,1
 273F:1017  D1 E0                                shl     ax,1
-273F:1019  89 45 04                             mov     [di+4],ax               ; Store width
-273F:101C  89 45 13                             mov     [di+13h],ax
-273F:101F  26: 8B 04                            mov     ax,es:[si]
-273F:1022  83 C6 02                             add     si,2
-273F:1025  89 45 06                             mov     [di+6],ax               ; Store height
+273F:1019  89 45 04                             mov     [di+ANIM_WIDTH], ax     ; Store width
+273F:101C  89 45 13                             mov     [di+ANIM_WIDTH_COPY], ax
+273F:101F  26: 8B 04                            mov     ax, es:[si]
+273F:1022  83 C6 02                             add     si, 2
+273F:1025  89 45 06                             mov     [di+ANIM_HEIGHT],ax     ; Store height
 273F:1028  EB 8A                                jmp     short loc_143
 
                                                                                 ;* No entry point to code
@@ -2604,31 +2626,31 @@
 273F:1067  E9 FF4A                              jmp     loc_143                 ; (0FB4)
 
 273F:106A                       loc_150:
-273F:106A  89 77 24                             mov     [bx+24h],si             ; Set execution offset
-273F:106D  8B F3                                mov     si,bx
-273F:106F  8B 5C 21                             mov     bx,[si+21h]             ; Get pixel data record
-273F:1072  F6 47 02 04                          test    byte ptr [bx+2], 4      ; Test flags
-273F:1076  74 0E                                jz      loc_151                 ; Jump if zero
-273F:1078  8B 5F 03                             mov     bx, [bx+3]
-273F:107B  8E C3                                mov     es,bx
-273F:107D  D1 E0                                shl     ax,1                    ; Shift w/zeros fill
-273F:107F  8B D8                                mov     bx,ax
-273F:1081  26: 8B 07                            mov     ax,es:[bx]
-273F:1084  EB 03                                jmp     short loc_152           ; (1089)
-273F:1086                       loc_151:                                        ;  xref 273F:1076
-273F:1086  F7 67 07                             mul     word ptr [bx+7]         ; dx:ax = data * ax
+273F:106A  89 77 24                             mov     [bx+HS_SCRIPT_OFFSET], si ; Set execution offset
+273F:106D  8B F3                                mov     si, bx
+273F:106F  8B 5C 21                             mov     bx, [si+HS_PIXEL_OFFSET] ; Get pixel data record
+273F:1072  F6 47 02 04                          test    byte ptr [bx+PIXEL_FLAGS], PIXELFLAG_HAS_TABLE 
+273F:1076  74 0E                                jz      loc_151                 ; Jump if not
+273F:1078  8B 5F 03                             mov     bx, [bx+PIXEL_DATA_SEGMENT]
+273F:107B  8E C3                                mov     es, bx
+273F:107D  D1 E0                                shl     ax, 1                   ; Shift w/zeros fill
+273F:107F  8B D8                                mov     bx, ax
+273F:1081  26: 8B 07                            mov     ax, es:[bx]             ; Get frame offset
+273F:1084  EB 03                                jmp     short loc_152           
+273F:1086                       loc_151:
+273F:1086  F7 67 07                             mul     word ptr [bx+PIXEL_FRAME_SIZE]
 273F:1089                       loc_152:
-273F:1089  89 45 08                             mov     [di+8],ax               ; Store current frame
-273F:108C  0D 0001                              or      ax,1
+273F:1089  89 45 08                             mov     [di+ANIM_FRAME_OFFSET],ax ; Store current frame
+273F:108C  0D 0001                              or      ax, 1
 273F:108F  5B                                   pop     bx
 273F:1090  C3                                   retn
 
 273F:1091                       loc_153:
-273F:1091  26: 8B 04                            mov     ax,es:[si]              ; Set bitset actions
-273F:1094  89 07                                mov     [bx],ax
-273F:1096  26: 8B 44 02                         mov     ax,es:[si+2]
-273F:109A  89 47 02                             mov     [bx+2],ax
-273F:109D  83 C6 04                             add     si,4
+273F:1091  26: 8B 04                            mov     ax, es:[si]             ; Set bitset actions
+273F:1094  89 07                                mov     [bx+HS_ACTIONS], ax
+273F:1096  26: 8B 44 02                         mov     ax, es:[si+2]
+273F:109A  89 47 02                             mov     [bx+HS_ACTIONS+2], ax
+273F:109D  83 C6 04                             add     si, 4
 273F:10A0  E9 FF11                              jmp     loc_143
 
                      hotspot_script_execute     endp
@@ -2794,22 +2816,22 @@
                                 ;         Called from:   273F:5217, 6009
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
-273F:11B5                       sub_41          proc    near
+                 character_paused_list_check    proc    near
 273F:11B5  53                                   push    bx
 273F:11B6 \xFABB 10C0                              mov     bx, offset impinging_char_list
-273F:11B9  C7 06 10EE 0000                      mov     data_617, 0
+273F:11B9  C7 06 10EE 0000                      mov     pl_check_result, 0
 273F:11BF                       loc_163:
 
 273F:11BF \xFA8B 07                                mov     ax, [bx]                ; Get character Id
 273F:11C1  83 C3 02                             add     bx, 2                   ; Move to next entry
 273F:11C4  0B C0                                or      ax, ax                  ; Is it the end of the list?
 273F:11C6  75 05                                jnz     loc_164                 ; Jump if not
-273F:11C8  A1 10EE                              mov     ax, data_617            ; Set return result
+273F:11C8  A1 10EE                              mov     ax, pl_check_result     ; Set return result
 273F:11CB  5B                                   pop     bx
 273F:11CC  C3                                   retn
 273F:11CD                       loc_164:
 
-273F:11CD  8B EB                                mov     bp,bx                   ; Store current table offset
+273F:11CD  8B EB                                mov     bp, bx                  ; Store next table offset
 273F:11CF  50                                   push    ax
 273F:11D0  56                                   push    si
 273F:11D1  E8 FB16                              call    get_room_resource_pointer2 ;Get hotspot resource
@@ -2820,27 +2842,29 @@
 273F:11DE  5E                                   pop     si
 273F:11DF  58                                   pop     ax
 273F:11E0  80 FB 03                             cmp     bl, CHAR_ACTION_EXEC_SCRIPT ; Char in animation sequence?
-273F:11E3  74 12                                je      loc_166                 ; Jump if yes
+273F:11E3  74 12                                je      loc_166                 ; Skip if yes
 
-273F:11E5  BB B0AE                              mov     bx, offset hotspot_action_list
-273F:11E8  B9 0014                              mov     cx, NUM_HOTSPOT_ACTION_SLOTS
+; Scan through the list of currently paused characters to see if the character is in it
+
+273F:11E5  BB B0AE                              mov     bx, offset character_pause_list
+273F:11E8  B9 0014                              mov     cx, NUM_PAUSED_CHARS_SLOTS
 273F:11EB  8B 55 1B                             mov     dx, [di+ANIM_HOTSPOT_ID]
 
 273F:11EE                       locloop_165:
-273F:11EE  3B 17                                cmp     dx, [bx]                ; Source char in list?
+273F:11EE  3B 17                                cmp     dx, [bx+PC_SRC_CHAR_ID] ; Source char in list?
 273F:11F0  75 09                                jne     loc_167                 ; Jump if not
-273F:11F2  3B 47 02                             cmp     ax, [bx+2]              ; List char Id in list?
+273F:11F2  3B 47 02                             cmp     ax, [bx+PC_DEST_CHAR_ID]; List char Id in list?
 273F:11F5  75 04                                jne     loc_167                 ; Jump if not equal
 273F:11F7                       loc_166:
-273F:11F7  8B DD                                mov     bx,bp                   ; Restore cached table offset
+273F:11F7  8B DD                                mov     bx, bp                  ; Restore cached table offset
 273F:11F9  EB C4                                jmp     short loc_163           ; Check next entry
 273F:11FB                       loc_167:
-273F:11FB  83 C3 08                             add     bx, HOTSPOT_ACTION_SLOT_SIZE
+273F:11FB  83 C3 08                             add     bx, PAUSED_CHAR_SLOT_SIZE
 273F:11FE  E2 EE                                loop    locloop_165             ; Loop remaining action list
 
 ; At this point we've found a character in the impinging_char_list list that isn't
 ; currently blocked to execute a hotspot animation, and doesn't have a cross reference
-; against the calling character (such as the player) in the hotspot action list
+; against the calling character (such as the player) in the paused character list
 
 273F:1200  8B D8                                mov     bx, ax
 273F:1202  57                                   push    di
@@ -2848,9 +2872,9 @@
 273F:1205  E8 FAE0                              call    get_room_resource_pointer
 273F:1208  87 F7                                xchg    si, di                  ;di=list hotspot rec, si=caller rec
 273F:120A  8B C3                                mov     ax, bx
-273F:120C  3D 03E8                              cmp     ax, PLAYER_HOTSPOT_ID   ; Is caller Id the player?
+273F:120C  3D 03E8                              cmp     ax, PLAYER_HOTSPOT_ID   ; Is list char the player?
 273F:120F  75 0F                                jne     loc_168                 ; Jump if not
-273F:1211  F6 45 49 FF                          test    byte ptr [di+49h], 0FFh ; ???
+273F:1211  F6 45 49 FF                          test    byte ptr [di+HS_PATHFIND_COVERED], 0FFh
 273F:1215  75 09                                jnz     loc_168                 ; Jump if not zero
 273F:1217  5F                                   pop     di
 273F:1218  E8 314B                              call    character_update_movement
@@ -2859,42 +2883,41 @@
 273F:121F  C3                                   retn
 
 273F:1220                       loc_168:
-273F:1220  BB B0AE                              mov     bx, offset hotspot_action_list
+273F:1220  BB B0AE                              mov     bx, offset character_pause_list
 273F:1223                       loc_169:                                        ; Scan for end of list
-273F:1223 \xFAF7 07 FFFF                           test    word ptr [bx], 0FFFFh
+273F:1223 \xFAF7 07 FFFF                           test    word ptr [bx+PC_SRC_CHAR_ID], 0FFFFh
 273F:1227  74 05                                jz      loc_170
-273F:1229  83 C3 08                             add     bx, HOTSPOT_ACTION_SLOT_SIZE
+273F:1229  83 C3 08                             add     bx, PAUSED_CHAR_SLOT_SIZE
 273F:122C  EB F5                                jmp     short loc_169
 273F:122E                       loc_170:                                        ; Inject entry into hotspot action list
-273F:122E  89 17                                mov     [bx], dx
-273F:1230  89 47 02                             mov     [bx+2], ax
-273F:1233  C7 47 04 000F                        mov     word ptr [bx+4],0Fh
-273F:1238  89 7F 06                             mov     [bx+6],di
-273F:123B  C6 44 4C 01                          mov     byte ptr [si+HS_BLOCKED_FLAG], 1
-273F:123F  3D 2710                              cmp     ax,2710h
+273F:122E  89 17                                mov     [bx+PC_SRC_CHAR_ID], dx
+273F:1230  89 47 02                             mov     [bx+PC_DEST_CHAR_ID], ax
+273F:1233  C7 47 04 000F                        mov     word ptr [bx+PC_COUNTER], 15
+273F:1238  89 7F 06                             mov     [bx+PC_HOTSPOT_PTR], di
+273F:123B  C6 44 4C 01                          mov     byte ptr [si+HS_BLOCKED_FLAG], BS_INITIAL
+273F:123F  3D 2710                              cmp     ax, START_EXIT_HOTSPOT_ID
 273F:1242  73 1D                                jae     loc_173                 ; Jump if above or =
-273F:1244  8A 5D 44                             mov     bl,[di+44h]
-273F:1247  80 FB 03                             cmp     bl,3
+273F:1244  8A 5D 44                             mov     bl, [di+HS_CHAR_MODE]
+273F:1247  80 FB 03                             cmp     bl, CHARMODE_PAUSED
 273F:124A  74 0D                                je      loc_171                 ; Jump if equal
-273F:124C  F7 45 4A FFFF                        test    word ptr [di+HS_V4A], 0FFFFh
+273F:124C  F7 45 4A FFFF                        test    word ptr [di+HS_PAUSE_CTR], 0FFFFh
 273F:1251  75 09                                jnz     loc_172                 ; Jump if not zero
 273F:1253  F6 45 44 FF                          test    byte ptr [di+HS_CHAR_MODE], 0FFh
 273F:1257  75 03                                jnz     loc_172                 ; Jump if not zero
 273F:1259                       loc_171:
-273F:1259  89 55 47                             mov     [di+HS_USE2_HOTSPOT_ID], dx
+273F:1259  89 55 47                             mov     [di+SCRIPT_HOTSPOT_ID], dx
 273F:125C                       loc_172:
-273F:125C  C7 45 4A 000F                        mov     word ptr [di+HS_V4A], 0Fh
+273F:125C  C7 45 4A 000F                        mov     word ptr [di+HS_PAUSE_CTR], 0Fh
 273F:1261                       loc_173:
-273F:1261  C7 06 10EE 0002                      mov     data_617, 2
+273F:1261  C7 06 10EE 0002                      mov     pl_check_result, 2
 273F:1267  5F                                   pop     di
 273F:1268  5B                                   pop     bx
-273F:1269  C6 07 01                             mov     byte ptr [bx], 1
+273F:1269  C6 07 01                             mov     byte ptr [bx], CHAR_ACTION_START_WALK
 273F:126C  53                                   push    bx
 273F:126D  8B DD                                mov     bx,bp
 273F:126F  E9 FF4D                              jmp     loc_163
+                 character_paused_list_check    endp
 
-                                sub_41          endp
-
                                 ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
                                 ;                              SUBROUTINE
                                 ;
@@ -3161,14 +3184,14 @@
 273F:1479  C6 06 11DA 00                        mov     mouse_buttons2, 0
 273F:147E  A1 983B                              mov     ax, talk_character_id
 273F:1481  E8 F866                              call    get_room_resource_pointer2
-273F:1484  C7 44 37 0000                        mov     word ptr [si+37h],0
+273F:1484  C7 44 37 0000                        mov     word ptr [si+HS_TALK_COUNTDOWN],0
 273F:1489  A1 9841                              mov     ax, data_1091  
 273F:148C  0B C0                                or      ax,ax                   ; Zero ?
 273F:148E  74 0F                                jz      loc_196                 ; Jump if zero
 273F:1490  E8 F857                              call    get_room_resource_pointer2
-273F:1493  F7 44 37 FFFF                        test    word ptr [si+37h],0FFFFh
+273F:1493  F7 44 37 FFFF                        test    word ptr [si+HS_TALK_COUNTDOWN],0FFFFh
 273F:1498  74 05                                jz      loc_196                 ; Jump if zero
-273F:149A  C7 44 37 0028                        mov     word ptr [si+37h],28h
+273F:149A  C7 44 37 0028                        mov     word ptr [si+HS_TALK_COUNTDOWN],28h
 273F:149F                       loc_196:                                        ;  xref 273F:148E, 1498
 273F:149F  E9 4E23                              jmp     loc_1248                ; (62C5)
                                 sub_44          endp
@@ -4502,7 +4525,7 @@
 273F:1C7D  C6 06 11E3 0F                        mov     cursor_index_new, CURSOR_CAMERA
 273F:1C82  8B 16 9832                           mov     dx, room_number
 273F:1C86 \xFABF 623E                              mov     di, offset hotspot_table_3
-273F:1C89  BD 2710                              mov     bp,2710h
+273F:1C89  BD 2710                              mov     bp, START_EXIT_HOTSPOT_ID
 273F:1C8C  E8 01BC                              call    room_check_hotspots
 273F:1C8F \xFABF 63B1                              mov     di, offset hotspot_table_4
 273F:1C92  BD 7530                              mov     bp,7530h
@@ -4529,7 +4552,7 @@
 273F:1CC9  C7 06 11E6 0000                      mov     hotspot_name_id, 0
 273F:1CCF  8B 16 9832                           mov     dx, room_number
 273F:1CD3 \xFABF 623E                              mov     di, offset hotspot_table_3
-273F:1CD6  BD 2710                              mov     bp,2710h
+273F:1CD6  BD 2710                              mov     bp, START_EXIT_HOTSPOT_ID
 273F:1CD9  E8 016F                              call    room_check_hotspots
 273F:1CDC \xFABF 5D98                              mov     di, offset hotspot_table_2
 273F:1CDF  BD 03E8                              mov     bp, PLAYER_HOTSPOT_ID
@@ -4743,26 +4766,26 @@
 
 273F:1EAE                       loc_464:
 273F:1EAE  A1 11D6                              mov     ax, mouse_x2
-273F:1EB1  05 0080                              add     ax,80h
-273F:1EB4  8B 4C 0D                             mov     cx,[si+0Dh]
-273F:1EB7  3B C1                                cmp     ax,cx
+273F:1EB1  05 0080                              add     ax, 80h
+273F:1EB4  8B 4C 0D                             mov     cx, [si+HS_X]
+273F:1EB7  3B C1                                cmp     ax, cx
 273F:1EB9  72 EB                                jb      loc_463                 ; Jump if below
-273F:1EBB  03 4C 19                             add     cx,[si+19h]
-273F:1EBE  3B C8                                cmp     cx,ax
+273F:1EBB  03 4C 19                             add     cx, [si+HS_WIDTH_COPY]
+273F:1EBE  3B C8                                cmp     cx, ax
 273F:1EC0  72 E4                                jb      loc_463                 ; Jump if below
-273F:1EC2  A1 11D8                              mov     ax, mouse_y2             
-273F:1EC5  05 0080                              add     ax,80h
-273F:1EC8  8B 4C 0F                             mov     cx,[si+0Fh]
-273F:1ECB  3B C1                                cmp     ax,cx
+273F:1EC2  A1 11D8                              mov     ax, mouse_y2
+273F:1EC5  05 0080                              add     ax, 80h
+273F:1EC8  8B 4C 0F                             mov     cx, [si+HS_Y]
+273F:1ECB  3B C1                                cmp     ax, cx
 273F:1ECD  72 D7                                jb      loc_463                 ; Jump if below
-273F:1ECF  03 4C 13                             add     cx,[si+13h]
-273F:1ED2  3B C8                                cmp     cx,ax
+273F:1ECF  03 4C 13                             add     cx, [si+HS_HEIGHT]
+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+3],80h
+273F:1ED6  80 4C 03 80                          or      byte ptr [si+HS_FLAGS], 80h
 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
+273F:1EDE  8B 45 02                             mov     ax, [di+2]
+273F:1EE1  80 E4 1F                             and     ah, 1Fh
 273F:1EE4  A3 11E6                              mov     hotspot_name_id, ax     ; Save actions for this hotspot
 273F:1EE7  C3                                   retn
                         room_check_hotspots     endp
@@ -6903,7 +6926,7 @@
 273F:2C88  2E: A3 1500                          mov     word ptr cs:data_215,ax ; (273F:1500=0)
 273F:2C8C  2E: A3 1502                          mov     cs:data_216,ax          ; (273F:1502=0)
 273F:2C90  2E: A2 1504                          mov     cs:data_217,al          ; (273F:1504=0)
-273F:2C94  C6 06 11B0 00                        mov     byte ptr ds:[11B0h],0   ; (273F:11B0=0BEh)
+273F:2C94  C6 06 11B0 00                        mov     data_11b0, 0
 273F:2C99  8B 47 02                             mov     ax,[bx+2]
 273F:2C9C  2D 0088                              sub     ax,88h
 273F:2C9F  73 2A                                jnc     loc_618                 ; Jump if carry=0
@@ -6925,7 +6948,7 @@
 273F:2CBE  D1 E0                                shl     ax,1                    ; Shift w/zeros fill
 273F:2CC0  03 F0                                add     si,ax
 273F:2CC2  33 C0                                xor     ax,ax                   ; Zero register
-273F:2CC4  C6 06 11B0 01                        mov     byte ptr ds:[11B0h],1   ; (273F:11B0=0BEh)
+273F:2CC4  C6 06 11B0 01                        mov     data_11b0, 1
 273F:2CC9  EB 1C                                jmp     short loc_621           ; (2CE7)
 273F:2CCB                       loc_618:                                        ;  xref 273F:2C9F
 273F:2CCB  3D 00C0                              cmp     ax,0C0h
@@ -6938,7 +6961,7 @@
 273F:2CDA  72 0A                                jb      loc_620                 ; Jump if below
 273F:2CDC  2D 00C0                              sub     ax,0C0h
 273F:2CDF  2A E8                                sub     ch,al
-273F:2CE1  C6 06 11B0 01                        mov     byte ptr ds:[11B0h],1   ; (273F:11B0=0BEh)
+273F:2CE1  C6 06 11B0 01                        mov     data_11b0, 1
 273F:2CE6                       loc_620:                                        ;  xref 273F:2CDA
 273F:2CE6  58                                   pop     ax
 273F:2CE7                       loc_621:                                        ;  xref 273F:2CC9
@@ -6981,7 +7004,7 @@
 273F:2D3C  2E: A3 1502                          mov     cs:data_216,ax          ; (273F:1502=0)
 273F:2D40  04 01                                add     al,1
 273F:2D42  2E: 28 06 1509                       sub     cs:data_220,al          ; (273F:1509=0)
-273F:2D47  C6 06 11B0 01                        mov     byte ptr ds:[11B0h],1   ; (273F:11B0=0BEh)
+273F:2D47  C6 06 11B0 01                        mov     data_11b0, 1
 273F:2D4C  33 C0                                xor     ax,ax                   ; Zero register
 273F:2D4E  EB 29                                jmp     short loc_625           ; (2D79)
 273F:2D50                       loc_623:                                        ;  xref 273F:2D1D
@@ -6998,7 +7021,7 @@
 273F:2D67  D3 EA                                shr     dx,cl                   ; Shift w/zeros fill
 273F:2D69  2E: 28 16 1509                       sub     cs:data_220,dl          ; (273F:1509=0)
 273F:2D6E  2E: C6 06 1504 00                    mov     cs:data_217,0           ; (273F:1504=0)
-273F:2D74  C6 06 11B0 01                        mov     byte ptr ds:[11B0h],1   ; (273F:11B0=0BEh)
+273F:2D74  C6 06 11B0 01                        mov     data_11b0, 1
 273F:2D79                       loc_625:                                        ;  xref 273F:2D4E, 2D61, 2D63
 273F:2D79  25 FFF8                              and     ax,0FFF8h
 273F:2D7C  D1 E8                                shr     ax,1                    ; Shift w/zeros fill
@@ -7007,7 +7030,7 @@
 273F:2D84  80 F1 07                             xor     cl,7
 273F:2D87  80 C1 01                             add     cl,1
 273F:2D8A  8B 1E 1440                           mov     bx,word ptr ds:[1440h]  ; (273F:1440=0BA00h)
-273F:2D8E  80 3E 11B0 01                        cmp     byte ptr ds:[11B0h],1   ; (273F:11B0=0BEh)
+273F:2D8E  80 3E 11B0 01                        cmp     data_11b0, 1
 273F:2D93  75 03                                jne     loc_626                 ; Jump if not equal
 273F:2D95  E9 00D9                              jmp     loc_630                 ; (2E71)
 273F:2D98                       loc_626:                                        ;  xref 273F:2D93
@@ -8567,98 +8590,97 @@
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
                          vga_add_animation      proc    near
-
 273F:37F2  2E: C7 06 1500 0000                  mov     word ptr cs:data_215,0  ; (273F:1500=0)
-273F:37F9  C6 06 11B0 00                        mov     byte ptr ds:[11B0h],0   ; (273F:11B0=0BEh)
-273F:37FE  8A 6F 06                             mov     ch,[bx+ANIM_HEIGHT]     ; Get height
-273F:3801  8A 4F 04                             mov     cl,[bx+ANIM_WIDTH]      ; Get width
-273F:3804  8B 47 02                             mov     ax,[bx+ANIM_Y]          ; Get Y position
-273F:3807  2D 0088                              sub     ax,88h
+273F:37F9  C6 06 11B0 00                        mov     data_11b0, 0
+273F:37FE  8A 6F 06                             mov     ch, [bx+ANIM_HEIGHT]    ; Get height
+273F:3801  8A 4F 04                             mov     cl, [bx+ANIM_WIDTH]     ; Get width
+273F:3804  8B 47 02                             mov     ax, [bx+ANIM_Y]         ; Get Y position
+273F:3807  2D 0088                              sub     ax, 88h
 273F:380A  73 16                                jnc     loc_731
 
-273F:380C  8B D0                                mov     dx,ax
-273F:380E  02 D5                                add     dl,ch
+273F:380C  8B D0                                mov     dx, ax                  ; Top clipping
+273F:380E  02 D5                                add     dl, ch
 273F:3810  73 15                                jnc     loc_ret_732             ; Jump if carry=0
 273F:3812  74 13                                jz      loc_ret_732             ; Jump if zero
 273F:3814  F7 D8                                neg     ax
-273F:3816  2A E8                                sub     ch,al
+273F:3816  2A E8                                sub     ch, al
 273F:3818  F6 E1                                mul     cl                      ; ax = reg * al
-273F:381A  D1 E8                                shr     ax,1                    ; Shift w/zeros fill
-273F:381C  03 F0                                add     si,ax
-273F:381E  33 C0                                xor     ax,ax                   ; Zero register
-273F:3820  EB 13                                jmp     short loc_734           ; (3835)
+273F:381A  D1 E8                                shr     ax, 1
+273F:381C  03 F0                                add     si, ax
+273F:381E  33 C0                                xor     ax, ax                  ; Zero register
+273F:3820  EB 13                                jmp     short loc_734
 273F:3822                       loc_731:                                        ;  xref 273F:380A
-273F:3822  3D 00C0                              cmp     ax, 192                 ; Row too high?
+273F:3822  3D 00C0                              cmp     ax, 192                 ; Below bottom row?
 273F:3825  72 01                                jb      loc_733
 
 273F:3827                       loc_ret_732:                                    ;  xref 273F:3810, 3812
 273F:3827  C3                                   retn
 273F:3828                       loc_733:
-273F:3828  8B D0                                mov     dx,ax                   ; Get start row
-273F:382A  03 57 06                             add     dx,[bx+ANIM_HEIGHT]     ; Add number of rows
+273F:3828  8B D0                                mov     dx, ax                  ; Get start row
+273F:382A  03 57 06                             add     dx, [bx+ANIM_HEIGHT]    ; Add number of rows
 273F:382D  81 EA 00C0                           sub     dx, 192                 ; Bottom row > 192?
 273F:3831  76 02                                jbe     loc_734
-273F:3833  2A EA                                sub     ch,dl                   ; Yes, reduce height to fit
+273F:3833  2A EA                                sub     ch, dl                  ; Yes, reduce height to fit
 273F:3835                       loc_734:
 273F:3835  51                                   push    cx
-273F:3836  8B D0                                mov     dx,ax                   ; ax = line number, and
-273F:3838  D1 E0                                shl     ax,1                    ; will be * 320
-273F:383A  D1 E0                                shl     ax,1
-273F:383C  03 D0                                add     dx,ax
-273F:383E  B1 06                                mov     cl,6
-273F:3840  D3 E2                                shl     dx,cl
-273F:3842  8B FA                                mov     di,dx                   ; di = start of line
+273F:3836  8B D0                                mov     dx, ax                  ; ax = line number, and
+273F:3838  D1 E0                                shl     ax, 1                   ; will be * 320
+273F:383A  D1 E0                                shl     ax, 1
+273F:383C  03 D0                                add     dx, ax
+273F:383E  B1 06                                mov     cl, 6
+273F:3840  D3 E2                                shl     dx, cl
+273F:3842  8B FA                                mov     di, dx                  ; di = start of line
 273F:3844 \xFA81 C7 0A00                           add     di, MENUBAR_BLOCK_SIZE  ; Compensate for menubar
 273F:3848  59                                   pop     cx
 
-273F:3849  8B 07                                mov     ax,[bx]                 ; Get start X position
-273F:384B  2D 0080                              sub     ax,80h
-273F:384E  73 21                                jnc     loc_736                 ; Jump if carry=0
-273F:3850  8B D0                                mov     dx,ax
-273F:3852  02 D1                                add     dl,cl
+273F:3849  8B 07                                mov     ax, [bx+ANIM_X]         ; Get start X position
+273F:384B  2D 0080                              sub     ax, 80h
+273F:384E  73 21                                jnc     loc_736                 ; Completely on-screen
+273F:3850  8B D0                                mov     dx, ax
+273F:3852  02 D1                                add     dl, cl
 273F:3854  72 01                                jc      loc_735                 ; Jump if carry Set
 273F:3856  C3                                   retn
 273F:3857                       loc_735:                                        ;  xref 273F:3854
 273F:3857  F7 D0                                not     ax
-273F:3859  2A C8                                sub     cl,al
-273F:385B  2E: A3 1500                          mov     word ptr cs:data_215,ax ; (273F:1500=0)
-273F:385F  C6 06 11B0 01                        mov     byte ptr ds:[11B0h],1   ; (273F:11B0=0BEh)
-273F:3864  8B 47 04                             mov     ax,[bx+ANIM_WIDTH]
-273F:3867  D1 E8                                shr     ax,1                    ; Shift w/zeros fill
-273F:3869  2E: A3 1505                          mov     cs:data_218,ax          ; (273F:1505=0)
-273F:386D  33 C0                                xor     ax,ax                   ; Zero register
+273F:3859  2A C8                                sub     cl, al
+273F:385B  2E: A3 1500                          mov     word ptr cs:data_215, ax
+273F:385F  C6 06 11B0 01                        mov     data_11b0, 1
+273F:3864  8B 47 04                             mov     ax, [bx+ANIM_WIDTH]
+273F:3867  D1 E8                                shr     ax, 1
+273F:3869  2E: A3 1505                          mov     cs:data_218, ax
+273F:386D  33 C0                                xor     ax, ax                  ; Zero register
 273F:386F  EB 22                                jmp     short loc_738           ; (3893)
 273F:3871                       loc_736:                                        ;  xref 273F:384E
-273F:3871  3D 0140                              cmp     ax,140h
+273F:3871  3D 0140                              cmp     ax, SCREEN_WIDTH
 273F:3874  72 01                                jb      loc_737                 ; Jump if below
 273F:3876  C3                                   retn
 
 273F:3877                       loc_737:                                        ;  xref 273F:3874
-273F:3877  8B D0                                mov     dx,ax
-273F:3879  03 57 04                             add     dx,[bx+ANIM_WIDTH]
-273F:387C  81 EA 0140                           sub     dx,140h
+273F:3877  8B D0                                mov     dx, ax
+273F:3879  03 57 04                             add     dx, [bx+ANIM_WIDTH]
+273F:387C  81 EA 0140                           sub     dx, SCREEN_WIDTH
 273F:3880  76 11                                jbe     loc_738                 ; Jump if below or =
-273F:3882  2A CA                                sub     cl,dl
-273F:3884  C6 06 11B0 01                        mov     byte ptr ds:[11B0h],1   ; (273F:11B0=0BEh)
+273F:3882  2A CA                                sub     cl, dl
+273F:3884  C6 06 11B0 01                        mov     data_11b0, 1
 
-273F:3889  8B 57 04                             mov     dx,[bx+ANIM_WIDTH]
-273F:388C  D1 EA                                shr     dx,1                    ; Shift w/zeros fill
-273F:388E  2E: 89 16 1505                       mov     cs:data_218,dx          ; (273F:1505=0)
-273F:3893                       loc_738:                                        ;  xref 273F:386F, 3880
-273F:3893  03 F8                                add     di,ax
-273F:3895  8A 5F 28                             mov     bl,[bx+ANIM_START_COLOUR] ; Colour offset start
-273F:3898  F6 06 11B0 FF                        test    byte ptr ds:[11B0h],0FFh
+273F:3889  8B 57 04                             mov     dx, [bx+ANIM_WIDTH]
+273F:388C  D1 EA                                shr     dx, 1
+273F:388E  2E: 89 16 1505                       mov     cs:data_218, dx
+273F:3893                       loc_738:                               
+273F:3893  03 F8                                add     di, ax
+273F:3895  8A 5F 28                             mov     bl, [bx+ANIM_START_COLOUR] ; Colour offset start
+273F:3898  F6 06 11B0 FF                        test    data_11b0, 0FFh
 273F:389D  75 47                                jnz     loc_743                   ; Jump if not zero
 273F:389F  1E                                   push    ds
 273F:38A0  06                                   push    es
 273F:38A1  A1 4CE4                              mov     ax, data_segment2
-273F:38A4  8E C0                                mov     es,ax
+273F:38A4  8E C0                                mov     es, ax
 273F:38A6  1F                                   pop     ds
-273F:38A7  8A D1                                mov     dl,cl
-273F:38A9  8A CD                                mov     cl,ch
-273F:38AB  32 ED                                xor     ch,ch                   ; Zero register
-273F:38AD  32 F6                                xor     dh,dh                   ; Zero register
-273F:38AF  D1 EA                                shr     dx,1                    ; Divide by 2
+273F:38A7  8A D1                                mov     dl, cl
+273F:38A9  8A CD                                mov     cl, ch
+273F:38AB  32 ED                                xor     ch, ch                  ; Zero register
+273F:38AD  32 F6                                xor     dh, dh                  ; Zero register
+273F:38AF  D1 EA                                shr     dx, 1                   ; Divide by 2
 
 ; This seems to be the loop for applying an animation to the off-screen buffer
 ; cx = height, dx = width/2, es:di = dest, bl = starting colour offset
@@ -8668,30 +8690,30 @@
 273F:38B1                       locloop_739:                                    ;  xref 273F:38E2
 273F:38B1  51                                   push    cx
 273F:38B2  52                                   push    dx
-273F:38B3  B1 04                                mov     cl,4
+273F:38B3  B1 04                                mov     cl, 4
 273F:38B5  57                                   push    di
 273F:38B6                       loc_740:                                        ;  xref 273F:38D9
 273F:38B6  AC                                   lodsb                           ; String [si] to al
-273F:38B7  8A E0                                mov     ah,al
-273F:38B9  D2 EC                                shr     ah,cl                   ; Shift w/zeros fill
-273F:38BB  25 0F0F                              and     ax,0F0Fh
+273F:38B7  8A E0                                mov     ah, al
+273F:38B9  D2 EC                                shr     ah, cl                  ; Shift w/zeros fill
+273F:38BB  25 0F0F                              and     ax, 0F0Fh
 273F:38BE  0A E4                                or      ah,ah                   ; Zero ?
 273F:38C0  74 05                                jz      loc_741                 ; Jump if zero
 273F:38C2  02 E3                                add     ah,bl
 273F:38C4  26: 88 25                            mov     es:[di],ah
 273F:38C7                       loc_741:                                        ;  xref 273F:38C0
-273F:38C7  83 C7 01                             add     di,1
-273F:38CA  0A C0                                or      al,al                   ; Zero ?
+273F:38C7  83 C7 01                             add     di, 1
+273F:38CA  0A C0                                or      al, al                  ; Zero ?
 273F:38CC  74 05                                jz      loc_742                 ; Jump if zero
-273F:38CE  02 C3                                add     al,bl
-273F:38D0  26: 88 05                            mov     es:[di],al
+273F:38CE  02 C3                                add     al, bl
+273F:38D0  26: 88 05                            mov     es:[di], al
 273F:38D3                       loc_742:                                        ;  xref 273F:38CC
 273F:38D3  83 C7 01                             add     di,1
 273F:38D6  83 EA 01                             sub     dx,1
 273F:38D9  75 DB                                jnz     loc_740                 ; Jump if not zero
 
 273F:38DB  5F                                   pop     di
-273F:38DC \xFA81 C7 0140                           add     di,SCREEN_WIDTH
+273F:38DC \xFA81 C7 0140                           add     di, SCREEN_WIDTH
 273F:38E0  5A                                   pop     dx
 273F:38E1  59                                   pop     cx
 273F:38E2  E2 CD                                loop    locloop_739             ; Loop if cx > 0
@@ -8704,12 +8726,12 @@
 273F:38E6  1E                                   push    ds
 273F:38E7  06                                   push    es
 273F:38E8  A1 4CE4                              mov     ax, data_segment2
-273F:38EB  8E C0                                mov     es,ax
+273F:38EB  8E C0                                mov     es, ax
 273F:38ED  1F                                   pop     ds
-273F:38EE  8A D1                                mov     dl,cl
-273F:38F0  8A CD                                mov     cl,ch
-273F:38F2  32 ED                                xor     ch,ch                   ; Zero register
-273F:38F4  32 F6                                xor     dh,dh                   ; Zero register
+273F:38EE  8A D1                                mov     dl, cl
+273F:38F0  8A CD                                mov     cl, ch
+273F:38F2  32 ED                                xor     ch, ch                  ; Zero register
+273F:38F4  32 F6                                xor     dh, dh                  ; Zero register
 
 273F:38F6                       locloop_744:                                    ;  xref 273F:3944
 273F:38F6  51                                   push    cx
@@ -8763,6 +8785,7 @@
 
 273F:3946  1F                                   pop     ds
 273F:3947  C3                                   retn
+                         vga_add_animation      endp
 
                                 ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
                                 ;                              SUBROUTINE
@@ -9390,18 +9413,18 @@
 
 273F:3D1F  B8 7900                              mov     ax,7900h                ; Restart/Restore image
 273F:3D22  E8 FF6C                              call    sub_79                  ; Decode it
-273F:3D25 \xFABB 184B                              mov     bx,offset data_657
+273F:3D25 \xFABB 184B                              mov     bx, offset animation_rec_4
 273F:3D28  E8 3AB7                              call    animation_decode
 273F:3D2B  E8 E247                              call    show_arrow_cursor
 273F:3D2E  1E                                   push    ds
 273F:3D2F  07                                   pop     es
 273F:3D30 \xFABF B14E                              mov     di, offset animation_table
-273F:3D33 \xFABE 1890                              mov     si,1890h                ; (31E4:1890=0F6h)
-273F:3D36 \xFABB 184B                              mov     bx,offset data_657      ; (31E4:184B=1)
-273F:3D39  8B 47 03                             mov     ax,[bx+3]
-273F:3D3C  B2 00                                mov     dl,0
-273F:3D3E  E8 FFBC                              call    animation_set_entry                  ; (3CFD)
-273F:3D41  E8 FFB9                              call    animation_set_entry                  ; (3CFD)
+273F:3D33 \xFABE 1890                              mov     si, 1890h
+273F:3D36 \xFABB 184B                              mov     bx, offset animation_rec_4
+273F:3D39  8B 47 03                             mov     ax, [bx+3]
+273F:3D3C  B2 00                                mov     dl, 0
+273F:3D3E  E8 FFBC                              call    animation_set_entry
+273F:3D41  E8 FFB9                              call    animation_set_entry
 273F:3D44  33 C0                                xor     ax,ax                   ; Zero register
 273F:3D46  33 DB                                xor     bx,bx                   ; Zero register
 273F:3D48  E8 FF8E                              call    animation_draw
@@ -10185,11 +10208,11 @@
 273F:42FB  88 74 50                             mov     [si+HS_DIRECTION], dh
 273F:42FE  C6 44 51 00                          mov     byte ptr [si+HS_DIRECTION+1], 0
 273F:4302  32 F6                                xor     dh,dh                   ; Zero register
-273F:4304  83 EB 30                             sub     bx,30h
+273F:4304  83 EB 30                             sub     bx, 48
 273F:4307  89 16 982C                           mov     new_room_number_2, dx
 273F:430B  89 0E 982E                           mov     new_room_x, cx
 273F:430F  89 1E 9830                           mov     new_room_y, bx
-273F:4313  E8 1D23                              call    sub_136                 ; (6039)
+273F:4313  E8 1D23                              call    character_change_room_check_bumped
 273F:4316  75 06                                jnz     loc_ret_839             ; Jump if not zero
 273F:4318  C7 06 982C 0000                      mov     new_room_number_2, 0
 273F:431E                       loc_ret_839:    retn
@@ -10352,30 +10375,30 @@
                                 ;         Called from:   273F:0107, 60FC
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
-                                sub_96          proc    near
-273F:4410  BB B0AE                              mov     bx, offset hotspot_action_list
-273F:4413  B9 0014                              mov     cx, NUM_HOTSPOT_ACTION_SLOTS
+            character_paused_list_countdown     proc    near
+273F:4410  BB B0AE                              mov     bx, offset character_pause_list
+273F:4413  B9 0014                              mov     cx, NUM_PAUSED_CHARS_SLOTS
 
 273F:4416                       locloop_851:
-273F:4416  F7 07 FFFF                           test    word ptr [bx],0FFFFh    ; Entry position in use?
+273F:4416  F7 07 FFFF                           test    word ptr [bx+PC_HOTSPOT_PTR],0FFFFh ; Entry position in use?
 273F:441A  74 1F                                jz      loc_853                 ; Skip entry if not
-273F:441C  83 6F 04 01                          sub     word ptr [bx+4], 1      ; Decrement entry counter
-273F:4420  8B 47 04                             mov     ax, [bx+4]
+273F:441C  83 6F 04 01                          sub     word ptr [bx+PC_COUNTER], 1 ; Decrement entry counter
+273F:4420  8B 47 04                             mov     ax, [bx+PC_COUNTER]
 273F:4423  0B C0                                or      ax,ax                   ; Reached zero?
 273F:4425  75 04                                jnz     loc_852                 ; Jump if not
-273F:4427  C7 07 0000                           mov     word ptr [bx], 0        ; Clear slot
+273F:4427  C7 07 0000                           mov     word ptr [bx+PC_SRC_CHAR_ID], 0 ; Clear slot
 273F:442B                       loc_852:
-273F:442B  81 7F 02 2710                        cmp     word ptr [bx+2], 2710h  ; Check Id of entry
+273F:442B  81 7F 02 2710                        cmp     word ptr [bx+PC_DEST_CHAR_ID], START_EXIT_HOTSPOT_ID
 273F:4430  73 09                                jae     loc_853                 ; Jump if >= 2710h
-273F:4432  8B 77 06                             mov     si,[bx+6]               ; Hotspot rec ptr?
+273F:4432  8B 77 06                             mov     si, [bx+PC_HOTSPOT_PTR]
 273F:4435  05 0001                              add     ax, 1
-273F:4438  89 44 4A                             mov     [si+4Ah], ax            ; Set 4Ah to countdown ctr
+273F:4438  89 44 4A                             mov     [si+HS_PAUSE_CTR], ax 
 273F:443B                       loc_853:
-273F:443B  83 C3 08                             add     bx, HOTSPOT_ACTION_SLOT_SIZE
+273F:443B  83 C3 08                             add     bx, PAUSED_CHAR_SLOT_SIZE
 273F:443E  E2 D6                                loop    locloop_851             ; Loop if cx > 0
 
 273F:4440  C3                                   retn
-                                sub_96          endp
+            character_paused_list_countdown     endp
 
 
                                 ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
@@ -10384,31 +10407,30 @@
                                 ;         Called from:   273F:479F, 51A8, 5FB9
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
-273F:4441                       sub_97          proc    near
+                character_paused_list_reset     proc    near
 273F:4441  53                                   push    bx
-273F:4442  BB B0AE                              mov     bx, offset hotspot_action_list
-273F:4445  B9 0014                              mov     cx, NUM_HOTSPOT_ACTION_SLOTS
+273F:4442  BB B0AE                              mov     bx, offset character_pause_list
+273F:4445  B9 0014                              mov     cx, NUM_PAUSED_CHARS_SLOTS
 273F:4448  8B 45 1B                             mov     ax, [di+ANIM_HOTSPOT_ID]
 
-273F:444B                       locloop_854:                                    ;  xref 273F:4468
-273F:444B  3B 07                                cmp     ax, [bx]
-273F:444D  75 16                                jne     loc_855                 ; Skip if hotspot not found
-273F:444F  C7 47 04 0001                        mov     word ptr [bx+4], 1
-273F:4454  81 7F 02 2710                        cmp     word ptr [bx+2], 2710h
+273F:444B                       locloop_854:
+273F:444B  3B 07                                cmp     ax, [bx+PC_SRC_CHAR_ID]
+273F:444D  75 16                                jne     loc_855                 ; Skip if entry is empty
+273F:444F  C7 47 04 0001                        mov     word ptr [bx+PC_COUNTER], 1
+273F:4454  81 7F 02 2710                        cmp     word ptr [bx+PC_DEST_CHAR_ID], START_EXIT_HOTSPOT_ID
 273F:4459  73 0A                                jae     loc_855                 ; Jump if above or =
 273F:445B  56                                   push    si
-273F:445C  8B 77 06                             mov     si, [bx+6]
-273F:445F  C7 44 4A 0001                        mov     word ptr [si+HS_V4A], 1
+273F:445C  8B 77 06                             mov     si, [bx+PC_HOTSPOT_PTR]
+273F:445F  C7 44 4A 0001                        mov     word ptr [si+HS_PAUSE_CTR], 1
 273F:4464  5E                                   pop     si
 273F:4465                       loc_855:                                        ; Move to next entry
-273F:4465  83 C3 08                             add     bx, HOTSPOT_ACTION_SLOT_SIZE
+273F:4465  83 C3 08                             add     bx, PAUSED_CHAR_SLOT_SIZE
 273F:4468  E2 E1                                loop    locloop_854             ; Loop through list
 
 273F:446A  5B                                   pop     bx
 273F:446B  C3                                   retn
-                                sub_97          endp
+                character_paused_list_reset     endp
 
-
                                 ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
                                 ;                              SUBROUTINE
                                 ;
@@ -10417,7 +10439,7 @@
                                 ;                             988C, 9F4B
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
-273F:446C                       random          proc    near
+                                random          proc    near
 273F:446C  56                                   push    si
 273F:446D  57                                   push    di
 273F:446E  53                                   push    bx
@@ -10583,37 +10605,36 @@
                                 ;         Called from:   273F:5133, 5F63
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
-273F:4560                       sub_105         proc    near
-273F:4560                       loc_869:                                        ;  xref 273F:5EC8
+                  character_paused_list_scan    proc    near
 273F:4560 \xFAF6 44 4C FF                          test    byte ptr [si+HS_BLOCKED_FLAG], 0FFh
 273F:4564  74 2C                                jz      loc_ret_873             ; Jump if zero
-273F:4566                       loc_870:                                        ;  xref 273F:5042
+                  character_paused_list_scan_2:
 273F:4566 \xFA53                                   push    bx
-273F:4567  BB B0AE                              mov     bx, offset hotspot_action_list
-273F:456A  B9 0014                              mov     cx, NUM_HOTSPOT_ACTION_SLOTS
+273F:4567  BB B0AE                              mov     bx, offset character_pause_list
+273F:456A  B9 0014                              mov     cx, NUM_PAUSED_CHARS_SLOTS
 273F:456D  8B 45 1B                             mov     ax, [di+ANIM_HOTSPOT_ID]
 
 273F:4570                       locloop_871:                                    ;  xref 273F:458F
-273F:4570  3B 07                                cmp     ax, [bx]
-273F:4572  75 18                                jne     loc_872                 ; Jump if not equal
-273F:4574  C7 47 04 000F                        mov     word ptr [bx+4], 0Fh
-273F:4579  81 7F 02 2710                        cmp     word ptr [bx+2], 2710h
+273F:4570  3B 07                                cmp     ax, [bx+PC_SRC_CHAR_ID] ; Found slot for hotspot?
+273F:4572  75 18                                jne     loc_872                 ; Skip if not
+273F:4574  C7 47 04 000F                        mov     word ptr [bx+PC_COUNTER], 15
+273F:4579  81 7F 02 2710                        cmp     word ptr [bx+PC_DEST_CHAR_ID], START_EXIT_HOTSPOT_ID
 273F:457E  73 0C                                jae     loc_872
 273F:4580  56                                   push    si
 273F:4581  51                                   push    cx
-273F:4582  8B 77 06                             mov     si, [bx+6]
-273F:4585  C7 44 4A 000F                        mov     word ptr [si+HS_V4A], 0Fh
+273F:4582  8B 77 06                             mov     si, [bx+PC_HOTSPOT_PTR]
+273F:4585  C7 44 4A 000F                        mov     word ptr [si+HS_PAUSE_CTR], 15
 273F:458A  59                                   pop     cx
 273F:458B  5E                                   pop     si
 273F:458C                       loc_872:                                        ;  xref 273F:4572, 457E
-273F:458C  83 C3 08                             add     bx, HOTSPOT_ACTION_SLOT_SIZE
+273F:458C  83 C3 08                             add     bx, PAUSED_CHAR_SLOT_SIZE
 273F:458F  E2 DF                                loop    locloop_871             ; Loop if cx > 0
 
 273F:4591  5B                                   pop     bx
 
 273F:4592                       loc_ret_873:                                    ;  xref 273F:4564
 273F:4592  C3                                   retn
-                                sub_105         endp
+                  character_paused_list_scan    endp
 
 
                                 ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
@@ -10662,9 +10683,9 @@
 273F:45C1  56                                   push    si
 273F:45C2  E8 C725                              call    get_room_resource_pointer2
 273F:45C5  5B                                   pop     bx
-273F:45C6  87 F3                                xchg    si, bx
-273F:45C8                       loc_877:                                        ;  xref 273F:45F4, 4600
-273F:45C8  E9 00BB                              jmp     loc_888                 ; (4686)
+273F:45C6  87 F3                                xchg    si, bx                  ; si=char, bx=hotspot
+273F:45C8                       loc_877:
+273F:45C8  E9 00BB                              jmp     loc_888                 
 273F:45CB                       loc_878:
 273F:45CB  58                                   pop     ax
 273F:45CC  B8 0003                              mov     ax, 3                   ; Initial call for action
@@ -10719,15 +10740,15 @@
 273F:4633  73 41                                jae     loc_887                 ; Jump if above or =
 273F:4635  81 3E BA1B 0408                      cmp     active_hotspot_id, FIRST_OBJECT_HOTSPOT_ID
 273F:463B  73 B4                                jae     loc_880                 ; Jump if above or =
-273F:463D  80 7F 44 08                          cmp     byte ptr [bx+44h],8
+273F:463D  80 7F 44 08                          cmp     byte ptr [bx+HS_CHAR_MODE], CHARMODE_8
 273F:4641  74 AE                                je      loc_880                 ; Jump if equal
-273F:4643  80 7F 44 04                          cmp     byte ptr [bx+44h],4
+273F:4643  80 7F 44 04                          cmp     byte ptr [bx+HS_CHAR_MODE], CHARMODE_4
 273F:4647  74 A8                                je      loc_880                 ; Jump if equal
-273F:4649  80 7F 44 07                          cmp     byte ptr [bx+44h],7
+273F:4649  80 7F 44 07                          cmp     byte ptr [bx+HS_CHAR_MODE], CHARMODE_7
 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_ACTION_CTR],0FFh  
+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
@@ -10739,7 +10760,7 @@
 273F:4665  C3                                   retn
 273F:4666                       loc_886:                                        ;  xref 273F:464D
 273F:4666  C6 44 2A 00                          mov     byte ptr [si+HS_ACTION_CTR], 0
-273F:466A  B8 000E                              mov     ax,0Eh
+273F:466A  B8 000E                              mov     ax, 0Eh
 273F:466D  53                                   push    bx
 273F:466E  E8 1D40                              call    display_message_dialog_3
 273F:4671  5B                                   pop     bx
@@ -10760,7 +10781,7 @@
 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+50h], ax
+273F:469E  89 47 50                             mov     [bx+HS_DIRECTION], ax
 273F:46A1                       loc_889:                                        ;  xref 273F:4690
 273F:46A1  33 C0                                xor     ax,ax                   ; Zero register
 273F:46A3  C3                                   retn
@@ -10936,16 +10957,16 @@
                                 ;
                                 ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
 
-                              npc_unknown_2     proc    near
+                      npc_reset_paused_list     proc    near
 273F:4796  C6 44 44 01                          mov     byte ptr [si+HS_CHAR_MODE], CHARMODE_1
 273F:479A  C7 44 42 0016                        mov     word ptr [si+HS_DELAY_CTR], 16h
-273F:479F  E8 FC9F                              call    sub_97                  ; (4441)
+273F:479F  E8 FC9F                              call    character_paused_list_reset
 273F:47A2  8B DE                                mov     bx,si                   ; Move to next npc action
 273F:47A4  03 5C 61                             add     bx, [si+HS_ACTION_OFFSET]
 273F:47A7  83 C3 63                             add     bx, HS_FIRST_ACTION_OFFSET
 273F:47AA  89 6F 01                             mov     [bx+CURRENT_ACTION_SUPPORT_TABLE], bp
 273F:47AD  C3                                   retn
-                              npc_unknown_2     endp
+                      npc_reset_paused_list     endp
 
                                 ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
                                 ;                              SUBROUTINE
@@ -10954,12 +10975,12 @@
                                 ; si = hotspot record
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
-273F:47AE               room_check_x_extents    proc    near
+                        room_check_x_extents    proc    near
 273F:47AE  53                                   push    bx
 273F:47AF  8B 44 06                             mov     ax, [si+HS_ROOM_NUM]
 273F:47B2  B3 09                                mov     bl, RH_TABLE_ENTRY_SIZE
 273F:47B4  F6 E3                                mul     bl                      ; Calculate offset
-273F:47B6  8B D8                                mov     bx,ax
+273F:47B6  8B D8                                mov     bx, ax
 273F:47B8  8B 9F BF40                           mov     bx, [room_info_table][bx] ; Get room record ptr
 273F:47BC  83 C3 19                             add     bx, ROOM_X_START
 273F:47BF  8B 44 0D                             mov     ax, [si+HS_X]           ; Get X start
@@ -11042,27 +11063,30 @@
 273F:4834  33 C0                                xor     ax,ax                   ; Zero register
 273F:4836  13 06 B8AD                           adc     ax, seq_timer_ctr_2
 273F:483A  BE B8AF                              mov     si, offset sequence_delay_table
-273F:483D  EB 62                                jmp     short loc_915           ; (48A1)
+273F:483D  EB 62                                jmp     short add_sequence_delay_2
                         add_sequence_delay      endp
 
-                                ;\xDF\xDF\xDF\xDF External Entry into Subroutine \xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
+                                ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
+                                ;                              SUBROUTINE
                                 ;
                                 ;         Called from:   273F:0024
+                                ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
-273F:483F                       sub_115:
-273F:483F \xFABE B8AF                              mov     si,offset sequence_delay_table     ; (31E4:B8AF=0)
+                 clear_sequence_delay_table     proc    near
+273F:483F \xFABE B8AF                              mov     si,offset sequence_delay_table
 273F:4842  B9 0028                              mov     cx, NUM_DELAY_ENTRIES
 
 273F:4845                       locloop_910:                                    ;  xref 273F:4857
-273F:4845  F6 44 06 FF                          test    byte ptr [si+6],0FFh
-273F:4849  74 09                                jz      loc_911                 ; Jump if zero
-273F:484B  C7 04 0000                           mov     word ptr [si],0
-273F:484F  C7 44 02 0000                        mov     word ptr [si+2],0
-273F:4854                       loc_911:                                        ;  xref 273F:4849
+273F:4845  F6 44 06 FF                          test    byte ptr [si+6], 0FFh   ; Can the entry be cleared?
+273F:4849  74 09                                jz      loc_911                 ; Skip if not
+273F:484B  C7 04 0000                           mov     word ptr [si], 0        ; Clear the entry
+273F:484F  C7 44 02 0000                        mov     word ptr [si+2], 0
+273F:4854                       loc_911:                                  
 273F:4854  83 C6 07                             add     si, DELAY_ENTRY_SIZE
 273F:4857  E2 EC                                loop    locloop_910             ; Loop if cx > 0
 
 273F:4859  C3                                   retn
+                 clear_sequence_delay_table     endp
 
                                 ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
                                 ;                              SUBROUTINE
@@ -11078,14 +11102,14 @@
 273F:4868                       locloop_912:                                    ;  xref 273F:4889
 273F:4868  F7 04 FFFF                           test    word ptr [si], 0FFFFh   ; Any entry here?
 273F:486C  74 18                                jz      loc_913                 ; Skip if not
-273F:486E  3B 5C 02                             cmp     bx, [si+2]
+273F:486E  3B 5C 02                             cmp     bx, [si+2]              ; Check high word of expiry time
 273F:4871  72 13                                jb      loc_913                 ; Jump if below
-273F:4873  3B 14                                cmp     dx, [si]
+273F:4873  3B 14                                cmp     dx, [si]                ; Check low word
 273F:4875  72 0F                                jb      loc_913                 ; Jump if below
 273F:4877  C7 04 0000                           mov     word ptr [si], 0        ; Timeout for entry reached
 273F:487B  C7 44 02 0000                        mov     word ptr [si+2], 0
-273F:4880  8B 44 04                             mov     ax,[si+4]
-273F:4883  E9 F5AE                              jmp     sequence_execute
+273F:4880  8B 44 04                             mov     ax, [si+4]              ; Get script to execute
+273F:4883  E9 F5AE                              jmp     sequence_execute        ; Execute the script
 273F:4886                       loc_913:
 273F:4886  83 C6 07                             add     si, DELAY_ENTRY_SIZE    ; Move to next entry
 273F:4889  E2 DD                                loop    locloop_912             ; Loop if cx > 0
@@ -11101,7 +11125,7 @@
 273F:488C \xFABE B8AF                              mov     si, offset sequence_delay_table
 273F:488F  B9 0028                              mov     cx, NUM_DELAY_ENTRIES
 273F:4892                       locloop_914:
-273F:4892  C7 04 0000                           mov     word ptr [si],0
+273F:4892  C7 04 0000                           mov     word ptr [si], 0
 273F:4896  83 C6 07                             add     si, DELAY_ENTRY_SIZE
 273F:4899  E2 F7                                loop    locloop_914             ; Loop if cx > 0
 273F:489B  C3                                   retn
@@ -11115,8 +11139,8 @@
 
 273F:489C  BE B8AF                              mov     si, offset sequence_delay_table
 273F:489F  33 C0                                xor     ax, ax
-273F:48A1                       loc_915:
-273F:48A1  8B E9                                mov     bp,cx
+                       add_sequence_delay_2:
+273F:48A1  8B E9                                mov     bp, cx
 273F:48A3  B9 0028                              mov     cx, NUM_DELAY_ENTRIES
 
 273F:48A6                       locloop_916:
@@ -11124,9 +11148,9 @@
 273F:48AA  75 13                                jnz     loc_917                 ; If not, then skip
 273F:48AC  F7 44 02 FFFF                        test    word ptr [si+2],0FFFFh
 273F:48B1  75 0C                                jnz     loc_917
-273F:48B3  89 2C                                mov     [si],bp                 ; Store sequence details
-273F:48B5  89 44 02                             mov     [si+2], ax
-273F:48B8  89 5C 04                             mov     [si+4], bx
+273F:48B3  89 2C                                mov     [si],bp                 ; Store low word of expiry time
+273F:48B5  89 44 02                             mov     [si+2], ax              ; Store high word of expiry time
+273F:48B8  89 5C 04                             mov     [si+4], bx              ; Store script offset
 273F:48BB  88 54 06                             mov     [si+6], dl
 273F:48BE  C3                                   retn
 273F:48BF                       loc_917:
@@ -12099,12 +12123,12 @@
                                 ;         Called from:   273F:8FE4
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
-273F:4F74                       sub_124         proc    near
-273F:4F74  C6 06 3946 00                        mov     byte ptr ds:[3946h],0   ; (273F:3946=1Fh)
+                         seq_pathfind_reset     proc    near
+273F:4F74  C6 06 3946 00                        mov     pathfind_in_progress, 0
 273F:4F79 \xFABE 4227                              mov     si, offset chars_pathfind_data
-273F:4F7C  C7 04 0000                           mov     word ptr [si],0
+273F:4F7C  C7 04 0000                           mov     word ptr [si], 0
 273F:4F80  C3                                   retn
-                                sub_124         endp
+                         seq_pathfind_reset     endp
 
 273F:4F81  00                                   db      0
 
@@ -12130,7 +12154,7 @@
 273F:4F9F  A3 BA1B                              mov     active_hotspot_id, ax
 273F:4FA2  8B 44 2F                             mov     ax, [si+HS_USE_HOTSPOT_ID]
 273F:4FA5  A3 BA19                              mov     use_hotspot_id, ax
-273F:4FA8  8B 44 2D                             mov     ax, [si+HS_HOTSPOT_SCRIPT_ID
+273F:4FA8  8B 44 2D                             mov     ax, [si+HS_HOTSPOT_SCRIPT_ID]
 273F:4FAB  E8 EE86                              call    sequence_execute
 273F:4FAE  C7 44 2F 0000                        mov     word ptr [si+HS_USE_HOTSPOT_ID], 0
 273F:4FB3                       loc_1023:
@@ -12160,12 +12184,12 @@
 273F:4FEC  8B DE                                mov     bx, si
 273F:4FEE  03 5C 61                             add     bx, [si+HS_ACTION_OFFSET]
 273F:4FF1  83 C3 63                             add     bx, HS_FIRST_ACTION_OFFSET
-273F:4FF4  C6 44 4C 01                          mov     byte ptr [si+HS_BLOCKED_FLAG], 1
+273F:4FF4  C6 44 4C 01                          mov     byte ptr [si+HS_BLOCKED_FLAG], BS_INITIAL
 273F:4FF8  C7 44 52 0000                        mov     [si+HS_DEST_HOTSPOT], 0
 273F:4FFD  C6 06 9834 04                        mov     cursor_state, CURSORSTATE_BUMPED
 273F:5002  E9 0661                              jmp     character_set_random_dest
 
-273F:5005                       loc_1026:                                     
+273F:5005                       loc_1026:
 273F:5005  5E                                   pop     si
 273F:5006  C6 44 44 03                          mov     byte ptr [si+HS_CHAR_MODE], CHARMODE_PAUSED
 273F:500A  C7 44 42 000A                        mov     word ptr [si+HS_DELAY_CTR], 10
@@ -12174,26 +12198,26 @@
 273F:5010                       loc_1027:
 273F:5010  C6 45 1D 00                          mov     byte ptr [di+ANIM_SKIP], 0
 273F:5014                       loc_1028:
-273F:5014  F7 44 47 FFFF                        test    [si+HS_USE2_HOTSPOT_ID], 0FFFFh
+273F:5014  F7 44 47 FFFF                        test    [si+SCRIPT_HOTSPOT_ID], 0FFFFh
 273F:5019  74 11                                jz      loc_1029                ; Jump if zero
-273F:501B  8B 44 47                             mov     ax, [si+HS_USE2_HOTSPOT_ID]
+273F:501B  8B 44 47                             mov     ax, [si+SCRIPT_HOTSPOT_ID]
 273F:501E  A3 BA19                              mov     use_hotspot_id, ax
 273F:5021  8B 44 45                             mov     ax, [si+HS_TICK_SCRIPT_OFFSET]
 273F:5024  E8 EE0D                              call    sequence_execute
-273F:5027  C7 44 47 0000                        mov     word ptr [si+HS_USE2_HOTSPOT_ID], 0
+273F:5027  C7 44 47 0000                        mov     word ptr [si+SCRIPT_HOTSPOT_ID], 0
 
 273F:502C                       loc_1029:
-273F:502C  F7 44 4A FFFF                        test    word ptr [si+HS_V4A], 0FFFFh
+273F:502C  F7 44 4A FFFF                        test    word ptr [si+HS_PAUSE_CTR], 0FFFFh
 273F:5031  74 21                                jz      loc_1031                ; Jump if zero
 273F:5033  E8 F330                              call    character_update_movement
 273F:5036  8B 45 1B                             mov     ax, [di+ANIM_HOTSPOT_ID]
 273F:5039  E8 FF16                              call    pathfind_reset
-273F:503C  83 7C 4A 01                          cmp     word ptr [si+HS_V4A], 1
+273F:503C  83 7C 4A 01                          cmp     word ptr [si+HS_PAUSE_CTR], 1
 273F:5040  74 03                                je      loc_1030                ; Jump if equal
-273F:5042  E9 F521                              jmp     loc_870                 ; (4566)
+273F:5042  E9 F521                              jmp     character_paused_list_scan_2
 273F:5045                       loc_1030:                                       ;  xref 273F:5040
-273F:5045  C7 44 4A 0000                        mov     word ptr [si+HS_V4A], 0
-273F:504A  F6 44 44 FF                          test    byte ptr [si+HS_V4A], 0FFh
+273F:5045  C7 44 4A 0000                        mov     word ptr [si+HS_PAUSE_CTR], 0
+273F:504A  F6 44 44 FF                          test    byte ptr [si+HS_CHAR_MODE], 0FFh
 273F:504E  75 04                                jnz     loc_1031                ; Jump if not zero
 273F:5050  E8 F334                              call    character_pathfind_clear
 273F:5053  C3                                   retn
@@ -12259,7 +12283,7 @@
 273F:50C5  E9 12E9                              jmp     display_message_dialog
 
 273F:50C8                       loc_1040:                                       ;  xref 273F:505A
-273F:50C8  F7 44 58 FFFF                        test    word ptr [si+58h],0FFFFh
+273F:50C8  F7 44 58 FFFF                        test    word ptr [si+HS_V58], 0FFFFh
 273F:50CD  74 0F                                jz      loc_1041                ; Jump if zero
 273F:50CF  F6 06 6D52 FF                        test    player_action_state, 0FFh
 273F:50D4  74 08                                jz      loc_1041                ; Jump if zero
@@ -12291,7 +12315,7 @@
 273F:5107                       loc_1043:                                       ;  xref 273F:5102
 273F:5107  3B 47 03                             cmp     ax, [bx+CURRENT_ACTION_ROOM_NUM] ; Compare against room number
 273F:510A  74 03                                je      loc_1044                ; Jump if equal
-273F:510C  E9 01F6                              jmp     loc_1078
+273F:510C  E9 01F6                              jmp     npc_change_room
 273F:510F                       loc_1044:                                       ;  xref 273F:510A
 273F:510F  C6 45 1D 00                          mov     byte ptr [di+ANIM_SKIP], 0
 273F:5113  E9 F0A8                              jmp     action_dispatch
@@ -12315,7 +12339,7 @@
 273F:5130  56                                   push    si
 273F:5131  57                                   push    di
 273F:5132  53                                   push    bx
-273F:5133  E8 F42A                              call    sub_105                 ; (4560)
+273F:5133  E8 F42A                              call    character_paused_list_scan
 273F:5136  8B 4C 56                             mov     cx, [si+HS_DEST_Y]
 273F:5139  8B 5C 54                             mov     bx, [si+HS_DEST_X]
 273F:513C  8B 45 1B                             mov     ax, [di+ANIM_HOTSPOT_ID]
@@ -12328,17 +12352,17 @@
 273F:514A  75 01                                jnz     loc_1050                ; Jump if not zero
 273F:514C  C3                                   retn
 273F:514D                       loc_1050:                                       ;  xref 273F:514A
-273F:514D  3D 0001                              cmp     ax,1
+273F:514D  3D 0001                              cmp     ax, PF_OK
 273F:5150  74 0C                                je      loc_1051                ; Jump if equal
 273F:5152  F7 44 52 FFFF                        test    [si+HS_DEST_HOTSPOT], 0FFFFh
 273F:5157  75 07                                jnz     loc_1052                ; Jump if not zero
-273F:5159  3D 0002                              cmp     ax,2
+273F:5159  3D 0002                              cmp     ax, PF_DEST_OCCUPIED
 273F:515C  75 02                                jne     loc_1052                ; Jump if not equal
 273F:515E                       loc_1051:                                       ;  xref 273F:5150
 273F:515E  EB 79                                jmp     short loc_1058          ; (51D9)
 273F:5160                       loc_1052:                                       ;  xref 273F:5157, 515C
 273F:5160  87 D3                                xchg    dx,bx
-273F:5162  80 7C 4C 02                          cmp     byte ptr [si+HS_BLOCKED_FLAG], 2
+273F:5162  80 7C 4C 02                          cmp     byte ptr [si+HS_BLOCKED_FLAG], BS_FINAL
 273F:5166  74 24                                je      loc_1054                ; Jump if equal
 273F:5168  80 44 4C 01                          add     byte ptr [si+HS_BLOCKED_FLAG], 1
 273F:516C  F6 44 4D FF                          test    byte ptr [si+HS_V4D], 0FFh
@@ -12370,11 +12394,11 @@
 273F:51A7  5B                                   pop     bx
 
 273F:51A8                       sub_125         proc    near
-273F:51A8  E8 F296                              call    sub_97                  ; (4441)
+273F:51A8  E8 F296                              call    character_paused_list_reset
 273F:51AB  E8 F1B8                              call    character_update_movement
 273F:51AE  83 6C 61 05                          sub     word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
 273F:51B2  C6 44 4D 00                          mov     byte ptr [si+HS_V4D], 0
-273F:51B6  C6 44 4C 00                          mov     byte ptr [si+HS_BLOCKED_FLAG], 0
+273F:51B6  C6 44 4C 00                          mov     byte ptr [si+HS_BLOCKED_FLAG], BS_NONE
 273F:51BA  C6 44 44 03                          mov     byte ptr [si+HS_CHAR_MODE], CHARMODE_3
 273F:51BE  C7 44 42 0002                        mov     word ptr [si+HS_DELAY_CTR], 2
 273F:51C3  8B DE                                mov     bx, si
@@ -12396,18 +12420,18 @@
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
 273F:51D9                       loc_1058:                                       ;  xref 273F:515E
-273F:51D9  C6 44 4C 00                          mov     byte ptr [si+HS_BLOCKED_FLAG],0
-273F:51DD  F7 07 FFFF                           test    word ptr [bx],0FFFFh
-273F:51E1  75 06                                jnz     loc_1059                ; Jump if not zero
-273F:51E3  8B DA                                mov     bx,dx
-273F:51E5  C6 07 02                             mov     byte ptr [bx],2
+273F:51D9  C6 44 4C 00                          mov     byte ptr [si+HS_BLOCKED_FLAG], BS_NONE
+273F:51DD  F7 07 FFFF                           test    word ptr [bx], 0FFFFh   ; Any pathfinding set defined?
+273F:51E1  75 06                                jnz     loc_1059                ; Jump if yes
+273F:51E3  8B DA                                mov     bx, dx
+273F:51E5  C6 07 02                             mov     byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
 273F:51E8  C3                                   retn
 273F:51E9                       loc_1059:                                       ;  xref 273F:51E1
 273F:51E9  87 DA                                xchg    bx,dx
 273F:51EB  C6 07 05                             mov     byte ptr [bx], CHAR_ACTION_CONTINUE_WALK
 273F:51EE  E8 F01C                              call    character_translate_movements
-273F:51F1  83 65 02 F8                          and     word ptr [di+2],0FFF8h
-273F:51F5  83 64 0F F8                          and     word ptr [si+0Fh],0FFF8h
+273F:51F1  83 65 02 F8                          and     word ptr [di+ANIM_Y], 0FFF8h
+273F:51F5  83 64 0F F8                          and     word ptr [si+HS_Y], 0FFF8h
 273F:51F9                       loc_1060:                                       ;  xref 273F:5116
 273F:51F9  8B 44 52                             mov     ax, [si+HS_DEST_HOTSPOT]
 273F:51FC  0B C0                                or      ax,ax                   ; Zero ?
@@ -12427,7 +12451,7 @@
 273F:5216                       loc_ret_1061:                                   ;  xref 273F:521C
 273F:5216  C3                                   retn
 273F:5217                       loc_1062:                                       ;  xref 273F:51FE, 5203, 5211
-273F:5217  E8 BF9B                              call    sub_41                  ; (11B5)
+273F:5217  E8 BF9B                              call    character_paused_list_check
 273F:521A  0B C0                                or      ax,ax                   ; Zero ?
 273F:521C  75 F8                                jnz     loc_ret_1061            ; Jump if not zero
 273F:521E  F6 44 49 FF                          test    byte ptr [si+HS_PATHFIND_COVERED], 0FFh
@@ -12556,7 +12580,7 @@
                                 ; character walking to the exit to route them to the right room
                                 ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
 
-273F:5305                       loc_1078:                                       ;  xref 273F:510C
+                             npc_change_room:
 273F:5305  80 44 60 01                          add     byte ptr [si+HS_EXIT_CTR], 1
 273F:5309  80 7C 60 05                          cmp     byte ptr [si+HS_EXIT_CTR], 5
 273F:530D  73 AF                                jae     loc_1073                ; Jump if above or =
@@ -12657,7 +12681,7 @@
 273F:53D1                       loc_1085:
 273F:53D1  5B                                   pop     bx
 273F:53D2  C6 07 01                             mov     byte ptr [bx], CHAR_ACTION_START_WALK
-273F:53D5  C6 45 27 01                          mov     byte ptr [di+ANIM_UNKNOWN1], 1
+273F:53D5  C6 45 27 01                          mov     byte ptr [di+ANIM_WALK_FLAG], 1
 273F:53D9  C3                                   retn
 
                                 ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
@@ -12777,9 +12801,9 @@
 273F:5490                       loc_1092:                                       ;  xref 273F:549D
 273F:5490 \xFAF7 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, [diWALKTO_HOTSPOT_ID] ; Found entry for active hotspot?
+273F:5496  3B 05                                cmp     ax, [di+WALKTO_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:549A  83 C7 06                             add     di, WALKTO_RECORD_SIZE  ; Move to next record
 273F:549D  EB F1                                jmp     short loc_1092
 273F:549F                       loc_1093:
 273F:549F  8B 4D 02                             mov     cx, [di+WALKTO_X]
@@ -12788,7 +12812,7 @@
 273F:54A7  F6 C6 80                             test    dh, 80h
 273F:54AA  74 47                                jz      loc_1095                ; Jump if zero
 273F:54AC  5F                                   pop     di
-273F:54AD  88 45 27                             mov     [di+ANIM_UNKNOWN1], al
+273F:54AD  88 45 27                             mov     [di+ANIM_WALK_FLAG], al
 273F:54B0  80 E6 7F                             and     dh, 7Fh
 273F:54B3  8B 44 0D                             mov     ax, [si+HS_X]
 273F:54B6  D1 E8                                shr     ax, 1
@@ -12824,7 +12848,7 @@
 273F:54F1  B0 00                                mov     al, 0
 273F:54F3                       loc_1095:                                       ;  xref 273F:54AA
 273F:54F3  5F                                   pop     di
-273F:54F4  88 45 27                             mov     [di+ANIM_UNKNOWN1], al
+273F:54F4  88 45 27                             mov     [di+ANIM_WALK_FLAG], al
 273F:54F7  8B 44 0D                             mov     ax, [si+HS_X]
 273F:54FA  2B C1                                sub     ax, cx
 273F:54FC  73 02                                jnc     loc_1096                ; Jump if carry=0
@@ -13077,7 +13101,7 @@
 
                   character_set_random_dest     proc    near
 273F:5666 \xFAC6 07 01                             mov     byte ptr [bx], CHAR_ACTION_START_WALK
-273F:5669  C6 45 27 01                          mov     byte ptr [di+ANIM_UNKNOWN1], 1
+273F:5669  C6 45 27 01                          mov     byte ptr [di+ANIM_WALK_FLAG], 1
 273F:566D  56                                   push    si
 273F:566E  56                                   push    si
 273F:566F  8B 44 06                             mov     ax, [si+HS_ROOM_NUM]    ; Get char's room rsc
@@ -13820,7 +13844,7 @@
 273F:5BAA  E8 EB41                              call    character_face_hotspot
 273F:5BAD  81 3E BA1B 0412                      cmp     active_hotspot_id, 412h
 273F:5BB3  75 08                                jne     loc_1170                ; Jump if not equal
-273F:5BB5  81 3E BA19 2710                      cmp     use_hotspot_id, 2710h

@@ Diff output truncated at 100000 characters. @@

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.





More information about the Scummvm-git-logs mailing list