Ultima VI: The False Prophet/RAM map

From Data Crystal
Jump to navigation Jump to search

Chip tiny.png The following article is a RAM map for Ultima VI: The False Prophet.

Mobs

Mob data is split across 16 arrays in range 7e8000-7e9fff, each holding 2 bytes per mob with room for 256 mobs.

Address     Description
-------    -----------
 7E8000    Byte 0: sprite ID
           Byte 1: ???
 7E8200    Byte 0: ???
           Byte 1: animation state (whether moving, facing direction, animation frame)
 7E8400
 7E8600
 7E8800
 7E8A00
 7E8C00
 7E8E00    X coordinate
 7E9000    Y coordinate
 7E9200    Strangely packed version of coordinates, only for visible mobs
 7E9400    AI data? Always 00 00 for NPCs in your party
 7E9600    Initial X coordinate
 7E9800    Initial Y coordinate
 7E9A00
 7E9C00
 7E9E00    Byte 0: ID of potential party member? NPCs that can be party members have the values 01-0d assigned in ascending order
                   Empty mob AB has the value 0E
                   Empty mob AE has the value 0F
                   All other mobs have the value 0
                   The memory immediately after, 7EA000, has a compacted version of this array using only 1 byte per mob.
                   This may be a mapping of mob IDs to inventory IDs or combat stats.

Mob indexes:

Mob index  Description
---------  -----------
00         Empty
01-A7      NPCs
A8-CB      Empty?
CC-FF      Dynamically allocated mobs, i.e. spawned monsters

Menu

Address  Size    Description
-------  ----    -----------
     3C     1    Selected spell level in the Cast menu
    209     1    Index of currently selected menu item
   17FF          Unpacked spellbook (8 bytes per level, populated with indexes of known spells)
   8A56    12    vtable for menu functions (Inventory is special-cased)
 038000          Talk function
 038476          Look function
 0382BB          Attack function
 038432          Cast function
 01B64D          Camp function
 03880E          Save function

Misc

Address  Size    Description
-------  ----    -----------
     49     2    Joy1 input state (whether a button is currently pressed)
     4B     2    Joy2 input state (whether a button is currently pressed)
     4D     2    Joy1 input state (whether a button started being pressed this frame)
     4F     2    Joy2 input state (whether a button started being pressed this frame)
     AB     2    Pointer to start of sprite data for visible mobs (always 0500)
     AD     2    Pointer to end of sprite data for visible mobs
     B5     2    Pointer to the next available slot for DMA copies
    500          Sprite data for visible mobs
    A00          Queue of DMA copies for this frame
   1300   1FF    Tile data copied to OAM each frame
   A3BA     1    Screen fadeout level - 0F for full vision, 00 for faded to black
  1014B     1    Amount of karma
  1014C     2    Amount of gold
 7N0151     1    Hour
 7E0152     1    Minute
 7F0000  FFFF    Temp space and output buffer for decompressed data