User:Kimbles/Medarot 2 Hacking Notes
Just a page to post what I've found in Medarot 2. ;D
Note that this is for the original GB/GBC version. For the GBA remake, see Medarot 2 Core Hacking Notes.
Bank map
These are my findings for how the ROM is organized. This game is 2 MB, so about four times the size of Medarot 1.
Legend: Text is green, Graphics are pink, and other data is black. Only the banks that say (Empty) are actually empty, and the rest just contain unidentified data.
Bank Map | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bank | Address | Known contents | |||||||||||||||||||||||||||||
0x0 | 0x0000 | 0x237E - Dialogue text bank pointer table | |||||||||||||||||||||||||||||
0x3 | 0xC000 | 0xDB50 - Metabee part names in English, used in intro 0xDC20 - Graphics for English font used in intro | |||||||||||||||||||||||||||||
0x4 | 0x10000 | 0x11350 - Staff credits | |||||||||||||||||||||||||||||
0x5 | 0x14000 | 0x160D0 - Skill names 0x159E0 - Head/Right arm/Left arm/Legs | |||||||||||||||||||||||||||||
0x6 | 0x18000 | (Empty) | |||||||||||||||||||||||||||||
0xC | 0x30000 | (Empty) | |||||||||||||||||||||||||||||
0x11 | 0x44000 | 0x45000 - Title screen graphics | |||||||||||||||||||||||||||||
0x1A | 0x68000 | 0x693F9 - Debug menu options | |||||||||||||||||||||||||||||
0x20 | 0x80000 | 0x80800 - Medarotter names + data for encounter portraits/text | |||||||||||||||||||||||||||||
0x21 | 0x84000 | 0x84000 - Parts data 0x86620 - Attribute names 0x866D0 - Skill names, Leg types ? some other data? 0x86D70 - Medal nature names 0x86E60 - Medaforce names + data | |||||||||||||||||||||||||||||
0x22 | 0x88000 | 0x88200 - Medarot names 0x88890 - Part names, models + gender data 0x8B7A0 - Item names + usability data 0x8BA50 - Medal names 0x8BB90 - Terrain names 0x8BC60 - Short action names (partly unused) | |||||||||||||||||||||||||||||
0x23 | 0x8C000 | Battle, menu, system messages | |||||||||||||||||||||||||||||
0x24 | 0x90000 | Battle, menu, system messages | |||||||||||||||||||||||||||||
0x25 | 0x94000 | (Empty) | |||||||||||||||||||||||||||||
0x28 | 0xA0000 | Character walking sprites | |||||||||||||||||||||||||||||
0x29 | 0xA4000 | Character walking sprites | |||||||||||||||||||||||||||||
0x2A | 0xA8000 | Attack/battle animations | |||||||||||||||||||||||||||||
0x2B | 0xAC000 | Attack/battle animations | |||||||||||||||||||||||||||||
0x2E | 0xB8000 | More character walking sprites | |||||||||||||||||||||||||||||
0x34 | 0xD0000 | Tilemaps + menu text | |||||||||||||||||||||||||||||
0x35 | 0xD4000 | Tilemaps + menu text | |||||||||||||||||||||||||||||
0x3A | 0xE8000 | 0xE8200 - Signs and objects | |||||||||||||||||||||||||||||
0x3B | 0xEC000 | ? Compressed graphics (+ font) | |||||||||||||||||||||||||||||
0x3C | 0xF0000 | ? Compressed graphics | |||||||||||||||||||||||||||||
0x3D | 0xF4000 | ? Compressed graphics | |||||||||||||||||||||||||||||
0x3E | 0xF8000 | ? Compressed graphics | |||||||||||||||||||||||||||||
0x40 | 0x100000 | Character portraits | |||||||||||||||||||||||||||||
0x41 | 0x104000 | Character portraits | |||||||||||||||||||||||||||||
0x42 | 0x108000 | Character portraits | |||||||||||||||||||||||||||||
0x43 | 0x10C000 | Character portraits | |||||||||||||||||||||||||||||
0x44 | 0x110000 | ? Compressed graphics | |||||||||||||||||||||||||||||
0x45 | 0x114000 | ? Compressed graphics | |||||||||||||||||||||||||||||
0x46 | 0x118000 | Medal graphics | |||||||||||||||||||||||||||||
0x47 | 0x11C000 | Medal graphics | |||||||||||||||||||||||||||||
0x48 | 0x120000 | Medal graphics | |||||||||||||||||||||||||||||
0x49 | 0x124000 | Head part graphics | |||||||||||||||||||||||||||||
0x4A | 0x128000 | Head part graphics | |||||||||||||||||||||||||||||
0x4B | 0x12C000 | Head part graphics | |||||||||||||||||||||||||||||
0x4C | 0x130000 | Head part graphics (silhouette) | |||||||||||||||||||||||||||||
0x4D | 0x134000 | Head part graphics (silhouette) | |||||||||||||||||||||||||||||
0x4E | 0x138000 | Head part graphics (silhouette) | |||||||||||||||||||||||||||||
0x4F | 0x13C000 | Right part graphics | |||||||||||||||||||||||||||||
0x50 | 0x140000 | Right part graphics | |||||||||||||||||||||||||||||
0x51 | 0x144000 | Right part graphics | |||||||||||||||||||||||||||||
0x52 | 0x148000 | Right part graphics (silhouette) | |||||||||||||||||||||||||||||
0x53 | 0x14C000 | Right part graphics (silhouette) | |||||||||||||||||||||||||||||
0x54 | 0x150000 | Right part graphics (silhouette) | |||||||||||||||||||||||||||||
0x55 | 0x154000 | Left part graphics | |||||||||||||||||||||||||||||
0x56 | 0x158000 | Left part graphics | |||||||||||||||||||||||||||||
0x57 | 0x15C000 | Left part graphics | |||||||||||||||||||||||||||||
0x58 | 0x160000 | Left part graphics (silhouette) | |||||||||||||||||||||||||||||
0x59 | 0x164000 | Left part graphics (silhouette) | |||||||||||||||||||||||||||||
0x5A | 0x168000 | Left part graphics (silhouette) | |||||||||||||||||||||||||||||
0x5B | 0x16C000 | Leg part graphics | |||||||||||||||||||||||||||||
0x5C | 0x170000 | Leg part graphics | |||||||||||||||||||||||||||||
0x5D | 0x174000 | Leg part graphics | |||||||||||||||||||||||||||||
0x69 | 0x1A4000 | (Empty) | |||||||||||||||||||||||||||||
0x6F | 0x1BC000 | Dialogue (beginning of game) | |||||||||||||||||||||||||||||
0x70 | 0x1C0000 | Dialogue | |||||||||||||||||||||||||||||
0x71 | 0x1C4000 | Dialogue | |||||||||||||||||||||||||||||
0x72 | 0x1C8000 | Dialogue | |||||||||||||||||||||||||||||
0x73 | 0x1CC000 | Dialogue | |||||||||||||||||||||||||||||
0x74 | 0x1D0000 | Dialogue | |||||||||||||||||||||||||||||
0x75 | 0x1D4000 | Dialogue | |||||||||||||||||||||||||||||
0x76 | 0x1D8000 | Dialogue | |||||||||||||||||||||||||||||
0x77 | 0x1DC000 | Dialogue | |||||||||||||||||||||||||||||
0x78 | 0x1E0000 | Dialogue | |||||||||||||||||||||||||||||
0x79 | 0x1E4000 | Dialogue | |||||||||||||||||||||||||||||
0x7A | 0x1E8000 | 0x1E8000 - Dialogue 0x1EA7FB - ? some other data? | |||||||||||||||||||||||||||||
0x7B | 0x1EC000 | Dialogue | |||||||||||||||||||||||||||||
0x7C | 0x1F8000 | Dialogue (ends with bathroom door) | |||||||||||||||||||||||||||||
0x7D | 0x1FC000 | ? Compressed graphics |
This should be all of the text in the game. I found the graphics by scrolling through a tile editor though, so I couldn't identify most of the compressed graphics. (The game almost certainly has a compressed graphics table like Telefang.)
If you know where anything else is located in the ROM (like music/sound, ASM code, or other data), feel free to add it here!
Text table
The text table for the game can be downloaded here:
Use this to view/edit the text in a hex editor.
Control codes
- C0 = End character used to seperate entries in lists
- C1?? = Ends a string. In normal dialogue, C100 is used for most lines and C104 is used for yes/no questions. The game also uses C102 and C104 in battle/system messages.
- C2 = New line character. Technically this just starts writing on the second text line, so if you use it on the second text line it will start overwriting existing text.
- C3?? = Changes the text speed. Lower numbers are faster, and C3FF makes the text appear instantly.
- C4 = Waits for the player to press A, then starts a new text box. In normal dialogue, C4 is always followed by C6 when the game wants to start a new text box, but in battle/system messages C4 is sometimes used on its own. I'm not 100% sure what the difference is.
- C5???? = Inserts text from the RAM address specified. C528CB inserts the player's name.
- C6 = Starts a new box without waiting for a button press. The game seems to only use this in conjunction with C4.
- C7?? = Sets the dialogue portrait. There are C5 (198) possible faces to use. C7FF doesn't display a portrait.
Parts data
The format for parts data in M2 is much nicer than in Medarot 1. Like the other games, the parts are listed in the order of the Medarot list, with all head parts followed by all right arms, etc. The data is stored in two sections, one containing just the model number, name, and gender, and the other containing the rest of the data.
The addresses are as follows:
Models/Names/Gender: -------------- Heads: 0x88891 Rights: 0x894BA Lefts: 0x8A0E4 Legs: 0x8AD0D End: 0x8B735 Data: ---------------- Heads: 0x84000 Rights: 0x84970 Lefts: 0x852E0 Legs: 0x85C50 End: 0x86570
Models, names, and genders
Each part has 17 bytes in this section.
Format: /A/A/A/A/A/A/A/B/B/B/B/B/B/B/B/B/C/
- A - Model number (as text) plus an end character.
- B - The part's name, limited to 8 characters plus an end character. (Empty space is filled with 00's)
- C - Decides the part's gender. 00 is male, 01 is female.
While they don't have any stats, this section actually includes slots for the male and female tinpets for use when no parts are equipped. The part names are all "--------" and the model numbers are all BAY-03, for some reason. (They aren't visible in the game.)
Data (Heads and arms)
Here, each part has 11 bytes of data, followed by five 00's for spacing.
Format: /A/B/C/D/E/F/G/H/I/J/K/ A = Attribute B = Action C = Skill D = Armor E = Success F = Power G = Pierce H = Uses/Charge I = Cooldown (arms only) J = Blank K = Unknown
- A - This decides the attribute. There are 32 (1F) possible values (in the same order as the medal list), but the last 6 aren't used since they're for medals that don't match anything.
- B - This decides the action. There are 70 (45) possible actions, listed below. (Even non-attacking actions have names now!)
- C - This decides the skill. As you'd expect, there are 8 possible values (00 to 07).
Skills: 00 = Strike 01 = Berserk 02 = Shoot 03 = Snipe 04 = Support 05 = Protect 06 = Heal 07 = Other
- D, E, F = Decide the Armor, Success, and Power stats respectively. All three range from 00 to FF (255), but I suspect only armor can go that high without causing problems.
- G - Decides whether or not the part has a pierce effect. 00 means no, 01 (or any non-00 value) means yes. Amusingly, most of the Medarots from the first game still use 0B here, which implies that the list really was copy/pasted.
- H - For head parts, this is the number of uses. For arms, it's the charge value.
- I - For heads, this is always 00. For arms, it's the cooldown value.
- J - This is 00 for all head and arm parts.
- K - I... I don't know what this does. It looks like it's for something, but nothing stands out on the stat pages or in battle. The number seems to be the same among parts on the same Medarot (including legs).
Data (Legs)
Like heads and arms, these have 11 bytes of stuff followed by five 00's for spacing.
Format: /A/B/C/D/E/F/G/H/I/J/K/ A = Attribute B = Leg type C = Blank D = Armor E = Speed F = Mobility G = Fighting H = Shooting I = Scan J = Conceal K = Unknown
- A - Same as above.
- B - This decides the leg type. There are 7 total, ranging from 46 (Flying) to 4C (Water).
- C - This is 00 for all leg parts.
- D, E, F, G, H, I, J - These are numeric stats that can range from 00 to FF (255). Again, aside from armor they'll probably mess up if you raise them that high.
- K - The same mystery byte as above. If you know what it does, please tell me!
That's it!
Extra action names
In M2, every action has a name shown in the first line of the part's description, but the ROM also contains a list of short names written in katakana English for every action. For attacking actions, the names on this list actually get used in battle, but for non-attacking actions they appear to go unused. They're all under 5 characters, so it's possible that they were intended to show up on the stats screens along with the attributes/skills. (If the goal was just to have names to use in battle, they probably would have used more than 5 characters!)
I think they're interesting, so I've listed them here with translations. I've also included the names the game actually uses for each action, as well as their current translations. (Some action names in Medarot 2 were changed later in the series, so the names the wiki uses don't match exactly. For those, I've added the translation of the original in brackets.)
Medarot 2 Action list | ||||
---|---|---|---|---|
# | Short name | English | Actual name | Actual English |
00 | ソード | Sword | ソード | Sword |
01 | ハンマー | Hammer | ハンマー | Hammer |
02 | ライフル | Rifle | ライフル | Rifle |
03 | ガトリング | Gatling | ガトリング | Gatling |
04 | レーザー | Laser | レーザー | Laser |
05 | ビーム | Beam | ビーム | Beam |
06 | ミサイル | Missile | ミサイル | Missile |
07 | ナパーム | Napalm | ナパーム | Napalm |
08 | ブレイク | Break | ブレイク | Break |
09 | プレス | Press | プレス | Press |
0A | トラップ | Trap | かくとう トラップ | Melee Trap |
0B | トラップ | Trap | しゃげき トラップ | Shooting Trap |
0C | ブロック | Block | こうげき ブロック | Shot Clear (Attack Block) |
0D | バグ | Bug | バグ | Bug |
0E | ウィルス | Virus | ウィルス | Virus |
0F | サンダー | Thunder | サンダー | Thunder |
10 | フリーズ | Freeze | フリーズ | Freeze |
11 | ウェーブ | Wave | ウェーブ | Wave |
12 | ホールド | Hold | ホールド | Hold |
13 | ファイヤー | Fire | ファイヤー | Fire |
14 | メルト | Melt | メルト | Melt |
15 | キャンセル | Cancel | トラップ かいじょ | Trap Cancel |
16 | キャンセル | Cancel | しょうじょう かいじょ | Status Cancel |
17 | キャンセル | Cancel | ヘんどう かいじょ | Flux Cancel |
18 | キャンセル | Cancel | ていし かいじょ | Stop Cancel |
19 | キャンセル | Cancel | そくばく かいじょ | Bind Cancel |
1A | キャンセル | Cancel | けいぞく かいじょ | Burn Cancel |
1B | オペレート | Operate | メダフォース コントロール | Force Control (Medaforce Control) |
1C | ボイド | Void | こうがく むこう | Negate Optical |
1D | ボイド | Void | かやく むこう | Negate Gunpowder |
1E | ボイド | Void | じゅうリょく むこう | Negate Gravity |
1F | デフェンス | Defense | シールド | Defend (Shield) |
20 | バリア | Barrier | バリア | Perfect Defense (Barrier) |
21 | ブロック | Block | ダメージ しょうめつ | Lesser Defense (Damage Discard) |
22 | キュア | Cure | かいふく | Repair |
23 | レストア | Restore | けいぞく かいふく | Auto-Repair |
24 | リバイバル | Revival | ふっかつ | Revive |
25 | リバース | Reverse | そせい | Resurrect |
26 | アンチエア | Anti-Air | たいくう | Anti-Air * |
27 | アンチエア | Anti-Air | たいくう | Anti-Air * |
28 | アンチシー | Anti-Sea | たいすい | Anti-Sea * |
29 | アンチシー | Anti-Sea | たいすい | Anti-Sea * |
2A | サーチ | Search | さくてき | Scan |
2B | ストリップ | Strip | いんペい クリア | Conceal Clear |
2C | ヒドュン | Hidden | いんペい | Conceal |
2D | ジャミング | Jamming | さくてき クリア | Scan Clear |
2E | フルアップ | Full-Up | ほじょ じゅうてん | Boost Charge |
2F | チャージ | Charge | きゅうそく じゅうてん | Instant Charge |
30 | バッテリー | Battery | じょうじ じゅうてん | Constant Charge |
31 | アブソーブ | Absorb | じゅうてん きゅうしゅう | Charge Drain |
32 | フォール | Fall | てんとう | Trip |
33 | インポス | Imposs | しようふのう | Disable |
34 | コンフュ | Confu | こんらん | Confuse |
35 | リデュース | Reduce | かいすう ダウン | Ammo Down |
36 | リアボイド | Re-Avoid | かいひ ふかのう | No Dodge |
37 | リデフェン | Re-Defen | ぼうぎょ ふかのう | No Defend |
38 | デストロイ | Destroy | デストロイ | Destroy |
39 | サクリ | Sacri | サクリファイス | Sacrifice |
3A | メダアップ | Meda-Up | メダフォース アップ | Force Up (Medaforce Up) |
3B | メダダウン | Meda-Down | メダフォース ダウン | Force Down (Medaforce Down) |
3C | セットオン | Set On | クロスこうげき セットオン! | Cross Attack Set (Cross Attack Set On!) |
3D | ファイヤー | Fire | クロスこうげき ファイヤー! | Cross Attack Fire (Cross Attack Fire!) |
3E | まわリこみ | Surround | しのびこみ かくとう | Enemy Detection (Sneak Attack) |
3F | カウンター | Counter | ダメージ はんげき | Counter (Damage Counter) |
40 | リフレクト | Reflect | ダメージ はんしゃ | Reflect (Damage Reflect) |
41 | チェンジ | Change | パーツ ヘんか | Transform |
42 | ジャミング | Jamming | ぼうがいパーツ ヘんか | Transform: Disrupt |
43 | アタッカー | Attacker | こうげきパーツ ヘんか | Transform: Attack |
44 | デフェンダ | Defender | ぼうぎょパーツ ヘんか | Transform: Defend |
45 | スペシャル | Special | とくしゅパーツ ヘんか | Transform: Special |
Leg types | ||||
46 | プレーン | Plane | ひこう | Flying |
47 | フロート | Float | ふゆう | Hover |
48 | ミリポッド | Milipod | たきゃく | Multi-leg |
49 | レッグ | Leg | にきゃく | Bipedal |
4A | ホイール | Wheel | しゃリん | Wheeled |
4B | タンク | Tank | せんしゃ | Tank |
4C | サブマリン | Submarine | せんすい | Aquatic |
* There are two copies each of Anti-Air and Anti-Sea. The only difference seems to be the animations; the first one is used as a physical attack and the second one is ranged.