Metal Slader Glory: Director's Cut/ROM map: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
 
(9 intermediate revisions by 3 users not shown)
Line 2: Line 2:


==ROM==
==ROM==
{{note|1=Byte size = EntryNumber {{x}} 3 - 1}}
{{note|1=Byte size = EntryNumber x 3 - 1}}
<pre>* 0x10207B to 0x10575B (036E0) = Primary pointer table for the entire game's dialogue. 4683 entries. Pointer entries are three bytes each. Text is scattered around the ROM haphazardly. Length bits in the address pointer are zeroed out for every entry. The byte 00 is used as a delimeter.
<pre>* 0x10207B to 0x10575B (036E0) = Primary pointer table for the entire game's dialogue. 4683 entries. Pointer entries are three bytes each. Text is scattered around the ROM haphazardly. Length bits in the address pointer are zeroed out for every entry. The byte 00 is used as a delimeter.
* 0x10575C to 0x10843B (02CE1) = Primary pointer table for dictionary. 3830 entries (excluding the line break command). Pointer entries are three bytes each. Text is scattered around the ROM in small patches.  
* 0x10575C to 0x10843B (02CE1) = Primary pointer table for dictionary. 3830 entries (excluding the line break command). Pointer entries are three bytes each. Text is scattered around the ROM in small patches.  
Line 15: Line 15:


==Pointer structure==
==Pointer structure==
Although typically for SNES games, this game uses three byte pointers; however, this game adopts a space saving measure by storing a dialogue entry's length within a pointer. The dialogue's pointers have the length bits zeroed out because it uses a delimeter. The dictionary's pointers use the bit, because {{0x|00}} is a valid CHR tile value.
Although typically for SNES games, this game uses three byte pointers; however, this game adopts a space saving measure by storing a dialogue entry's length within a pointer. The dialogue's pointers have the length bits zeroed out because it uses a delimeter. The dictionary's pointers use these bits because {{0x|00}} is used for control codes.


===Address layout (in bits)===
===Address layout (in bits)===
The Stardust Crusaders translation uses the length bits to use the translation's expanded ROM space. This is only for the dialogue. The dictionary needs these bits.
  a, b    = length bytes
 
  x, y, z  = Address bytes
  {{Color text|blue|a}}{{Color text|black|, }}{{Color text|blue|b    }}= length bytes
  {{Color text|green|x}}{{Color text|black|, }}{{Color text|orange|y}}{{Color text|black|, }}{{Color text|purple|}}= Address bytes
   
   
  {{Color text|blue|a1 a2 }}{{Color text|green|x1 x2 x3 x4 x5 x6      }}{{Color text|orange|y1 y2 y3 y4 y5 y6 y7 y8    }}{{Color text|blue|b1 b2 b3 }}{{Color text|purple|z1 z2 z3 z4 z5}}
  a1 a2 x1 x2 x3 x4 x5 x6      y1 y2 y3 y4 y5 y6 y7 y8    b1 b2 b3 z1 z2 z3 z4 z5
Length  = {{Color text|black|-  -  - }}{{Color text|blue|a1 a2 b1 b2 b3}}
Address  =
     
      {{Color text|black|Original:}}
      cccccccc = {{Color text|black| 0  0  1  0 }}{{Color text|green|x1 x2 x3 x4}}
      dddddddd = {{Color text|black| 1 }}{{Color text|green|x5 x6 }}{{Color text|purple|z1 z2 z3 z4 z5}}
      eeeeeeee = {{Color text|orange|y1 y2 y3 y4 y5 y6 y7 y8}}
     
      Final PC address = cccccccc dddddddd eeeeeeee
 
==Dictionary==
The dictionary stores dictionary entries for the dialogue to use. It uses bytes that correspond to the CHR, expect for control codes. Control codes start with {{0x|00}} (<tt>[BLACK 1]</tt> in the table file).
 
===Hex values===
The dictionary values are stored sequentially in the pointer table. The dictionary byte values go from {{0x|00}} to {{0x|7F}} then jumps from {{0x|8080}} to {{0x|8EF5}}. The {{0x|7F}} pointer entry would correspond to {{0x|7F}} in hex. The {{0x|80}} pointer entry would correspond to {{0x|8080}}, and the {{0x|81}} pointer entry would correspond to {{0x|8081}}. For translations, use the first byte range for your most used characters to save space.
 
===Character codes===
Character codes display character's names in the dialogue. Here's some examples from the English translation:


<pre>
<pre>
<e no="32" PrimaryAddress="0x173465" SecondaryPointer="0xFFFFFFFF" Byte_Length="0x0A">[BLACK 1][???3] 忠 「[BLACK 1]%[BLACK 1]4</e>
Length  = -  -  - a1 a2 b1 b2 b3
<e no="33" PrimaryAddress="0x173059" SecondaryPointer="0xFFFFFFFF" Byte_Length="0x0B">[BLACK 1]!エリナ 「[BLACK 1]%[???1]”</e>
Address  =  
<e no="34" PrimaryAddress="0x1728CC" SecondaryPointer="0xFFFFFFFF" Byte_Length="0x0C">[BLACK 1][!!]あ゛すさ 「[BLACK 1]%[BLACK 2]M</e>
   
<e no="35" PrimaryAddress="0x1722BE" SecondaryPointer="0xFFFFFFFF" Byte_Length="0x0D">[BLACK 1]?チャ―ミ― 「[BLACK 1]%[TILE 09][!!]</e>
    Original:
<e no="36" PrimaryAddress="0x172920" SecondaryPointer="0xFFFFFFFF" Byte_Length="0x0C">[BLACK 1][!!]゛ケ ン 「[BLACK 1]%%[???3]</e>
    cccccccc = 0  0  1 0 x1 x2 x3 x4
    dddddddd = 1 x5 x6 z1 z2 z3 z4 z5
    eeeeeeee = y1 y2 y3 y4 y5 y6 y7 y8
   
    Final LoROM address = cccccccc dddddddd eeeeeeee
</pre>
</pre>
 
==Dictionary==
The format is as so:
{{subpage|Dictionary|text=How the dictionary is stored in the NES and SNES version.}}
 
:{{0x|00 }}{{hex|• BYTE_FOR_TEXT_LENGTH • TEXT • }}{{0x|00 }}{{hex|• BYTE1}}{{hex|• BYTE2}}{{hex|• BYTE3}}
* The {{0x|00}}s are constants.
* The second byte is for the length of the speaker's name entry. " 忠 「" is four character's long and the "<tt>[???3]</tt>" is {{0x|04}} in the CHR.
* It deals with the character's speech, pitch and maybe other things as well.
** BYTE3's last nibble controls the character's typing speed. {{$|00}} is the fastest. Below is a non-exhaustive list of some character's speed values.
***{{$|04}} = Elina's speed.
***{{$|05}} = Tadashi's speed.
***{{$|06}} = Azusa's speed.


{{Internal Data|game=Metal Slader Glory - Director's Cut}}
{{Internal Data|game=Metal Slader Glory - Director's Cut}}

Latest revision as of 21:14, 28 January 2024

Chip tiny.png The following article is a ROM map for Metal Slader Glory: Director's Cut.

ROM

Note for template.png
Note:
Byte size = EntryNumber x 3 - 1
* 0x10207B to 0x10575B (036E0) = Primary pointer table for the entire game's dialogue. 4683 entries. Pointer entries are three bytes each. Text is scattered around the ROM haphazardly. Length bits in the address pointer are zeroed out for every entry. The byte 00 is used as a delimeter.
* 0x10575C to 0x10843B (02CE1) = Primary pointer table for dictionary. 3830 entries (excluding the line break command). Pointer entries are three bytes each. Text is scattered around the ROM in small patches. 
* 0x10843E to 0x109FFE (01BC0) = Dialogue region.
* 0x14ED03 to 0x175896 (26B93) = Dialogue region.
* 0x175897 to 0x175FFF (00768) = Empty space.
* 0x176000 to 0x17A29F (0429F) = ????
* 0x17A2A0 to 0x17BFFF (01D5F) = Empty space.
* 0x180000 to 0x185FFF (-----) = Character portrait graphics.
* 0x168000 to 0x300000 (-----) = Empty space.
* 0x188000 to 0x18E01F (-----) = Character portrait graphics.

Pointer structure

Although typically for SNES games, this game uses three byte pointers; however, this game adopts a space saving measure by storing a dialogue entry's length within a pointer. The dialogue's pointers have the length bits zeroed out because it uses a delimeter. The dictionary's pointers use these bits because 0x00 is used for control codes.

Address layout (in bits)

a, b     = length bytes
x, y, z  = Address bytes

a1 a2 x1 x2 x3 x4 x5 x6      y1 y2 y3 y4 y5 y6 y7 y8     b1 b2 b3 z1 z2 z3 z4 z5
Length   = 		-  -  - a1 a2 b1 b2 b3
Address  = 
     
     Original:
     cccccccc =  0  0  1  0 x1 x2 x3 x4
     dddddddd =  1 x5 x6 z1 z2 z3 z4 z5
     eeeeeeee = y1 y2 y3 y4 y5 y6 y7 y8
     
     Final LoROM address = cccccccc dddddddd eeeeeeee

Dictionary

SubpageIcon.png
Dictionary
How the dictionary is stored in the NES and SNES version.