|ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ| | DC's Item and Save Dialog Location and Editing Guide | |________________________________________________________| By DChronos, Please credit -Info as of 5/5/10- --Tile, Table, and Palette locations-- ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -> HUD/layer 3/FX1/Message Box Tiles: D3200 in GAMEBOY mode -> Message Box Tile Tables: bank 85 or 0x28000 -> Palette: Supposedly, all but 1 palette come from the first 2 (CRE/HUD) palettes. Palette 18 seems to be loaded during the message box appearance. * Palette 08 - Pink Text, White Instruction Type ('select' etc. text) * Palette 0C - Blue Text (Can be used for White Instruction Type) * Palette 18 - Green Text, Red Arrow (Save dialog) * Palette 1C - Orange Text --Tile Table Byte Explanation-- ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ Tile Tables consist of 2 bytes, like 4E 28. The first byte is the tile number used in the tileset that the table uses. Row 1 of the tile table goes from 00-0F, row 2 is from 10-1F, and row 3 is 20-2F, and so on. If you open an unheadered rom in a tile editor and scroll down to D3200 and change to view to gameboy mode, you can see how this is done a lot easier. In the example 4E 28, you see that tile 4E (to the right of the 'S' tile) is a blank tile. The second byte consists of 3 things all together as one: The Palette Number, the Tile Flip, and the Priority Bit. You get the value of this byte by adding the 3 parts together, like, for our example, 4E 28, you can only get the 28 by having a palette number of 08, a flip of 00, and a priority bit of 20: 08 + 00 + 20 = 28. It's actually a bit more complex than that, but this is the easy way, and the only way you really need to know. -> The Palette Number can only be: 00, 04, 08, 0C, 10, 14, 18, 1C -> The Tile Flip can only be: 00 - No flip 40 - Horizontal flip 80 - Vertical flip C0 - Horizontal and vertical flip -> The Priority Bit can only be: 00 or 20 00 - Places tiles behind layer 1, layer 2, and sprites. 20 - Places tiles in front of layer 1, layer 2, and sprites. --Letter to HEX Conversion Table-- ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ By request, I'm including conversion tables to make it easy to type the letters into a ROM with a hex editor by seeing what their hex values are. Included is the original table and one for my map patch. Also, there are two apostrophes, but they're different. Maybe one is a single qoute and the other is an apostrophe, or they could be left single qoute and right single quote and one is used as an apostophe... it's up to you how you use it, as they aren't used in-game. The item description text is complex, and not listed here. Use a tile editor for that. Original ROM: Letter: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z . , ' ' ? ! Hex: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF DC's Map Patch: Letter: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z . , ' ' ? ! Hex: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF --Other useful info-- ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -> Each line of a message box extends the entire screen. (32 8x8 pixel tiles) -> The lines above and below each message box consists of a single table placed both at the top and bottom of each message box, and is 1 screen wide (32 tiles)x 1 tile tall. You can add/subtract black tiles to alter the width of the large and small message boxes, but you must also alter all the message boxes below that go with each size in order to make them appear correct. If you edit this blank space, keep in mind that you are changing it for BOTH the top and bottom of the message boxes. -> The message dialog boxes use the transparent tile at 0E for all the invisible space around the boxes, or the Clearing Tiles. The priority bit hides these tiles behind layers 1 and 2, as well as sprites, but can be seen if there is nothing on layer 2, or if part of layer 2 is transparent. By default, you won't actually see those tiles because they are already using a transparent color. -> The black part of the message boxes uses tile 4E by default, which is black in the right palettes. The rest of the tiles are the letters and words at the bottom of the layer 3 tileset, as well as the HUD selections. -> You can use any tile in the layer 3 tileset in your messages. Mini hint maps from item messages, anyone? --Message box locations (in hex, clean headerless rom)-- ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ *28000-2803F Blank lines above and below large (wide) message boxes (like missiles, power bombs, super missiles, items) *28040-2807F Blank lines above and below small (narrow) message boxes (like energy tank, reserve tank, beams, save) *28080-2877E ASM used to determine which message box top and bottom to load and which message to load. Kejardon has a guide for some of this ASM at Jathys' website. I will be translating all of it soon. *28426-28435 in the ASM: Button Tiles These are the letter tiles used by the game depending on what you chose for SHOT and DASH in the button config. -> E0 28 - A -> E1 3C - B -> F7 2C - X -> F8 38 - Y -> D0 38 - SEL -> EB 38 - L -> F1 38 - R -> 4E 28 - (space, unused?) *2823F in the ASM: '0E 00' This is the tile used as the clearing tiles above and below message boxes, and during transition. By default, this tile is the transparent tile in the layer 3 tileset and has a priority of 00. -> Info in () is number of bytes each box uses and type of message box, large or small (check above). *Energy Tank: (64 bytes, small) 2877F-287BE *Missiles: (256 bytes, large) -> word "Missile": 287BF-287FE -> blank space line: 287FF-2883E -> top of missile icon: 2883F-2887E -> "select" etc. text: 2887F-288BE *Super Missile: (256 bytes, large) -> words "Super Missile": 288BF-288FE -> blank space line: 288FF-2893E -> top of S.Missile icon: 2893F-2897E -> "select" etc. text: 2897F-289BE *Power bomb: (256 bytes, large) -> words "Power Bomb": 289BF-289FE -> blank space line: 289FF-28A3E -> top of P. Bomb icon: 28A3F-28A7E -> "select" etc. text: 28A7F-28ABE *Grapple Beam: (256 bytes, large) -> words "Grapple Beam": 28ABF-28AFE -> blank space line: 28AFF-28B3E -> top of G. Beam icon: 28B3F-28B7E -> "select" etc. text: 28B7F-28BBE *X-Ray Scope: (256 bytes, large) -> words "X-Ray Scope": 28BBF-28BFE -> blank space line: 28BFF-28C3E -> top of X-Ray icon: 28C3F-28C7E -> "select" etc. text: 28C7F-28CBE *Varia Suit: (64 bytes, small) 28CBF-28CFE *Spring Ball: (64 bytes, small) 28CFF-28D3E *Morphing Ball: (64 bytes, small) 28D3F-28D7E *Screw Attack: (64 bytes, small) 28D7F-28DBE *Hi-Jump: (64 bytes, small) 28DBF-28DFE *Space Jump: (64 bytes, small) 28DFF-28E3E *Speed Booster: (256 bytes, large) -> words "Speed Booster": 28E3F-28E7E -> blank space line: 28E7F-28EBE -> blank space line: 28EBF-28EFE -> "press &" etc. text: 28EFF-28F3E *Charge Beam: (64 bytes, small) 28F3F-28F7E *Ice Beam: (64 bytes, small) 28F7F-28FBE *Wave Beam (64 bytes, small) 28FBF-28FFE *Spazer: (64 bytes, small) 28FFF-2903E *Plasma Beam: (64 bytes, small) 2903F-2907E *Bomb: (256 bytes, large) -> word "Bomb": 2907F-290BE -> top of Sumus pic: 290BF-290FE -> middle of Samus pic: 290FF-2913E -> "(morph) &" etc. text: 2913F-2917E *Map Data Access Completed.: (192 bytes, small) -> "Map Data Access": 2917F-291BE -> blank space line: 291BF-291FE -> "Completed.": 291FF-2923E *Energy Recharge Completed.: (192 bytes, small) -> "Energy Recharge": 2923F-2927E -> blank space line: 2927F-292BE -> "Completed." 292BF-292FE *Missile Reload Completed. (192 bytes, small) -> "Missile Reload": 292FF-2933E -> blank space line: 2933F-2937E -> "Completed." 2937F-293BE *Would you like to save?: (256 bytes, small) -> "Would You Like": 293BF-293FE -> "To Save?": 293FF-2943E -> blank space line: 2943F-2947E -> "=>YES NO ": 2947F-294BE (Loaded when Save Dialog appears) *"Save Completed.": (64 bytes, small) 294BF-294FE *Reserve Tank: (64 bytes, small) 294FF-2953E *Gravity Suit: (64 bytes, small) 2953F-2957E -> These 3 tables go to the save dialog. Make sure to edit at least the 3 'YES/NO' tables that are used. The table above with the save dialog is the one that is first loaded when the message box appears. After that, the 2 labeled below are the ones used. *"=>YES NO": (64 bytes, small) 29581-295C0 (Unused, as far as I've seen) *"=>YES NO": (64 bytes, small) 295C1-29600 (Loaded when selecting 'YES' after having selected 'NO') *" YES =>NO": (64 bytes, small) 29601-29640 (Loaded when selecting 'NO') ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ --> Special thanks to Jathys for help on the color/flip/priority byte, as well as pointing me towards the location of the message box data. ^_^