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

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Thu Mar 23 13:27:01 CET 2006


Revision: 21418
Author:   dreammaster
Date:     2006-03-23 13:26:13 -0800 (Thu, 23 Mar 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=21418&view=rev

Log Message:
-----------
Partially disassembly of the pathfinding code and miscellaneous support methods

Modified Paths:
--------------
    scummvm/trunk/engines/lure/diassembly/LURE.ASM
    scummvm/trunk/engines/lure/diassembly/Lure_notes.txt
Modified: scummvm/trunk/engines/lure/diassembly/LURE.ASM
===================================================================
--- scummvm/trunk/engines/lure/diassembly/LURE.ASM	2006-03-23 04:49:03 UTC (rev 21417)
+++ scummvm/trunk/engines/lure/diassembly/LURE.ASM	2006-03-23 21:26:13 UTC (rev 21418)
@@ -140,9 +140,10 @@
 ANIM_HOTSPOT_ID           equ  1Bh
 ANIM_LAYER1_SKIP          equ  1Dh
 ANIM_VOICE_CHAR_ID        equ  1Eh
+ANIM_CHAR_RECT_Y          equ  22h
 ANIM_VOICE_CTR            equ  24h
 ANIM_DIRECTION            equ  26h
-ANIM_UNKNOWN1              equ  27h
+ANIM_UNKNOWN1             equ  27h
 ANIM_START_COLOUR         equ  28h
 
 ; Hotspot header record constants
@@ -174,18 +175,34 @@
 HS_START_COLOUR           equ  23h
 HS_SCRIPT_OFFSET          equ  24h
 HS_MOVEMENT_OFFSET        equ  24h
+HS_STEP_CTR               equ  26h
+HS_FRAME_OFFSET           equ  28h
 HS_FRAME_NUM              equ  2Ah
+HS_V2B                    equ  2Bh
+HS_HOTSPOT_SCRIPT_ID      equ  2Dh
+HS_USE_HOTSPOT_ID         equ  2Fh
+HS_V33                    equ  33h
 HS_TALK_X                 equ  35h
 HS_TALK_Y                 equ  36h
 HS_TALK_COUNTDOWN         equ  37h
 HS_TALK_CHAR_ID           equ  39h
 HS_RESPONSE_ID            equ  3Ch
-HS_UNKNOWN1               equ  44h
+HS_V42                    equ  42h
+HS_V44                    equ  44h
+HS_HOTSPOT2_SCRIPT_ID     equ  45h
+HS_USE2_HOTSPOT_ID        equ  47h
+HS_V49                    equ  49h
+HS_V4A                    equ  4Ah
+HS_V4C                    equ  4Ch
+HS_V4D                    equ  4Dh
+HS_V4E                    equ  4Eh
 HS_DIRECTION              equ  50h
 HS_DEST_HOTSPOT           equ  52h
 HS_DEST_X                 equ  54h
 HS_DEST_Y                 equ  56h
-HS_MOMENT_SRC_OFFSET      equ  5Ah
+HS_V58                    equ  58h
+HS_MOVEMENT_SRC_OFFSET    equ  5Ah
+HS_V60                    equ  60h
 HS_ACTION_OFFSET          equ  61h
 HS_FIRST_ACTION_OFFSET    equ  63h
 
@@ -195,9 +212,18 @@
 PIXEL_DATA_SEGMENT        equ   3
 PIXEL_DATA_SIZE           equ   5
 PIXEL_FRAME_SIZE          equ   7
+PIXEL_MOVEREC_UP          equ   9
+PIXEL_MOVEREC_DOWN        equ   0Bh
+PIXEL_MOVEREC_LEFT        equ   0Dh
+PIXEL_MOVEREC_RIGHT       equ   0Fh
+PIXEL_FRAMENUM_UP         equ   11h
+PIXEL_FRAMENUM_DOWN       equ   12h
+PIXEL_FRAMENUM_LEFT       equ   13h
+PIXEL_FRAMENUM_RIGHT      equ   14h
+
 PIXELFLAG_HAS_TABLE       equ   4
 
-NOONE_HOTSPOT_ID          equ   3E7h
+NOONE_HOTSPOT_ID          equ  3E7h
 PLAYER_HOTSPOT_ID         equ  3E8h
 SKORL_HOTSPOT_ID          equ  3EAh
 
@@ -214,11 +240,15 @@
 
 ; Room exit hotspot record constants
 REHS_RECORD_SIZE          equ  11h
-REHS_HOTSPOT_1            equ  0
-REHS_RESULT_1             equ  2
-REHS_HOTSPOT_2            equ  6
-REHS_HOTSPOT_2            equ  8
-REHS_EXIT_BLOCKED         equ  12
+REHS_HOTSPOT1_ID            equ  0
+REHS_HOTSPOT1_CURRENT_FRAME equ  2
+REHS_HOTSPOT1_DEST_FRAME    equ  3
+REHS_HOTSPOT2_ID            equ  6
+REHS_HOTSPOT2_CURRENT_FRAME equ  8
+REHS_HOTSPOT2_DEST_FRAME    equ  9
+REHS_EXIT_BLOCKED           equ  0Ch
+REHS_HOTSPOT1_OFFSET        equ  0Dh
+REHS_HOTSPOT2_OFFSET        equ  0Fh
 
 ; Room header record constants
 RH_ROOM_NUM               equ  2
@@ -264,10 +294,16 @@
 FACING_LEFT   equ   2
 FACING_RIGHT  equ   3
 
+FACING2_LEFT  equ   1
+FACING2_RIGHT equ   2
+FACING2_DOWN  equ   3
+FACING2_UP    equ   4
+
 ; Movement record constants
 MOVEMENT_FRAME_NUM  equ  0
 MOVEMENT_X_CHANGE   equ  2
 MOVEMENT_Y_CHANGE   equ  4
+MOVEMENT_REC_SIZE   equ  6
 
 ; Talk constants
 TALK_PRE_SEQUENCE   equ  0
@@ -283,12 +319,18 @@
 TALK_DIALOG_WIDTH   equ  128
 
 ; Player actions used in player_tick_proc
-PLAYER_ACTION_START_WALK       equ  1
-PLAYER_ACTION_DISPATCH_ACTION  equ  2
-PLAYER_ACTION_EXEC_SCRIPT      equ  3
-PLAYER_ACTION_CONTINUE_WALK    equ  5
+CURRENT_ACTION_RECORD_SIZE   equ  5
+CURRENT_ACTION_SUPPORT_TABLE equ  1
+CURRENT_ACTION_ROOM_NUM      equ  3
 
+CHAR_ACTION_NONE             equ  0
+CHAR_ACTION_START_WALK       equ  1
+CHAR_ACTION_DISPATCH_ACTION  equ  2
+CHAR_ACTION_EXEC_SCRIPT      equ  3
+CHAR_ACTION_PROCESSING_PATH  equ  4
+CHAR_ACTION_CONTINUE_WALK    equ  5
 
+
                                 ; The following equates show data references outside the range of the program.
 
      = 0000                     data_1e         equ     0                       ; (0000:0000=30h)
@@ -1407,9 +1449,9 @@
 273F:0801  8E C0                                mov     es, ax
 273F:0803  B1 03                                mov     cl,3
 273F:0805  A1 11D8                              mov     ax, mouse_y2
-273F:0808  A3 0784                              mov     word ptr ds:[784h],ax   ; (273F:0784=0BA07h)
+273F:0808  A3 0784                              mov     saved_mouse_y, ax
 273F:080B  A1 11D6                              mov     ax, mouse_x2
-273F:080E  A3 0782                              mov     word ptr ds:[782h],ax   ; (273F:0782=0E1Eh)
+273F:080E  A3 0782                              mov     saved_mouse_x, ax
 273F:0811  A1 076C                              mov     ax, menu_items_proc
 273F:0814  26: A3 3368                          mov     es:data_78e,ax          ; (0874:3368=4758h)
 273F:0818  A0 9835                              mov     al, num_inventory_items
@@ -1468,25 +1510,25 @@
 273F:08A1  33 C0                                xor     ax,ax                   ; Zero register
 273F:08A3  AB                                   stosw                           ; Store ax to es:[di]
 273F:08A4  8E DD                                mov     ds,bp
-273F:08A6  C6 06 9834 01                        mov     byte ptr data_427,1     ; (273F:9834=0F9h)
+273F:08A6  C6 06 9834 01                        mov     byte ptr data_1084,1     ; (273F:9834=0F9h)
 273F:08AB  A3 1924                              mov     hotspot_id, ax
 273F:08AE \xFABE 6CEF                              mov     si, offset player_hotspot_rec
 273F:08B1  89 44 52                             mov     [si+HS_DEST_HOTSPOT],ax
 273F:08B4  88 44 2A                             mov     [si+2Ah],al
 273F:08B7  88 44 FF                             mov     [si-1],al
 273F:08BA  8B DE                                mov     bx,si
-273F:08BC  03 5C 61                             add     bx,[si+61h]
-273F:08BF  83 C3 63                             add     bx,63h
-273F:08C2  89 44 42                             mov     [si+42h],ax
-273F:08C5  88 44 44                             mov     [si+44h],al
-273F:08C8  C6 07 02                             mov     byte ptr [bx],2
+273F:08BC  03 5C 61                             add     bx, [si+HS_ACTION_OFFSET]
+273F:08BF  83 C3 63                             add     bx, HS_FIRST_ACTION_OFFSET
+273F:08C2  89 44 42                             mov     [si+HS_V42], ax
+273F:08C5  88 44 44                             mov     [si+HS_V44], al
+273F:08C8  C6 07 02                             mov     byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
 273F:08CB  C7 47 01 65F3                        mov     word ptr [bx+1], offset player_action_support_record
-273F:08D0                       loc_65:                                         ;  xref 273F:0897
+273F:08D0                       loc_65:                                    
 273F:08D0  8E DD                                mov     ds,bp
-273F:08D2  8B 0E 0782                           mov     cx,word ptr ds:[782h]   ; (273F:0782=0E1Eh)
+273F:08D2  8B 0E 0782                           mov     cx, saved_mouse_x
 273F:08D6  89 0E 11D6                           mov     mouse_x2, cx
 273F:08DA  89 0E 11D1                           mov     mouse_x, cx
-273F:08DE  8B 16 0784                           mov     dx,word ptr ds:[784h]   ; (273F:0784=0BA07h)
+273F:08DE  8B 16 0784                           mov     dx, saved_mouse_y
 273F:08E2  89 16 11D8                           mov     mouse_y2, dx
 273F:08E6  89 16 11D3                           mov     mouse_y, dx
 273F:08EA  D1 E1                                shl     cx,1                    ; Shift w/zeros fill
@@ -2465,13 +2507,13 @@
 273F:0EB1  57                                   push    di
 273F:0EB2  53                                   push    bx
 273F:0EB3  8B 5C 24                             mov     bx, [si+HS_MOVEMENT_OFFSET]
-273F:0EB6  8B 44 26                             mov     ax, [si+26h]
-273F:0EB9  3B 47 02                             cmp     ax, [bx+2]              ; Match found?
-273F:0EBC  75 23                                jne     loc_130
-273F:0EBE  83 C3 04                             add     bx, 4                   ; Move to next entry
-273F:0EC1  C7 44 26 0000                        mov     word ptr [si+26h], 0
-273F:0EC6  C7 44 28 0000                        mov     word ptr [si+28h], 0
-273F:0ECB  89 5C 24                             mov     [si+HS_MOVEMENT_OFFSET], bx
+273F:0EB6  8B 44 26                             mov     ax, [si+HS_STEP_CTR]
+273F:0EB9  3B 47 02                             cmp     ax, [bx+2]              ; Any steps remaining?
+273F:0EBC  75 23                                jne     loc_130                 ; Yes, so carry on
+273F:0EBE  83 C3 04                             add     bx, 4                   ; Move to next movement rec
+273F:0EC1  C7 44 26 0000                        mov     word ptr [si+HS_STEP_CTR], 0     ; Reset counter
+273F:0EC6  C7 44 28 0000                        mov     word ptr [si+HS_FRAME_OFFSET], 0 ; Reset offset
+273F:0ECB  89 5C 24                             mov     [si+HS_MOVEMENT_OFFSET], bx  ; Update movement ptr
 273F:0ECE  83 3F FF                             cmp     word ptr [bx], 0FFFFh   ; At end of list?
 273F:0ED1  75 07                                jne     loc_129
 273F:0ED3  B8 0001                              mov     ax,1                    ; Yes - so return
@@ -2481,22 +2523,22 @@
 273F:0ED9  C3                                   retn
 273F:0EDA                       loc_129:
 273F:0EDA  57                                   push    di
-273F:0EDB  8B 3F                                mov     di, [bx]                ; Get entry offset
-273F:0EDD  33 DB                                xor     bx,bx                   ; Zero register
+273F:0EDB  8B 3F                                mov     di, [bx]                ; Get ptr to direction frames
+273F:0EDD  33 DB                                xor     bx, bx
 273F:0EDF  EB 14                                jmp     short loc_131
 273F:0EE1                       loc_130:
 273F:0EE1  57                                   push    di
-273F:0EE2  8B 3F                                mov     di, [bx]
-273F:0EE4  8B 5C 28                             mov     bx, [si+28h]
-273F:0EE7  03 FB                                add     di,bx
-273F:0EE9  83 3D FF                             cmp     word ptr [di], 0FFFFh
-273F:0EEC  75 07                                jne     loc_131                 ; Jump if not equal
+273F:0EE2  8B 3F                                mov     di, [bx]                ; Get ptr to direction frames
+273F:0EE4  8B 5C 28                             mov     bx, [si+HS_FRAME_OFFSET]; Get offset for movement frame
+273F:0EE7  03 FB                                add     di, bx                  ; Add on offset
+273F:0EE9  83 3D FF                             cmp     word ptr [di], 0FFFFh   ; End of movement set for direciton?
+273F:0EEC  75 07                                jne     loc_131                 ; Jump if not
 273F:0EEE  2B FB                                sub     di, bx
 273F:0EF0  33 DB                                xor     bx, bx
-273F:0EF2  89 5C 28                             mov     [si+28h], bx
+273F:0EF2  89 5C 28                             mov     [si+HS_FRAME_OFFSET], bx ; Reset to start of movement data
 ; di=movement record 5bb8h, si=6cefh
 273F:0EF5                       loc_131:
-273F:0EF5  8B 05                                mov     ax, [diMOVEMENT_FRAME_NUM] ; Get new frame number
+273F:0EF5  8B 05                                mov     ax, [di+MOVEMENT_FRAME_NUM] ; Get new frame number
 273F:0EF7  57                                   push    di
 273F:0EF8  8B 7C 21                             mov     di, [si+HS_PIXEL_OFFSET]
 273F:0EFB  8B 4D 07                             mov     cx, [di+PIXEL_FRAME_SIZE]
@@ -2535,8 +2577,8 @@
 273F:0F48  89 45 02                             mov     [di+ANIM_Y], ax
 273F:0F4B  8B 05                                mov     ax, [di+ANIM_X]
 273F:0F4D                       loc_137:
-273F:0F4D  83 44 28 06                          add     word ptr [si+28h], 6
-273F:0F51  83 44 26 01                          add     word ptr [si+26h], 1
+273F:0F4D  83 44 28 06                          add     word ptr [si+HS_FRAME_OFFSET], MOVEMENT_REC_SIZE
+273F:0F51  83 44 26 01                          add     word ptr [si+HS_STEP_CTR], 1
 273F:0F55  33 C0                                xor     ax, ax
 273F:0F57  5B                                   pop     bx
 273F:0F58  5F                                   pop     di
@@ -2733,7 +2775,7 @@
              seq_set_blocking_hotspot_script    proc    near
 273F:10A3  81 FB 03E8                           cmp     bx, PLAYER_HOTSPOT_ID
 273F:10A7  75 05                                jne     loc_154                 ; Jump if not equal
-273F:10A9  C6 06 9834 02                        mov     byte ptr data_427,2     ; (273F:9834=0F9h)
+273F:10A9  C6 06 9834 02                        mov     byte ptr data_1084,2     ; (273F:9834=0F9h)
 273F:10AE                       loc_154:                                        ;  xref 273F:10A7
 273F:10AE  E8 FC37                              call    get_room_resource_pointer
 273F:10B1  D1 E1                                shl     cx,1                    ; Shift w/zeros fill
@@ -2744,10 +2786,10 @@
 273F:10BE  8B DE                                mov     bx, si
 273F:10C0  03 5C 61                             add     bx, [si+HS_ACTION_OFFSET]
 273F:10C3  83 C3 63                             add     bx, HS_FIRST_ACTION_OFFSET
-273F:10C6  C6 07 03                             mov     byte ptr [bx], PLAYER_ACTION_EXEC_SCRIPT
+273F:10C6  C6 07 03                             mov     byte ptr [bx], CHAR_ACTION_EXEC_SCRIPT
 273F:10C9  8B 7C 0B                             mov     di, [si+HS_ANIM_OFFSET]
 273F:10CC  C6 44 49 01                          mov     byte ptr [si+49h], 1
-273F:10D0  E9 605B                              jmp     loc_1413                ; (712E)
+273F:10D0  E9 605B                              jmp     pathfind_flag_covered_cells
              seq_set_blocking_hotspot_script    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
@@ -2805,81 +2847,78 @@
                                 ;         Called from:   273F:4FBF, 5E61, 60E7
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:110B                       sub_40          proc    near
+             character_find_impinging_chars     proc    near
 273F:110B  56                                   push    si
 273F:110C  53                                   push    bx
 273F:110D  8B 55 0E                             mov     dx, [di+ANIM_ROOM_NUM]
 273F:1110 \xFABE B14E                              mov     si, offset animation_table
 273F:1113  B9 002D                              mov     cx, NUM_ANIMATION_SLOTS
-273F:1116 \xFABB 10C0                              mov     bx, offset data_616
-273F:1119  C7 06 10BE 0000                      mov     data_615, 0
-273F:111F  8B 05                                mov     ax, [di]
-273F:1121  A3 10E6                              mov     word ptr ds:[10E6h],ax  ; (273F:10E6=0C329h)
-273F:1124  03 45 13                             add     ax,[di+13h]
-273F:1127  A3 10E8                              mov     word ptr ds:[10E8h],ax  ; (273F:10E8=4EBFh)
-273F:112A  8B 45 02                             mov     ax,[di+2]
-273F:112D  03 45 15                             add     ax,[di+15h]
+273F:1116 \xFABB 10C0                              mov     bx, offset impinging_char_list
+273F:1119  C7 06 10BE 0000                      mov     num_impinging_chars, 0
+273F:111F  8B 05                                mov     ax, [di+ANIM_X]
+273F:1121  A3 10E6                              mov     char_rect_left, ax
+273F:1124  03 45 13                             add     ax, [di+ANIM_WIDTH_COPY]
+273F:1127  A3 10E8                              mov     char_rect_right, ax
+273F:112A  8B 45 02                             mov     ax, [di+ANIM_Y]
+273F:112D  03 45 15                             add     ax, [di+ANIM_HEIGHT_COPY]
 273F:1130  50                                   push    ax
-273F:1131  2B 45 17                             sub     ax,[di+17h]
-273F:1134  2B 45 22                             sub     ax,[di+22h]
-273F:1137  A3 10EA                              mov     word ptr ds:[10EAh],ax  ; (273F:10EA=0B9B1h)
+273F:1131  2B 45 17                             sub     ax, [di+ANIM_Y_CORRECTION]
+273F:1134  2B 45 22                             sub     ax, [di+ANIM_CHAR_RECT_Y]
+273F:1137  A3 10EA                              mov     char_rect_top, ax
 273F:113A  58                                   pop     ax
-273F:113B  03 45 22                             add     ax,[di+22h]
-273F:113E  A3 10EC                              mov     word ptr ds:[10ECh],ax  ; (273F:10EC=2Dh)
+273F:113B  03 45 22                             add     ax, [di+ANIM_CHAR_RECT_Y]
+273F:113E  A3 10EC                              mov     char_rect_bottom, ax
 
-273F:1141                       locloop_160:                                    ;  xref 273F:119D
-273F:1141  3B FE                                cmp     di,si
-273F:1143  74 55                                je      loc_161                 ; Jump if equal
-273F:1145  F6 44 0C FF                          test    byte ptr [si+0Ch],0FFh
-273F:1149  74 4F                                jz      loc_161                 ; Jump if zero
-273F:114B  3B 54 0E                             cmp     dx,[si+0Eh]
-273F:114E  75 4A                                jne     loc_161                 ; Jump if not equal
-273F:1150  8B 44 1B                             mov     ax,[si+1Bh]
-273F:1153  3D 0408                              cmp     ax,408h
-273F:1156  73 42                                jae     loc_161                 ; Jump if above or =
-273F:1158  F6 44 1D FF                          test    byte ptr [si+1Dh],0FFh
-273F:115C  75 3C                                jnz     loc_161                 ; Jump if not zero
-273F:115E  8B 44 19                             mov     ax,[si+19h]
-273F:1161  3B 45 24                             cmp     ax,[di+24h]
+273F:1141                       locloop_160:                                    ; Loop through animations
+273F:1141  3B FE                                cmp     di, si                  ; Is it the char's animation?
+273F:1143  74 55                                je      loc_161                 ; Skip if yes
+273F:1145  F6 44 0C FF                          test    byte ptr [si+ANIM_LAYER], 0FFh
+273F:1149  74 4F                                jz      loc_161                 ; If no layer, then skip
+273F:114B  3B 54 0E                             cmp     dx, [si+ANIM_ROOM_NUM]
+273F:114E  75 4A                                jne     loc_161                 ; Skip if not in same room
+273F:1150  8B 44 1B                             mov     ax, [si+ANIM_HOTSPOT_ID]
+273F:1153  3D 0408                              cmp     ax, 408h
+273F:1156  73 42                                jae     loc_161                 ; Skip if anim not a character
+273F:1158  F6 44 1D FF                          test    byte ptr [si+ANIM_LAYER1_SKIP], 0FFh
+273F:115C  75 3C                                jnz     loc_161                 ; Skip if skip flag set
+273F:115E  8B 44 19                             mov     ax, [si+ANIM_HOTSPOT_OFFSET]
+273F:1161  3B 45 24                             cmp     ax, [di+ANIM_VOICE_CTR]
 273F:1164  74 34                                je      loc_161                 ; Jump if equal
-273F:1166  8B 04                                mov     ax,[si]
-273F:1168  3B 06 10E8                           cmp     ax,word ptr ds:[10E8h]  ; (273F:10E8=4EBFh)
+273F:1166  8B 04                                mov     ax, [si+ANIM_X]
+273F:1168  3B 06 10E8                           cmp     ax, char_rect_right
 273F:116C  73 2C                                jae     loc_161                 ; Jump if above or =
-273F:116E  03 44 13                             add     ax,[si+13h]
-273F:1171  3B 06 10E6                           cmp     ax,word ptr ds:[10E6h]  ; (273F:10E6=0C329h)
+273F:116E  03 44 13                             add     ax, [si+ANIM_WIDTH_COPY]
+273F:1171  3B 06 10E6                           cmp     ax, char_rect_left
 273F:1175  72 23                                jb      loc_161                 ; Jump if below
 273F:1177  74 21                                jz      loc_161                 ; Jump if zero
-273F:1179  8B 44 02                             mov     ax,[si+2]
-273F:117C  03 44 15                             add     ax,[si+15h]
-273F:117F  8B E8                                mov     bp,ax
-273F:1181  03 44 22                             add     ax,[si+22h]
-273F:1184  3B 06 10EA                           cmp     ax,word ptr ds:[10EAh]  ; (273F:10EA=0B9B1h)
+273F:1179  8B 44 02                             mov     ax, [si+ANIM_Y]
+273F:117C  03 44 15                             add     ax, [si+ANIM_HEIGHT_COPY]
+273F:117F  8B E8                                mov     bp, ax
+273F:1181  03 44 22                             add     ax, [si+ANIM_CHAR_RECT_Y]
+273F:1184  3B 06 10EA                           cmp     ax, char_rect_top
 273F:1188  72 10                                jb      loc_161                 ; Jump if below
-273F:118A  8B C5                                mov     ax,bp
-273F:118C  2B 44 17                             sub     ax,[si+17h]
-273F:118F  2B 44 22                             sub     ax,[si+22h]
-273F:1192  3B 06 10EC                           cmp     ax,word ptr ds:[10ECh]  ; (273F:10EC=2Dh)
+273F:118A  8B C5                                mov     ax, bp
+273F:118C  2B 44 17                             sub     ax, [si+ANIM_Y_CORRECTION]
+273F:118F  2B 44 22                             sub     ax, [si+ANIM_CHAR_RECT_Y]
+273F:1192  3B 06 10EC                           cmp     ax, char_rect_bottom
 273F:1196  74 0E                                je      loc_162                 ; Jump if equal
 273F:1198  72 0C                                jc      loc_162                 ; Jump if carry Set
-273F:119A                       loc_161:                                        ;  xref 273F:1143, 1149, 114E, 1156
-                                                                                ;            115C, 1164, 116C, 1175
-                                                                                ;            1177, 1188, 11B3
-273F:119A \xFA83 C6 29                             add     si,29h
-273F:119D  E2 A2                                loop    locloop_160             ; Loop if cx > 0
+273F:119A                       loc_161:
+273F:119A \xFA83 C6 29                             add     si, ANIMATION_SLOT_SIZE
+273F:119D  E2 A2                                loop    locloop_160
 
-273F:119F  C7 07 0000                           mov     word ptr [bx],0
+273F:119F  C7 07 0000                           mov     word ptr [bx], 0        ; Flag end of list
 273F:11A3  5B                                   pop     bx
 273F:11A4  5E                                   pop     si
 273F:11A5  C3                                   retn
-273F:11A6                       loc_162:                                        ;  xref 273F:1196, 1198
-273F:11A6  8B 44 1B                             mov     ax,[si+1Bh]
-273F:11A9  89 07                                mov     [bx],ax
-273F:11AB  83 C3 02                             add     bx,2
-273F:11AE  83 06 10BE 01                        add     data_615, 1
+273F:11A6                       loc_162:                                        ; Animation is impinging char
+273F:11A6  8B 44 1B                             mov     ax, [si+ANIM_HOTSPOT_ID]
+273F:11A9  89 07                                mov     [bx], ax                ; Store character Id
+273F:11AB  83 C3 02                             add     bx, 2
+273F:11AE  83 06 10BE 01                        add     num_impinging_chars, 1
 273F:11B3  EB E5                                jmp     short loc_161           ; (119A)
-                                sub_40          endp
+             character_find_impinging_chars     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
                                 ;
@@ -2888,15 +2927,15 @@
 
 273F:11B5                       sub_41          proc    near
 273F:11B5  53                                   push    bx
-273F:11B6 \xFABB 10C0                              mov     bx, offset data_616
+273F:11B6 \xFABB 10C0                              mov     bx, offset impinging_char_list
 273F:11B9  C7 06 10EE 0000                      mov     data_617, 0
 273F:11BF                       loc_163:
 
 273F:11BF \xFA8B 07                                mov     ax, [bx]                ; Get character Id
-273F:11C1  83 C3 02                             add     bx, 2
-273F:11C4  0B C0                                or      ax, ax                  ; Is it zero?
-273F:11C6  75 05                                jnz     loc_164                 ; Jump if not zero
-273F:11C8  A1 10EE                              mov     ax, data_617
+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:11CB  5B                                   pop     bx
 273F:11CC  C3                                   retn
 273F:11CD                       loc_164:
@@ -2911,7 +2950,7 @@
 273F:11DC  8A 1F                                mov     bl, [bx]                ; bl = char's current action
 273F:11DE  5E                                   pop     si
 273F:11DF  58                                   pop     ax
-273F:11E0  80 FB 03                             cmp     bl, PLAYER_ACTION_EXEC_SCRIPT ; Char in animation sequence?
+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:11E5  BB B0AE                              mov     bx, offset hotspot_action_list
@@ -2930,8 +2969,8 @@
 273F:11FB  83 C3 08                             add     bx, HOTSPOT_ACTION_SLOT_SIZE
 273F:11FE  E2 EE                                loop    locloop_165             ; Loop remaining action list
 
-; At this point we've found a character in the data_616 list that isn't currently
-; blocked to execute a hotspot animation, and doesn't have a cross reference
+; 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
 
 273F:1200  8B D8                                mov     bx, ax
@@ -2945,7 +2984,7 @@
 273F:1211  F6 45 49 FF                          test    byte ptr [di+49h], 0FFh ; ???
 273F:1215  75 09                                jnz     loc_168                 ; Jump if not zero
 273F:1217  5F                                   pop     di
-273F:1218  E8 314B                              call    sub_93
+273F:1218  E8 314B                              call    character_update_movement
 273F:121B  5B                                   pop     bx
 273F:121C  B8 0001                              mov     ax, 1
 273F:121F  C3                                   retn
@@ -3117,7 +3156,7 @@
 273F:1357  A1 1924                              mov     ax, hotspot_id
 273F:135A  89 45 02                             mov     [di+2],ax
 273F:135D  C7 45 04 0000                        mov     word ptr [di+4], 0
-273F:1362  C6 07 02                             mov     byte ptr [bx], PLAYER_ACTION_DISPATCH_ACTION
+273F:1362  C6 07 02                             mov     byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
 273F:1365  E8 5C9D                              call    menubar_clear_image
 273F:1368 \xFABF 4B93                              mov     di, offset action_name  ; Set up the "look at HOTSPOT"
 273F:136B \xFABE 10B5                              mov     si, offset look_at_str  ;  string
@@ -3158,14 +3197,14 @@
 273F:13B8  E8 401F                              call    sub_126
 273F:13BB  81 E2 0FFF                           and     dx,0FFFh
 273F:13BF \xFABE 6CEF                              mov     si, offset player_hotspot_rec
-273F:13C2  8B DE                                mov     bx,si
-273F:13C4  03 5C 61                             add     bx,[si+61h]
-273F:13C7  83 C3 63                             add     bx,63h
+273F:13C2  8B DE                                mov     bx, si
+273F:13C4  03 5C 61                             add     bx, [si+HS_ACTION_OFFSET]
+273F:13C7  83 C3 63                             add     bx, HS_FIRST_ACTION_OFFSET
 273F:13CA  89 4C 54                             mov     [si+HS_DEST_X], cx
 273F:13CD  89 54 56                             mov     [si+HS_DEST_Y], dx
 273F:13D0  C7 44 52 FFFF                        mov     [si+HS_DEST_HOTSPOT], 0FFFFh
 273F:13D5  A1 1920                              mov     ax, room_exit_hotspot_id
-273F:13D8  0B C0                                or      ax,ax                   
+273F:13D8  0B C0                                or      ax, ax                   
 273F:13DA  74 2A                                jz      loc_192
 273F:13DC  89 44 52                             mov     [si+HS_DEST_HOTSPOT], ax
 273F:13DF  EB 25                                jmp     short loc_192           ; (1406)
@@ -3182,7 +3221,7 @@
 273F:1400  A1 11DD                              mov     ax, char_dest_y
 273F:1403  89 44 56                             mov     [si+HS_DEST_Y], ax
 273F:1406                       loc_192:                                        ;  xref 273F:13DA, 13DF
-273F:1406  C6 07 01                             mov     byte ptr [bx], PLAYER_ACTION_START_WALK
+273F:1406  C6 07 01                             mov     byte ptr [bx], CHAR_ACTION_START_WALK
 273F:1409  33 C0                                xor     ax,ax                   ; Zero register
 273F:140B  A2 9834                              mov     data_1084, al
 273F:140E \xFABF 65F3                              mov     di, offset player_action_support_record
@@ -4550,7 +4589,7 @@
 273F:1C18  72 24                                jb      loc_437                 ; No
 273F:1C1A  3D 0009                              cmp     ax, CURSOR_TIME_UP_LEFT
 273F:1C1D  73 1F                                jae     loc_437                 ; Too high
-273F:1C1F  80 3E 6D52 01                        cmp     player_action_state, PLAYER_ACTION_START_WALK
+273F:1C1F  80 3E 6D52 01                        cmp     player_action_state, CHAR_ACTION_START_WALK
 273F:1C24  74 07                                je      loc_435                 ; Jump if equal
 273F:1C26  80 3E 6D52 04                        cmp     player_action_state, 4
 273F:1C2B  75 11                                jne     loc_437                 ; Jump if not equal
@@ -9589,7 +9628,7 @@
                                 ;                             9635
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:3E34                 sequence_execute       proc    near
+273F:3E34                 sequence_execute      proc    near
 273F:3E34 \xFA57                                   push    di
 273F:3E35  56                                   push    si
 273F:3E36  55                                   push    bp
@@ -10096,28 +10135,28 @@
 273F:41CE  83 C5 02                             add     bp, 2
 273F:41D1  D1 E3                                shl     bx, 1                   ; Shift w/zeros fill
 273F:41D3  8B 87 3850                           mov     ax,word ptr ds:[actions2_proc_list][bx]
-273F:41D7  FF E0                                jmp     ax                      
+273F:41D7  FF E0                                jmp     ax
                          action_dispatch        endp
 
 
 273F:41D9                       loc_825:                                        ;  xref 273F:52BB
-273F:41D9 \xFA8B DE                                mov     bx,si
-273F:41DB  03 5C 61                             add     bx,[si+61h]
-273F:41DE  83 C3 63                             add     bx,63h
-273F:41E1  F7 44 61 FFFF                        test    word ptr [si+61h],0FFFFh
+273F:41D9 \xFA8B DE                                mov     bx, si
+273F:41DB  03 5C 61                             add     bx, [si+HS_ACTION_OFFSET]
+273F:41DE  83 C3 63                             add     bx, HS_FIRST_ACTION_OFFSET
+273F:41E1  F7 44 61 FFFF                        test    word ptr [si+HS_ACTION_OFFSET], 0FFFFh
 273F:41E6  74 0F                                jz      loc_826                 ; Jump if zero
-273F:41E8  83 6C 61 05                          sub     word ptr [si+61h],5
-273F:41EC  83 EB 05                             sub     bx,5
-273F:41EF  C6 44 4D 00                          mov     byte ptr [si+4Dh],0
-273F:41F3  C6 07 02                             mov     byte ptr [bx],2
+273F:41E8  83 6C 61 05                          sub     word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
+273F:41EC  83 EB 05                             sub     bx, CURRENT_ACTION_RECORD_SIZE
+273F:41EF  C6 44 4D 00                          mov     byte ptr [si+4Dh], 0
+273F:41F3  C6 07 02                             mov     byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
 273F:41F6  C3                                   retn
 273F:41F7                       loc_826:                                        ;  xref 273F:41E6
-273F:41F7  C6 07 00                             mov     byte ptr [bx],0
-273F:41FA  81 7D 1B 03E8                        cmp     word ptr [di+1Bh], PLAYER_HOTSPOT_ID
+273F:41F7  C6 07 00                             mov     byte ptr [bx], CHAR_ACTION_NONE
+273F:41FA  81 7D 1B 03E8                        cmp     word ptr [di+ANIM_HOTSPOT_ID], PLAYER_HOTSPOT_ID
 273F:41FF  75 0B                                jne     loc_ret_827             ; Jump if not equal
                                                 assume  ds:seg_code
-273F:4201  C6 06 9834 00                        mov     byte ptr data_427,0     ; (273F:9834=0F9h)
-273F:4206  C7 06 11E4 FFFF                      mov     word ptr ds:[11E4h],0FFFFh ; (273F:11E4=0BB12h)
+273F:4201  C6 06 9834 00                        mov     byte ptr data_1084, 0   
+273F:4206  C7 06 11E4 FFFF                      mov     hotspot_name_id2, 0FFFFh
 
 273F:420C                       loc_ret_827:                                    ;  xref 273F:41FF
 273F:420C  C3                                   retn
@@ -10129,77 +10168,72 @@
                                 ;         Called from:   273F:51EE, 5FE0
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
-; si = Hotspot offset
-; bx = Pointer to decode data
-  [bx] == 0 -> end of list
-  
-
-273F:420D                       sub_90          proc    near
-273F:420D  8B 4C 21                             mov     cx,[si+HS_PIXEL_OFFSET]
-273F:4210  8B 44 5A                             mov     ax,[si+HS_MOMENT_SRC_OFFSET]
-273F:4213  89 44 24                             mov     [si+24h],ax
-273F:4216  C7 44 26 0000                        mov     word ptr [si+26h],0
-273F:421B  C7 44 28 0000                        mov     word ptr [si+28h],0
+               character_translate_movements    proc    near
+273F:420D  8B 4C 21                             mov     cx, [si+HS_PIXEL_OFFSET]
+273F:4210  8B 44 5A                             mov     ax, [si+HS_MOVEMENT_SRC_OFFSET]
+273F:4213  89 44 24                             mov     [si+HS_MOVEMENT_OFFSET], ax
+273F:4216  C7 44 26 0000                        mov     word ptr [si+HS_STEP_CTR], 0
+273F:421B  C7 44 28 0000                        mov     word ptr [si+HS_FRAME_OFFSET], 0
 273F:4220  56                                   push    si
 273F:4221  57                                   push    di
 273F:4222  53                                   push    bx
-273F:4223  8B F8                                mov     di,ax
-273F:4225  8B F1                                mov     si,cx
-273F:4227  8B DA                                mov     bx,dx
-; si=animation record, di=loading position, bx=393ch src data
-273F:4229                       loc_828:                                        ;  xref 273F:4250, 425E, 426E, 427E
-273F:4229 \xFA8B 0F                                mov     cx,[bx]
-273F:422B  0B C9                                or      cx,cx                   ; Zero ?
-273F:422D  74 51                                jz      loc_832                 ; Jump if zero
-273F:422F  8B 57 02                             mov     dx,[bx+2]
-273F:4232  83 C3 04                             add     bx,4
-273F:4235  83 FA 01                             cmp     dx,1
+273F:4223  8B F8                                mov     di, ax
+273F:4225  8B F1                                mov     si, cx
+273F:4227  8B DA                                mov     bx, dx
+
+273F:4229                       loc_828:
+273F:4229 \xFA8B 0F                                mov     cx, [bx]
+273F:422B  0B C9                                or      cx, cx                  ; No more movements needed?
+273F:422D  74 51                                jz      loc_832                 ; Exit if yes
+273F:422F  8B 57 02                             mov     dx, [bx+2]              ; Get direction
+273F:4232  83 C3 04                             add     bx, 4                   ; Move ptr to next move rec
+273F:4235  83 FA 01                             cmp     dx, FACING2_LEFT
 273F:4238  74 26                                je      loc_830                 ; Jump if equal
-273F:423A  83 FA 02                             cmp     dx,2
+273F:423A  83 FA 02                             cmp     dx, FACING2_RIGHT
 273F:423D  74 31                                je      loc_831                 ; Jump if equal
-273F:423F  83 FA 04                             cmp     dx,4
+273F:423F  83 FA 04                             cmp     dx, FACING2_UP
 273F:4242  74 0E                                je      loc_829                 ; Jump if equal
-273F:4244  83 C1 01                             add     cx,1
-273F:4247  D1 E9                                shr     cx,1                    ; Shift w/zeros fill
-273F:4249  8B 44 0B                             mov     ax,[si+0Bh]
-273F:424C  AB                                   stosw                           ; Store ax to es:[di]
+273F:4244  83 C1 01                             add     cx, 1
+273F:4247  D1 E9                                shr     cx, 1
+273F:4249  8B 44 0B                             mov     ax, [si+PIXEL_MOVEREC_DOWN]
+273F:424C  AB                                   stosw                           ; Store movement records
 273F:424D  8B C1                                mov     ax,cx
-273F:424F  AB                                   stosw                           ; Store ax to es:[di]
-273F:4250  EB D7                                jmp     short loc_828           ; (4229)
-273F:4252                       loc_829:                                        ;  xref 273F:4242
-273F:4252  83 C1 01                             add     cx,1
-273F:4255  D1 E9                                shr     cx,1                    ; Shift w/zeros fill
-273F:4257  8B 44 09                             mov     ax,[si+9]
-273F:425A  AB                                   stosw                           ; Store ax to es:[di]
+273F:424F  AB                                   stosw                           ; Store steps
+273F:4250  EB D7                                jmp     short loc_828
+273F:4252                       loc_829:
+273F:4252  83 C1 01                             add     cx, 1
+273F:4255  D1 E9                                shr     cx, 1
+273F:4257  8B 44 09                             mov     ax, [si+PIXEL_MOVEREC_UP]
+273F:425A  AB                                   stosw                           ; Store movement records
 273F:425B  8B C1                                mov     ax,cx
-273F:425D  AB                                   stosw                           ; Store ax to es:[di]
-273F:425E  EB C9                                jmp     short loc_828           ; (4229)
-273F:4260                       loc_830:                                        ;  xref 273F:4238
-273F:4260  83 C1 03                             add     cx,3
-273F:4263  D1 E9                                shr     cx,1                    ; Shift w/zeros fill
-273F:4265  D1 E9                                shr     cx,1                    ; Shift w/zeros fill
-273F:4267  8B 44 0D                             mov     ax,[si+0Dh]
-273F:426A  AB                                   stosw                           ; Store ax to es:[di]
+273F:425D  AB                                   stosw                           ; Store steps
+273F:425E  EB C9                                jmp     short loc_828
+273F:4260                       loc_830:
+273F:4260  83 C1 03                             add     cx, 3
+273F:4263  D1 E9                                shr     cx, 1
+273F:4265  D1 E9                                shr     cx, 1
+273F:4267  8B 44 0D                             mov     ax, [si+PIXEL_MOVEREC_LEFT]
+273F:426A  AB                                   stosw                           ; Store movement records
 273F:426B  8B C1                                mov     ax,cx
-273F:426D  AB                                   stosw                           ; Store ax to es:[di]
-273F:426E  EB B9                                jmp     short loc_828           ; (4229)
-273F:4270                       loc_831:                                        ;  xref 273F:423D
-273F:4270  83 C1 03                             add     cx,3
-273F:4273  D1 E9                                shr     cx,1                    ; Shift w/zeros fill
-273F:4275  D1 E9                                shr     cx,1                    ; Shift w/zeros fill
-273F:4277  8B 44 0F                             mov     ax,[si+0Fh]
-273F:427A  AB                                   stosw                           ; Store ax to es:[di]
+273F:426D  AB                                   stosw                           ; Store steps
+273F:426E  EB B9                                jmp     short loc_828
+273F:4270                       loc_831:
+273F:4270  83 C1 03                             add     cx, 3
+273F:4273  D1 E9                                shr     cx, 1
+273F:4275  D1 E9                                shr     cx, 1
+273F:4277  8B 44 0F                             mov     ax, [si+PIXEL_MOVEREC_RIGHT]
+273F:427A  AB                                   stosw                           ; Store movement records
 273F:427B  8B C1                                mov     ax,cx
-273F:427D  AB                                   stosw                           ; Store ax to es:[di]
-273F:427E  EB A9                                jmp     short loc_828           ; (4229)
-273F:4280                       loc_832:                                        ;  xref 273F:422D
+273F:427D  AB                                   stosw                           ; Store steps
+273F:427E  EB A9                                jmp     short loc_828
+273F:4280                       loc_832:
 273F:4280  B8 FFFF                              mov     ax,0FFFFh
-273F:4283  AB                                   stosw                           ; Store ax to es:[di]
+273F:4283  AB                                   stosw                           ; Store end makrer
 273F:4284  5B                                   pop     bx
 273F:4285  5F                                   pop     di
 273F:4286  5E                                   pop     si
 273F:4287  C3                                   retn
-                                sub_90          endp
+               character_translate_movements    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
@@ -10240,7 +10274,7 @@
 273F:42C8  5E                                   pop     si
 273F:42C9  E9 FB68                              jmp     sequence_execute
 273F:42CC                       loc_835:                                        ;  xref 273F:42C6
-273F:42CC  8B 54 0A                             mov     dx, [si+ROOMREC_EXIT_ROOM_NUM] ; Get new room #
+273F:42CC  8B 54 0A                             mov     dx, [si+ROOMREC_EXIT_ROOM_NUM] ; Get new room #/direction
 273F:42CF  8B 4C 0C                             mov     cx, [si+ROOMREC_EXIT_NEW_X]    ; Get new X
 273F:42D2  8B 5C 0E                             mov     bx, [si+ROOMREC_EXIT_NEW_Y]    ; Get new Y
 273F:42D5  5E                                   pop     si
@@ -10267,13 +10301,13 @@
 273F:42E9  A1 BA17                              mov     ax, current_hotspot
 273F:42EC  3D 03E8                              cmp     ax, PLAYER_HOTSPOT_ID   ; Is character the player?
 273F:42EF  75 2E                                jne     loc_840                 ; Jump if not
-273F:42F1  F6 06 9834 FF                        test    byte ptr data_427, 0FFh
+273F:42F1  F6 06 9834 FF                        test    byte ptr data_1084, 0FFh
 273F:42F6  75 26                                jnz     loc_ret_839             ; Jump if not zero
 
 ; Room change code for the player
 273F:42F8 \xFABE 6CEF                              mov     si, offset player_hotspot_rec
-273F:42FB  88 74 50                             mov     [si+50h],dh
-273F:42FE  C6 44 51 00                          mov     byte ptr [si+51h],0
+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:4307  89 16 982C                           mov     new_room_number_2, dx
@@ -10291,13 +10325,13 @@
 273F:4326  53                                   push    bx
 273F:4327  51                                   push    cx
 273F:4328  52                                   push    dx
-273F:4329  E8 017D                              call    sub_99                  ; (44A9)
+273F:4329  E8 017D                              call    check_for_impinging_characters
 273F:432C  5A                                   pop     dx
 273F:432D  59                                   pop     cx
 273F:432E  5B                                   pop     bx
 273F:432F  75 06                                jnz     loc_841                 ; Jump if not zero
 273F:4331  33 C0                                xor     ax,ax                   ; Zero register
-273F:4333  E8 01F2                              call    sub_104                 ; (4528)
+273F:4333  E8 01F2                              call    increment_action_offset
 273F:4336  C3                                   retn
 273F:4337                       loc_841:                                        ;  xref 273F:432F
 273F:4337  83 E1 F8                             and     cx, 0FFF8h
@@ -10323,36 +10357,29 @@
                                 ;
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:4363                       loc_842:                                        ;  xref 273F:50E7, 5F24
-273F:4363 \xFA88 44 44                             mov     [si+HS_UNKNOWN1], al
+                 character_update_movement_2:
+273F:4363 \xFA88 44 44                             mov     [si+HS_V44], al
 
-                                ;\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\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:1218, 5033, 5063, 5081, 51AB, 58C7, 5EAA
-                                ;                             5EE3, 85A0, 8636, 8A31
-                                ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:4366                       sub_93          proc    near
-273F:4366                       loc_843:                                        ;  xref 273F:4F9C
+                   character_update_movement    proc    near
 273F:4366 \xFA53                                   push    bx
-273F:4367  8B DE                                mov     bx,si
-273F:4369  03 5C 61                             add     bx,[si+61h]
-273F:436C  83 C3 63                             add     bx,63h
-273F:436F  8A 07                                mov     al,[bx]
+273F:4367  8B DE                                mov     bx, si
+273F:4369  03 5C 61                             add     bx, [si+HS_ACTION_OFFSET]
+273F:436C  83 C3 63                             add     bx, HS_FIRST_ACTION_OFFSET
+273F:436F  8A 07                                mov     al, [bx]
 273F:4371  5B                                   pop     bx
-273F:4372  3C 03                                cmp     al,3
-273F:4374  74 10                                je      loc_ret_845             ; Jump if equal
-273F:4376  F6 44 49 FF                          test    byte ptr [si+49h],0FFh
+273F:4372  3C 03                                cmp     al, CHAR_ACTION_EXEC_SCRIPT
+273F:4374  74 10                                je      loc_ret_845             ; Exit if running script
+273F:4376  F6 44 49 FF                          test    byte ptr [si+HS_V49], 0FFh
 273F:437A  75 07                                jnz     loc_844                 ; Jump if not zero
-273F:437C  C6 44 49 01                          mov     byte ptr [si+49h],1
-273F:4380  E8 2DAB                              call    sub_178                 ; (712E)
+273F:437C  C6 44 49 01                          mov     byte ptr [si+HS_V49], 1
+273F:4380  E8 2DAB                              call    pathfind_flag_covered_cells
 273F:4383                       loc_844:                                        ;  xref 273F:437A
-273F:4383  E9 032B                              jmp     loc_890                 ; (46B1)
+273F:4383  E9 032B                              jmp     character_reset_direction
 
 273F:4386                       loc_ret_845:                                    ;  xref 273F:4374, 438B
 273F:4386  C3                                   retn
-                                sub_93          endp
+                   character_update_movement    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
@@ -10363,10 +10390,10 @@
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
 273F:4387                       sub_94          proc    near
-273F:4387  F6 44 49 FF                          test    byte ptr [si+49h],0FFh
+273F:4387  F6 44 49 FF                          test    byte ptr [si+HS_V49], 0FFh
 273F:438B  74 F9                                jz      loc_ret_845             ; Jump if zero
-273F:438D  C6 44 49 00                          mov     byte ptr [si+49h],0
-273F:4391  E9 2DAF                              jmp     loc_1417                ; (7143)
+273F:438D  C6 44 49 00                          mov     byte ptr [si+HS_V49], 0
+273F:4391  E9 2DAF                              jmp     pathfind_clear_covered_cells
                                 sub_94          endp
 
 
@@ -10376,69 +10403,71 @@
                                 ;         Called from:   273F:56D0, 712F, 7144
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:4394                       sub_95          proc    near
-273F:4394  8B 45 0E                             mov     ax,[di+0Eh]
-273F:4397  2D 0001                              sub     ax,1
-273F:439A  8B D8                                mov     bx,ax
-273F:439C  B1 04                                mov     cl,4
-273F:439E  D3 E3                                shl     bx,cl                   ; Shift w/zeros fill
-273F:43A0  2B D8                                sub     bx,ax
-273F:43A2  B1 03                                mov     cl,3
-273F:43A4  D3 E3                                shl     bx,cl                   ; Shift w/zeros fill
-273F:43A6  81 C3 984A                           add     bx,984Ah
-273F:43AA  8B 45 02                             mov     ax,[di+2]
-273F:43AD  2D 0088                              sub     ax,88h
-273F:43B0  03 45 15                             add     ax,[di+15h]
-273F:43B3  2D 0004                              sub     ax,4
-273F:43B6  D3 E8                                shr     ax,cl                   ; Shift w/zeros fill
-273F:43B8  3D 0018                              cmp     ax,18h
-273F:43BB  73 50                                jae     loc_850                 ; Jump if above or =
-273F:43BD  8B D0                                mov     dx,ax
-273F:43BF  D1 E0                                shl     ax,1                    ; Shift w/zeros fill
-273F:43C1  D1 E0                                shl     ax,1                    ; Shift w/zeros fill
-273F:43C3  03 C2                                add     ax,dx
-273F:43C5  03 D8                                add     bx,ax
-273F:43C7  8B 05                                mov     ax,[di]
-273F:43C9  D3 E8                                shr     ax,cl                   ; Shift w/zeros fill
-273F:43CB  8B 55 13                             mov     dx,[di+13h]
-273F:43CE  D3 EA                                shr     dx,cl                   ; Shift w/zeros fill
-273F:43D0  75 03                                jnz     loc_846                 ; Jump if not zero
-273F:43D2  BA 0001                              mov     dx,1
-273F:43D5                       loc_846:                                        ;  xref 273F:43D0
-273F:43D5  2D 0010                              sub     ax,10h
+                          pathfind_get_cell     proc    near
+273F:4394  8B 45 0E                             mov     ax, [di+ANIM_ROOM_NUM]
+273F:4397  2D 0001                              sub     ax, 1                   ; ax=room # - 1
+273F:439A  8B D8                                mov     bx, ax
+273F:439C  B1 04                                mov     cl, 4
+273F:439E  D3 E3                                shl     bx, cl                  ; bx=(R-1)*16
+273F:43A0  2B D8                                sub     bx, ax                  ; bx=(R-1)*15
+273F:43A2  B1 03                                mov     cl, 3
+273F:43A4  D3 E3                                shl     bx, cl                  ; bx=(R-1)*120
+273F:43A6  81 C3 984A                           add     bx, offset pathfind_data2
+273F:43AA  8B 45 02                             mov     ax, [di+ANIM_Y]
+273F:43AD  2D 0088                              sub     ax, 88h
+273F:43B0  03 45 15                             add     ax, [di+ANIM_HEIGHT_COPY]
+273F:43B3  2D 0004                              sub     ax, 4
+273F:43B6  D3 E8                                shr     ax, cl
+273F:43B8  3D 0018                              cmp     ax, 18h                 ; (y+height-8-4) >= 200?
+273F:43BB  73 50                                jae     loc_850                 ; If yes then jump to exit
+273F:43BD  8B D0                                mov     dx, ax                  ; ax=0->17
+273F:43BF  D1 E0                                shl     ax, 1
+273F:43C1  D1 E0                                shl     ax, 1                   ; ax=ax*4
+273F:43C3  03 C2                                add     ax, dx                  ; ax=ax*5
+273F:43C5  03 D8                                add     bx, ax                  ; Add bx onto offset
+
+; At this point bx = (Room# - 1) * 120 + (Y# * 5), where Y# is between 0 to 17
+273F:43C7  8B 05                                mov     ax, [di+ANIM_X]
+273F:43C9  D3 E8                                shr     ax, cl
+273F:43CB  8B 55 13                             mov     dx, [di+ANIM_WIDTH_COPY]
+273F:43CE  D3 EA                                shr     dx, cl                  ; ax=left/8, dx=width/8
+273F:43D0  75 03                                jnz     loc_846                 ; Is width < 8 pixels?
+273F:43D2  BA 0001                              mov     dx, 1                   ; Yes, default to 1 (8 pixels)
+273F:43D5                       loc_846:
+273F:43D5  2D 0010                              sub     ax, 10h                 ; Is left <= 128
 273F:43D8  73 0A                                jnc     loc_847                 ; Jump if carry=0
 273F:43DA  F7 D8                                neg     ax
-273F:43DC  2B D0                                sub     dx,ax
-273F:43DE  72 2D                                jc      loc_850                 ; Jump if carry Set
-273F:43E0  74 2B                                jz      loc_850                 ; Jump if zero
-273F:43E2  33 C0                                xor     ax,ax                   ; Zero register
-273F:43E4                       loc_847:                                        ;  xref 273F:43D8
-273F:43E4  8B E8                                mov     bp,ax
-273F:43E6  03 EA                                add     bp,dx
-273F:43E8  83 ED 29                             sub     bp,29h
-273F:43EB  72 09                                jc      loc_848                 ; Jump if carry Set
-273F:43ED  83 C5 01                             add     bp,1
-273F:43F0  2B D5                                sub     dx,bp
+273F:43DC  2B D0                                sub     dx, ax
+273F:43DE  72 2D                                jc      loc_850                 ; Exit if offscreen to left
+273F:43E0  74 2B                                jz      loc_850
+273F:43E2  33 C0                                xor     ax, ax                  ; Default to 0
+273F:43E4                       loc_847:
+273F:43E4  8B E8                                mov     bp, ax
+273F:43E6  03 EA                                add     bp, dx                  ; Add width
+273F:43E8  83 ED 29                             sub     bp, 29h
+273F:43EB  72 09                                jc      loc_848                 ; Jump if on screen
+273F:43ED  83 C5 01                             add     bp, 1
+273F:43F0  2B D5                                sub     dx, bp
 273F:43F2  72 19                                jc      loc_850                 ; Jump if carry Set
 273F:43F4  74 17                                jz      loc_850                 ; Jump if zero
-273F:43F6                       loc_848:                                        ;  xref 273F:43EB
-273F:43F6  8B E8                                mov     bp,ax
-273F:43F8  D3 E8                                shr     ax,cl                   ; Shift w/zeros fill
-273F:43FA  03 D8                                add     bx,ax
-273F:43FC  8B CD                                mov     cx,bp
-273F:43FE  B8 0080                              mov     ax,80h
-273F:4401  83 E1 07                             and     cx,7
-273F:4404  74 02                                jz      loc_849                 ; Jump if zero
-273F:4406  D3 E8                                shr     ax,cl                   ; Shift w/zeros fill
+273F:43F6                       loc_848:
+273F:43F6  8B E8                                mov     bp, ax                  ; bp,ax=(left/8)-10h
+273F:43F8  D3 E8                                shr     ax, cl
+273F:43FA  03 D8                                add     bx, ax                  ; Increment X offset
+273F:43FC  8B CD                                mov     cx, bp
+273F:43FE  B8 0080                              mov     ax, 80h
+273F:4401  83 E1 07                             and     cx, 7
+273F:4404  74 02                                jz      loc_849
+273F:4406  D3 E8                                shr     ax, cl                  ; Setup bit mask
 273F:4408                       loc_849:                                        ;  xref 273F:4404
-273F:4408  8B CA                                mov     cx,dx
-273F:440A  0B C9                                or      cx,cx                   ; Zero ?
+273F:4408  8B CA                                mov     cx, dx
+273F:440A  0B C9                                or      cx, cx 
 273F:440C  C3                                   retn
 273F:440D                       loc_850:                                        ;  xref 273F:43BB, 43DE, 43E0, 43F2
                                                                                 ;            43F4
-273F:440D  33 C9                                xor     cx,cx                   ; Zero register
+273F:440D  33 C9                                xor     cx, cx                  ; Zero register
 273F:440F  C3                                   retn
-                                sub_95          endp
+                          pathfind_get_cell     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
@@ -10557,33 +10586,33 @@
                                 ;         Called from:   273F:4329, 603C
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:44A9                       sub_99          proc    near
+             check_for_impinging_characters     proc    near
 273F:44A9 \xFABB B14E                              mov     bx, offset animation_table
 273F:44AC  B9 002D                              mov     cx, NUM_ANIMATION_SLOTS
-273F:44AF  8B 55 0E                             mov     dx,[di+0Eh]
+273F:44AF  8B 55 0E                             mov     dx, [di+ANIM_ROOM_NUM]
 
 273F:44B2                       locloop_858:                                    ;  xref 273F:44D0
-273F:44B2  F6 47 1D FF                          test    byte ptr [bx+1Dh],0FFh
+273F:44B2  F6 47 1D FF                          test    byte ptr [bx+ANIM_LAYER1_SKIP], 0FFh
 273F:44B6  74 15                                jz      loc_859                 ; Jump if zero
-273F:44B8  F6 47 0C FF                          test    byte ptr [bx+0Ch],0FFh
+273F:44B8  F6 47 0C FF                          test    byte ptr [bx+ANIM_LAYER], 0FFh
 273F:44BC  74 0F                                jz      loc_859                 ; Jump if zero
-273F:44BE  3B 57 0E                             cmp     dx,[bx+0Eh]
+273F:44BE  3B 57 0E                             cmp     dx, [bx+ANIM_ROOM_NUM]
 273F:44C1  75 0A                                jne     loc_859                 ; Jump if not equal
 273F:44C3  53                                   push    bx
-273F:44C4  8B 5F 19                             mov     bx,[bx+19h]
-273F:44C7  E8 10D7                              call    skorl_caught_check
+273F:44C4  8B 5F 19                             mov     bx, [bx+ANIM_HOTSPOT_OFFSET]
+273F:44C7  E8 10D7                              call    characters_impinging_check
 273F:44CA  5B                                   pop     bx
 273F:44CB  75 09                                jnz     loc_860                 ; Jump if not zero
 273F:44CD                       loc_859:                                        ;  xref 273F:44B6, 44BC, 44C1
-273F:44CD  83 C3 29                             add     bx,29h
+273F:44CD  83 C3 29                             add     bx, ANIMATION_SLOT_SIZE
 273F:44D0  E2 E0                                loop    locloop_858             ; Loop if cx > 0
 
-273F:44D2  0D 0001                              or      ax,1
+273F:44D2  0D 0001                              or      ax, 1
 273F:44D5  C3                                   retn
 273F:44D6                       loc_860:                                        ;  xref 273F:44CB
-273F:44D6  33 C0                                xor     ax,ax                   ; Zero register
+273F:44D6  33 C0                                xor     ax, ax
 273F:44D8  C3                                   retn
-                                sub_99          endp
+             check_for_impinging_characters     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
@@ -10593,40 +10622,40 @@
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
                              char_face_up       proc    near
-273F:44D9 \xFA8B 5C 21                             mov     bx,[si+HS_PIXEL_OFFSET]
-273F:44DC  8A 47 11                             mov     al,[bx+11h]
-273F:44DF  C7 45 22 0004                        mov     word ptr [di+22h], 4
-273F:44E4  C6 45 26 00                          mov     byte ptr [di+26h], 0
+273F:44D9 \xFA8B 5C 21                             mov     bx, [si+HS_PIXEL_OFFSET]
+273F:44DC  8A 47 11                             mov     al, [bx+PIXEL_FRAMENUM_UP]
+273F:44DF  C7 45 22 0004                        mov     word ptr [di+ANIM_CHAR_RECT_Y], 4
+273F:44E4  C6 45 26 00                          mov     byte ptr [di+ANIM_DIRECTION], FACING_UP
 273F:44E8  EB 33                                jmp     short char_face_end
                              char_face_up       endp
 
                            char_face_down       proc    near
-273F:44EA \xFA8B 5C 21                             mov     bx,[si+HS_PIXEL_OFFSET]
-273F:44ED  8A 47 12                             mov     al,[bx+12h]
-273F:44F0  C7 45 22 0004                        mov     word ptr [di+22h],4
-273F:44F5  C6 45 26 01                          mov     byte ptr [di+26h],1
+273F:44EA \xFA8B 5C 21                             mov     bx, [si+HS_PIXEL_OFFSET]
+273F:44ED  8A 47 12                             mov     al, [bx+PIXEL_FRAMENUM_DOWN]
+273F:44F0  C7 45 22 0004                        mov     word ptr [di+ANIM_CHAR_RECT_Y], 4
+273F:44F5  C6 45 26 01                          mov     byte ptr [di+ANIM_DIRECTION], FACING_DOWN
 273F:44F9  EB 22                                jmp     short char_face_end
                            char_face_down       endp
 
                            char_face_left       proc    near
-273F:44FB \xFA8B 5C 21                             mov     bx,[si+HS_PIXEL_OFFSET]
-273F:44FE  8A 47 13                             mov     al,[bx+13h]
-273F:4501  C7 45 22 0000                        mov     word ptr [di+22h],0
-273F:4506  C6 45 26 02                          mov     byte ptr [di+26h],2
+273F:44FB \xFA8B 5C 21                             mov     bx, [si+HS_PIXEL_OFFSET]
+273F:44FE  8A 47 13                             mov     al, [bx+PIXEL_FRAMENUM_LEFT]
+273F:4501  C7 45 22 0000                        mov     word ptr [di+ANIM_CHAR_RECT_Y], 0
+273F:4506  C6 45 26 02                          mov     byte ptr [di+ANIM_DIRECTION], FACING_LEFT
 273F:450A  EB 11                                jmp     short char_face_end
                            char_face_left       endp
 
                           char_face_right       proc    near
-273F:450C \xFA8B 5C 21                             mov     bx,[si+HS_PIXEL_OFFSET]
-273F:450F  8A 47 14                             mov     al,[bx+14h]
-273F:4512  C7 45 22 0000                        mov     word ptr [di+22h],0
-273F:4517  C6 45 26 03                          mov     byte ptr [di+26h],3
+273F:450C \xFA8B 5C 21                             mov     bx, [si+HS_PIXEL_OFFSET]
+273F:450F  8A 47 14                             mov     al, [bx+PIXEL_FRAMENUM_RIGHT]
+273F:4512  C7 45 22 0000                        mov     word ptr [di+ANIM_CHAR_RECT_Y], 0
+273F:4517  C6 45 26 03                          mov     byte ptr [di+ANIM_DIRECTION], FACING_RIGHT
 273F:451B  EB 00                                jmp     short char_face_end
                           char_face_right       endp
 
-273F:451D                 char_face_end:                     
-273F:451D  8B 5F 07                             mov     bx,[bx+PIXEL_FRAME_SIZE] ; Calculate frame offset
-273F:4520  32 E4                                xor     ah,ah
+273F:451D                 char_face_end:
+273F:451D  8B 5F 07                             mov     bx, [bx+PIXEL_FRAME_SIZE] ; Calculate frame offset
+273F:4520  32 E4                                xor     ah, ah
 273F:4522  F7 E3                                mul     bx
 273F:4524  89 45 08                             mov     [di+ANIM_FRAME_OFFSET], ax
 273F:4527  C3                                   retn
@@ -10638,11 +10667,10 @@
                                 ;         Called from:   273F:4333
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:4528                       sub_104         proc    near
-273F:4528                       loc_866:                                        ;  xref 273F:5353
-273F:4528 \xFA83 44 61 05                          add     word ptr [si+61h],5
-273F:452C  EB 0C                                jmp     short loc_868           
-                                sub_104         endp
+                     increment_action_offset    proc    near
+273F:4528 \xFA83 44 61 05                          add     word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
+273F:452C  EB 0C                                jmp     short loc_868
+                     increment_action_offset    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
@@ -10654,22 +10682,22 @@
 273F:452F  8B C1                                mov     ax, cx
 273F:4531  E8 C7B6                              call    get_room_resource_pointer2
 273F:4534  58                                   pop     ax
-273F:4535                       loc_867:                                        ;  xref 273F:813B
-273F:4535 \xFAC7 44 61 0005                        mov     word ptr [si+61h],5
-273F:453A                       loc_868:                                        ;  xref 273F:452C
-273F:453A  C6 44 4D 00                          mov     byte ptr [si+4Dh],0
-273F:453E  D1 E0                                shl     ax,1                    ; Shift w/zeros fill
-273F:4540  05 1380                              add     ax,1380h
-273F:4543  8B D8                                mov     bx,ax
-273F:4545  8B 07                                mov     ax,[bx]
-273F:4547  8B DE                                mov     bx,si
-273F:4549  03 5C 61                             add     bx,[si+61h]
-273F:454C  83 C3 63                             add     bx,63h
-273F:454F  89 47 01                             mov     [bx+1],ax
-273F:4552  C6 07 02                             mov     byte ptr [bx],2
-273F:4555  8B 44 06                             mov     ax,[si+6]
-273F:4558  89 47 03                             mov     [bx+3],ax
-273F:455B  C6 44 2A 00                          mov     byte ptr [si+2Ah],0
+273F:4535                       loc_867:
+273F:4535 \xFAC7 44 61 0005                        mov     word ptr [si+HS_ACTION_OFFSET], CURRENT_ACTION_RECORD_SIZE
+273F:453A                       loc_868:
+273F:453A  C6 44 4D 00                          mov     byte ptr [si+HS_V4D], 0
+273F:453E  D1 E0                                shl     ax, 1                    ; Shift w/zeros fill
+273F:4540  05 1380                              add     ax, offset seq48_offset_list
+273F:4543  8B D8                                mov     bx, ax
+273F:4545  8B 07                                mov     ax, [bx]
+273F:4547  8B DE                                mov     bx, si
+273F:4549  03 5C 61                             add     bx, [si+HS_ACTION_OFFSET]
+273F:454C  83 C3 63                             add     bx, HS_FIRST_ACTION_OFFSET
+273F:454F  89 47 01                             mov     [bx+CURRENT_ACTION_SUPPORT_TABLE], ax
+273F:4552  C6 07 02                             mov     byte ptr [bx], CHAR_ACTION_DISPATCH_ACTION
+273F:4555  8B 44 06                             mov     ax, [si+HS_ROOM_NUM]
+273F:4558  89 47 03                             mov     [bx+CURRENT_ACTION_ROOM_NUM], ax
+273F:455B  C6 44 2A 00                          mov     byte ptr [si+HS_FRAME_NUM], 0
 273F:455F  C3                                   retn
                              seq_method_48      endp
 
@@ -10681,24 +10709,24 @@
 
 273F:4560                       sub_105         proc    near
 273F:4560                       loc_869:                                        ;  xref 273F:5EC8
-273F:4560 \xFAF6 44 4C FF                          test    byte ptr [si+4Ch],0FFh
+273F:4560 \xFAF6 44 4C FF                          test    byte ptr [si+HS_V4C], 0FFh
 273F:4564  74 2C                                jz      loc_ret_873             ; Jump if zero
 273F:4566                       loc_870:                                        ;  xref 273F:5042
 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:456D  8B 45 1B                             mov     ax,[di+1Bh]
+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: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:457E  73 0C                                jae     loc_872                 ; Jump if above or =
+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: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+4Ah],0Fh
+273F:4582  8B 77 06                             mov     si, [bx+6]
+273F:4585  C7 44 4A 000F                        mov     word ptr [si+HS_V4A], 0Fh
 273F:458A  59                                   pop     cx
 273F:458B  5E                                   pop     si
 273F:458C                       loc_872:                                        ;  xref 273F:4572, 457E
@@ -10741,47 +10769,47 @@
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC
 
 273F:45A7                       sub_107         proc    near
-273F:45A7  3D 0420                              cmp     ax,420h
+273F:45A7  3D 0420                              cmp     ax, 420h
 273F:45AA  74 0A                                je      loc_876                 ; Jump if equal
-273F:45AC  3D 0436                              cmp     ax,436h
+273F:45AC  3D 0436                              cmp     ax, 436h
 273F:45AF  74 05                                je      loc_876                 ; Jump if equal
-273F:45B1  3D 0429                              cmp     ax,429h
+273F:45B1  3D 0429                              cmp     ax, 429h
 273F:45B4  75 1A                                jne     loc_879                 ; Jump if not equal
 273F:45B6                       loc_876:                                        ;  xref 273F:45AA, 45AF
 273F:45B6  50                                   push    ax
 273F:45B7  55                                   push    bp
 273F:45B8  E8 3F9F                              call    sub_213                 ; (855A)
 273F:45BB  5D                                   pop     bp
-273F:45BC  0B C0                                or      ax,ax                   ; Zero ?
+273F:45BC  0B C0                                or      ax, ax                  ; Zero ?
 273F:45BE  74 0B                                jz      loc_878                 ; Jump if zero
 273F:45C0  58                                   pop     ax
 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:45C6  87 F3                                xchg    si, bx
 273F:45C8                       loc_877:                                        ;  xref 273F:45F4, 4600
 273F:45C8  E9 00BB                              jmp     loc_888                 ; (4686)
-273F:45CB                       loc_878:                                        ;  xref 273F:45BE
+273F:45CB                       loc_878:                                 
 273F:45CB  58                                   pop     ax
-273F:45CC  B8 0003                              mov     ax,3
-273F:45CF  C3                                   retn
-273F:45D0                       loc_879:                                        ;  xref 273F:45B4
+273F:45CC  B8 0003                              mov     ax, 3                   ; Initial call for action
+273F:45CF  C3                                   retn                            ;  (prior to moving to it)
+273F:45D0                       loc_879:
 273F:45D0  56                                   push    si
 273F:45D1  E8 C716                              call    get_room_resource_pointer2
 273F:45D4  5B                                   pop     bx
-273F:45D5  87 DE                                xchg    bx,si
+273F:45D5  87 DE                                xchg    bx, si
 
                                 ;\xDF\xDF\xDF\xDF External Entry into Subroutine \xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
                                 ;
                                 ;         Called from:   273F:58B0
 
 273F:45D7                       sub_108:
-273F:45D7  8B 44 06                             mov     ax,[si+HS_ROOM_NUM]
-273F:45DA  3B 47 06                             cmp     ax,[bx+HS_ROOM_NUM]
+273F:45D7  8B 44 06                             mov     ax, [si+HS_ROOM_NUM]
+273F:45DA  3B 47 06                             cmp     ax, [bx+HS_ROOM_NUM]
 273F:45DD  75 72                                jne     loc_884                 ; Jump if not equal
-273F:45DF  F6 44 2A FF                          test    byte ptr [si+2Ah],0FFh
+273F:45DF  F6 44 2A FF                          test    byte ptr [si+HS_FRAME_NUM], 0FFh
 273F:45E3  75 46                                jnz     loc_883                 ; Jump if not zero
-273F:45E5  C6 44 2A 01                          mov     byte ptr [si+2Ah],1
+273F:45E5  C6 44 2A 01                          mov     byte ptr [si+HS_FRAME_NUM], 1
 273F:45E9  81 3E BA1B 0408                      cmp     active_hotspot_id, 408h
 273F:45EF  72 09                                jb      loc_881                 ; Jump if below
 273F:45F1                       loc_880:                                        ;  xref 273F:4606, 463B, 4641, 4647
@@ -10791,10 +10819,10 @@
 273F:45F6  B8 0003                              mov     ax,3
 273F:45F9  C3                                   retn
 273F:45FA                       loc_881:                                        ;  xref 273F:45EF
-273F:45FA  8B 45 1B                             mov     ax,[di+1Bh]
-273F:45FD  3B 47 50                             cmp     ax,[bx+50h]
+273F:45FA  8B 45 1B                             mov     ax, [di+ANIM_HOTSPOT_ID]
+273F:45FD  3B 47 50                             cmp     ax, [bx+HS_DIRECTION]
 273F:4600  74 C6                                je      loc_877                 ; Jump if equal
-273F:4602  80 7F 44 04                          cmp     byte ptr [bx+44h],4
+273F:4602  80 7F 44 04                          cmp     byte ptr [bx+HS_V44], 4
 273F:4606  74 E9                                je      loc_880                 ; Jump if equal
 273F:4608  80 3E BAB9 02                        cmp     byte ptr script_val_88, 2
 273F:460D  74 0D                                je      loc_882                 ; Jump if equal
@@ -10804,14 +10832,14 @@
 273F:4616  5B                                   pop     bx
 273F:4617  C7 44 42 0004                        mov     word ptr [si+42h],4
 273F:461C                       loc_882:                                        ;  xref 273F:460D
-273F:461C  C7 47 2B 002A                        mov     word ptr [bx+2Bh],2Ah
-273F:4621  8B 45 1B                             mov     ax,[di+1Bh]
-273F:4624  89 47 2F                             mov     [bx+2Fh],ax
+273F:461C  C7 47 2B 002A                        mov     word ptr [bx+HS_V2B], 2Ah
+273F:4621  8B 45 1B                             mov     ax, [di+ANIM_HOTSPOT_ID]
+273F:4624  89 47 2F                             mov     [bx+HS_USE_HOTSPOT_ID], ax
 273F:4627  B8 0003                              mov     ax,3
 273F:462A  C3                                   retn
 273F:462B                       loc_883:                                        ;  xref 273F:45E3
-273F:462B  80 44 2A 01                          add     byte ptr [si+2Ah],1
-273F:462F  80 7C 2A 06                          cmp     byte ptr [si+2Ah],6
+273F:462B  80 44 2A 01                          add     byte ptr [si+HS_FRAME_NUM], 1
+273F:462F  80 7C 2A 06                          cmp     byte ptr [si+HS_FRAME_NUM], 6
 273F:4633  73 41                                jae     loc_887                 ; Jump if above or =
 273F:4635  81 3E BA1B 0408                      cmp     active_hotspot_id, 408h
 273F:463B  73 B4                                jae     loc_880                 ; Jump if above or =
@@ -10880,39 +10908,38 @@
                                 ;         Called from:   273F:7FD1
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:46B1                       sub_109         proc    near
-273F:46B1                       loc_890:                                        ;  xref 273F:4383
+                  1character_reset_direction     proc    near
 273F:46B1  53                                   push    bx
-273F:46B2  80 25 F8                             and     byte ptr [di],0F8h
-273F:46B5  80 64 0D F8                          and     byte ptr [si+0Dh],0F8h
-273F:46B9  80 0D 05                             or      byte ptr [di],5
-273F:46BC  80 4C 0D 05                          or      byte ptr [si+0Dh],5
-273F:46C0  8B 5C 21                             mov     bx,[si+21h]
-273F:46C3  8A 45 26                             mov     al,[di+26h]
-273F:46C6  3C 01                                cmp     al,1
-273F:46C8  72 10                                jb      loc_893                 ; Jump if below
-273F:46CA  74 09                                jz      loc_892                 ; Jump if zero
-273F:46CC  3C 03                                cmp     al,3
-273F:46CE  72 0F                                jb      loc_894                 ; Jump if below
-273F:46D0                       loc_891:                                        ;  xref 273F:4740
-273F:46D0 \xFA8A 47 14                             mov     al,[bx+14h]
-273F:46D3  EB 0D                                jmp     short loc_895           ; (46E2)
-273F:46D5                       loc_892:                                        ;  xref 273F:46CA, 473A
-273F:46D5  8A 47 12                             mov     al,[bx+12h]
-273F:46D8  EB 08                                jmp     short loc_895           ; (46E2)
-273F:46DA                       loc_893:                                        ;  xref 273F:46C8, 4738
-273F:46DA  8A 47 11                             mov     al,[bx+11h]
-273F:46DD  EB 03                                jmp     short loc_895           ; (46E2)
-273F:46DF                       loc_894:                                        ;  xref 273F:46CE, 473E
-273F:46DF  8A 47 13                             mov     al,[bx+13h]
-273F:46E2                       loc_895:                                        ;  xref 273F:46D3, 46D8, 46DD
-273F:46E2  8B 5F 07                             mov     bx,[bx+7]
-273F:46E5  32 E4                                xor     ah,ah                   ; Zero register
+273F:46B2  80 25 F8                             and     byte ptr [di+ANIM_X], 0F8h
+273F:46B5  80 64 0D F8                          and     byte ptr [si+HS_X], 0F8h
+273F:46B9  80 0D 05                             or      byte ptr [di+ANIM_X], 5
+273F:46BC  80 4C 0D 05                          or      byte ptr [si+HS_X], 5
+273F:46C0  8B 5C 21                             mov     bx, [si+HS_PIXEL_OFFSET]
+273F:46C3  8A 45 26                             mov     al, [di+ANIM_DIRECTION]
+273F:46C6  3C 01                                cmp     al, FACING_DOWN
+273F:46C8  72 10                                jb      loc_893                 ; Jump if up
+273F:46CA  74 09                                jz      loc_892                 ; Jump if down
+273F:46CC  3C 03                                cmp     al, 3
+273F:46CE  72 0F                                jb      loc_894                 ; Jump if left
+273F:46D0                       loc_891:
+273F:46D0 \xFA8A 47 14                             mov     al, [bx+PIXEL_FRAMENUM_RIGHT]
+273F:46D3  EB 0D                                jmp     short loc_895
+273F:46D5                       loc_892:
+273F:46D5  8A 47 12                             mov     al, [bx+PIXEL_FRAMENUM_DOWN]
+273F:46D8  EB 08                                jmp     short loc_895
+273F:46DA                       loc_893:
+273F:46DA  8A 47 11                             mov     al, [bx+PIXEL_FRAMENUM_UP]
+273F:46DD  EB 03                                jmp     short loc_895
+273F:46DF                       loc_894:
+273F:46DF  8A 47 13                             mov     al, [bx+PIXEL_FRAMENUM_LEFT]
+273F:46E2                       loc_895:
+273F:46E2  8B 5F 07                             mov     bx, [bx+PIXEL_FRAME_SIZE]
+273F:46E5  32 E4                                xor     ah, ah                  ; Zero register
 273F:46E7  F7 E3                                mul     bx                      ; dx:ax = reg * ax
-273F:46E9  89 45 08                             mov     [di+8],ax
+273F:46E9  89 45 08                             mov     [di+ANIM_FRAME_OFFSET], ax
 273F:46EC  5B                                   pop     bx
 273F:46ED  C3                                   retn
-                                sub_109         endp
+                  character_reset_direction     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
@@ -10922,20 +10949,21 @@
                                 ;                             5B43, 5BAA, 5C76, 5CC7, 8A00
                                 ;\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\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:46EE                       sub_110         proc    near
+                    character_face_hotspot      proc    near
 273F:46EE  53                                   push    bx
 273F:46EF  57                                   push    di
 273F:46F0  56                                   push    si
 273F:46F1  EB 17                                jmp     short loc_896           ; (470A)
                                                                                 ;* No entry point to code
-273F:46F3  8B 45 1B                             mov     ax,[di+1Bh]
+
+273F:46F3  8B 45 1B                             mov     ax, [di+ANIM_HOTSPOT_ID]
 273F:46F6  8B 1E BA1B                           mov     bx, active_hotspot_id
 
                                 ;\xDF\xDF\xDF\xDF External Entry into Subroutine \xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xDF
                                 ;
                                 ;         Called from:   273F:61C5, 61CA
 
-273F:46FA                       sub_111:
+                  character_face_hotspot_2:
 273F:46FA  53                                   push    bx
 273F:46FB  57                                   push    di
 273F:46FC  56                                   push    si
@@ -10953,44 +10981,44 @@
 273F:4712  3D 0408                              cmp     ax,408h
 273F:4715  73 6B                                jae     loc_903                 ; Jump if above or =
 273F:4717  53                                   push    bx
-273F:4718  8B DE                                mov     bx,si
-273F:471A  03 5C 61                             add     bx,[si+61h]
-273F:471D  83 C3 63                             add     bx,63h
-273F:4720  8A 07                                mov     al,[bx]
+273F:4718  8B DE                                mov     bx, si
+273F:471A  03 5C 61                             add     bx, [si+HS_ACTION_OFFSET]
+273F:471D  83 C3 63                             add     bx, HS_FIRST_ACTION_OFFSET
+273F:4720  8A 07                                mov     al, [bx]
 273F:4722  5B                                   pop     bx
 273F:4723  81 3E BA1B 7530                      cmp     active_hotspot_id, 7530h
-273F:4729  72 17                                jb      loc_897                 ; Jump if below
-273F:472B  5E                                   pop     si
+273F:4729  72 17                                jb      loc_897
+273F:472B  5E                                   pop     si                      ; Non selectable hotspot
 273F:472C  5F                                   pop     di
-273F:472D  8A 47 08                             mov     al,[bx+8]
-273F:4730  88 45 26                             mov     [di+26h],al
-273F:4733  8B 5C 21                             mov     bx,[si+21h]
-273F:4736  3C 01                                cmp     al,1
-273F:4738  72 A0                                jb      loc_893                 ; Jump if below
-273F:473A  74 99                                jz      loc_892                 ; Jump if zero
-273F:473C  3C 03                                cmp     al,3
-273F:473E  72 9F                                jb      loc_894                 ; Jump if below
-273F:4740  EB 8E                                jmp     short loc_891           ; (46D0)
-273F:4742                       loc_897:                                        ;  xref 273F:4729
-273F:4742  8B 54 0F                             mov     dx,[si+0Fh]
-273F:4745  03 54 1B                             add     dx,[si+1Bh]
-273F:4748  2B 57 0F                             sub     dx,[bx+0Fh]
-273F:474B  2B 57 1B                             sub     dx,[bx+1Bh]
-273F:474E  8B 4C 0D                             mov     cx,[si+0Dh]
-273F:4751  2B 4F 0D                             sub     cx,[bx+0Dh]
-273F:4754  8B C1                                mov     ax,cx
-273F:4756  0B C0                                or      ax,ax                   ; Zero ?
+273F:472D  8A 47 08                             mov     al, [bx+8]
+273F:4730  88 45 26                             mov     [di+ANIM_DIRECTION], al
+273F:4733  8B 5C 21                             mov     bx, [si+HS_PIXEL_OFFSET]
+273F:4736  3C 01                                cmp     al, FACING_DOWN
+273F:4738  72 A0                                jb      loc_893                 ; Jump if up
+273F:473A  74 99                                jz      loc_892                 ; Jump if down
+273F:473C  3C 03                                cmp     al, FACING_LEFT
+273F:473E  72 9F                                jb      loc_894                 ; Jump if left
+273F:4740  EB 8E                                jmp     short loc_891           ; Jump for right
+273F:4742                       loc_897:
+273F:4742  8B 54 0F                             mov     dx, [si+HS_Y]
+273F:4745  03 54 1B                             add     dx, [si+HS_HEIGHT_COPY]
+273F:4748  2B 57 0F                             sub     dx, [bx+HS_Y]
+273F:474B  2B 57 1B                             sub     dx, [bx+HS_HEIGHT_COPY]
+273F:474E  8B 4C 0D                             mov     cx, [si+HS_X]
+273F:4751  2B 4F 0D                             sub     cx, [bx+HS_X]
+273F:4754  8B C1                                mov     ax, cx
+273F:4756  0B C0                                or      ax, ax                   ; Zero ?
 273F:4758  79 02                                jns     loc_898                 ; Jump if not sign
 273F:475A  F7 D8                                neg     ax
 273F:475C                       loc_898:                                        ;  xref 273F:4758
-273F:475C  8B DA                                mov     bx,dx
-273F:475E  0B DB                                or      bx,bx                   ; Zero ?
+273F:475C  8B DA                                mov     bx, dx
+273F:475E  0B DB                                or      bx, bx                  ; Zero ?
 273F:4760  79 02                                jns     loc_899                 ; Jump if not sign
 273F:4762  F7 DB                                neg     bx
 273F:4764                       loc_899:                                        ;  xref 273F:4760
-273F:4764  3B D8                                cmp     bx,ax
+273F:4764  3B D8                                cmp     bx, ax
 273F:4766  72 09                                jb      loc_900                 ; Jump if below
-273F:4768  0B D2                                or      dx,dx                   ; Zero ?
+273F:4768  0B D2                                or      dx, dx                   ; Zero ?
 273F:476A  78 0E                                js      loc_901                 ; Jump if sign=1
 273F:476C  E8 FD6A                              call    char_face_up
 273F:476F  EB 11                                jmp     short loc_903           ; (4782)
@@ -11010,7 +11038,7 @@
 273F:4783  5F                                   pop     di
 273F:4784  5B                                   pop     bx
 273F:4785  C3                                   retn
-                                sub_110         endp
+                    character_face_hotspot      endp
 
                                                                                 ;* No entry point to code
 273F:4786  8B DD                                mov     bx,bp
@@ -11026,9 +11054,9 @@
 273F:479A  C7 44 42 0016                        mov     word ptr [si+42h],16h
 273F:479F  E8 FC9F                              call    sub_97                  ; (4441)
 273F:47A2  8B DE                                mov     bx,si
-273F:47A4  03 5C 61                             add     bx,[si+61h]

@@ 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