diff --git a/data/rom_2.s b/data/rom_2.s index 1adf7633..39e26897 100644 --- a/data/rom_2.s +++ b/data/rom_2.s @@ -150,91 +150,64 @@ gEReaderTextGlyphTable:: @ 0x086A4CF8 @ Entry = (byte offset of the glyph within gEReaderText_Gfx) | (advance width in px). @ A glyph is 1 tile wide and 2 tall; 0x0000 is a blank cell. @ DrawEReaderTextPage masks the width off with & 0xFFF0 and nothing ever reads it: -@ i=2; apostrophe, comma, full stop and l=4; word-final n=5; everything else 6. +@ Glyph spacing mostly matches the char spacing in the dex, but there's a few characters +@ that are increased to 6 px for the char. n has some using 5px, some using 6??? - @ "Transmit data with the" - .2byte 0x3046, 0x3346, 0x3126, 0x32c6, 0x3366, 0x32a6, 0x3222, 0x3386, 0x0000, 0x3186, 0x3126, 0x3386, 0x3126, 0x0000, 0x33e6, 0x3222, 0x3386, 0x3206, 0x0000, 0x3386, 0x3206, 0x31a6, 0x0000, 0x0000 - @ "e-Reader!" - .2byte 0x31a6, 0x2826, 0x3006, 0x31a6, 0x3126, 0x3186, 0x31a6, 0x3346, 0x3946, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + .ereaderText "Transmit data with the" + .ereaderText "e-Reader!" + .ereaderText "" - @ "Press the A Button" - .2byte 0x2bc6, 0x3346, 0x31a6, 0x3366, 0x3366, 0x0000, 0x3386, 0x3206, 0x31a6, 0x0000, 0x29e6, 0x0000, 0x2a06, 0x33a6, 0x3386, 0x3386, 0x32e6, 0x32c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - @ "when you're ready." - .2byte 0x33e6, 0x3206, 0x31a6, 0x32c6, 0x0000, 0x3826, 0x32e6, 0x33a6, 0x3b06, 0x3346, 0x31a6, 0x0000, 0x3346, 0x31a6, 0x3126, 0x3186, 0x3826, 0x39e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + .ereaderText "Press the A Button" + .ereaderText "when you#re ready." + .ereaderText "" - @ "Transmission successful." - .2byte 0x3046, 0x3346, 0x3126, 0x32c6, 0x3366, 0x32a6, 0x3222, 0x3366, 0x3366, 0x3222, 0x32e6, 0x32c6, 0x0000, 0x3366, 0x33a6, 0x3166, 0x3166, 0x31a6, 0x3366, 0x3366, 0x31c6, 0x33a6, 0x3284, 0x39e4 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - @ "When you activate" - .2byte 0x30a6, 0x3206, 0x31a6, 0x32c6, 0x0000, 0x3826, 0x32e6, 0x33a6, 0x0000, 0x3126, 0x3166, 0x3386, 0x3222, 0x33c6, 0x3126, 0x3386, 0x31a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + .ereaderText "Transmission successful." + .ereaderText "" + .ereaderText "When you activate" - @ "CATCH 'EM MODE, there is" - .2byte 0x2a26, 0x29e6, 0x3046, 0x2a26, 0x2ac6, 0x0000, 0x3ac4, 0x2a66, 0x2b66, 0x0000, 0x2b66, 0x2ba6, 0x2a46, 0x2a66, 0x39c4, 0x0000, 0x3386, 0x3206, 0x31a6, 0x3346, 0x31a6, 0x0000, 0x3222, 0x3366 - @ "a special appearance of" - .2byte 0x3126, 0x0000, 0x3366, 0x3306, 0x31a6, 0x3166, 0x3222, 0x3126, 0x3284, 0x0000, 0x3126, 0x3306, 0x3306, 0x31a6, 0x3126, 0x3346, 0x3126, 0x32c6, 0x3166, 0x31a6, 0x0000, 0x32e6, 0x31c6, 0x0000 - @ "rare Pokémon." - .2byte 0x3346, 0x3126, 0x3346, 0x31a6, 0x0000, 0x2bc6, 0x32e6, 0x3266, 0x3aa6, 0x32a6, 0x32e6, 0x32c6, 0x39e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + .ereaderText "CATCH `EM MODE, there is" + .ereaderText "a special appearance of" + .ereaderText "rare Pokémon." - @ "Transmission successful." - .2byte 0x3046, 0x3346, 0x3126, 0x32c6, 0x3366, 0x32a6, 0x3222, 0x3366, 0x3366, 0x3222, 0x32e6, 0x32c6, 0x0000, 0x3366, 0x33a6, 0x3166, 0x3166, 0x31a6, 0x3366, 0x3366, 0x31c6, 0x33a6, 0x3284, 0x39e4 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + .ereaderText "Transmission successful." + .ereaderText "" + .ereaderText "" - @ "The Pokémon which rarely" - .2byte 0x3046, 0x3206, 0x31a6, 0x0000, 0x2bc6, 0x32e6, 0x3266, 0x3aa6, 0x32a6, 0x32e6, 0x32c6, 0x0000, 0x33e6, 0x3206, 0x3222, 0x3166, 0x3206, 0x0000, 0x3346, 0x3126, 0x3346, 0x31a6, 0x3284, 0x3826 - @ "appear are now easier to" - .2byte 0x3126, 0x3306, 0x3306, 0x31a6, 0x3126, 0x3346, 0x0000, 0x3126, 0x3346, 0x31a6, 0x0000, 0x32c6, 0x32e6, 0x33e6, 0x0000, 0x31a6, 0x3126, 0x3366, 0x3222, 0x31a6, 0x3346, 0x0000, 0x3386, 0x32e6 - @ "find in CATCH 'EM MODE." - .2byte 0x31c6, 0x3222, 0x32c6, 0x3186, 0x0000, 0x3222, 0x32c5, 0x0000, 0x2a26, 0x29e6, 0x3046, 0x2a26, 0x2ac6, 0x0000, 0x3ac4, 0x2a66, 0x2b66, 0x0000, 0x2b66, 0x2ba6, 0x2a46, 0x2a66, 0x39e4, 0x0000 + .ereaderText "The Pokémon which rarely" + .ereaderText "appear are now easier to" + .ereaderText "find iņ CATCH `EM MODE." - @ "Transmission successful." - .2byte 0x3046, 0x3346, 0x3126, 0x32c6, 0x3366, 0x32a6, 0x3222, 0x3366, 0x3366, 0x3222, 0x32e6, 0x32c6, 0x0000, 0x3366, 0x33a6, 0x3166, 0x3166, 0x31a6, 0x3366, 0x3366, 0x31c6, 0x33a6, 0x3284, 0x39e4 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + .ereaderText "Transmission successful." + .ereaderText "" + .ereaderText "" - @ "Start with nine Balls." - .2byte 0x3026, 0x3386, 0x3126, 0x3346, 0x3386, 0x0000, 0x33e6, 0x3222, 0x3386, 0x3206, 0x0000, 0x32c6, 0x3222, 0x32c6, 0x31a6, 0x0000, 0x2a06, 0x3126, 0x3284, 0x3284, 0x3366, 0x39e4, 0x0000, 0x0000 - @ "Start with Master Ball." - .2byte 0x3026, 0x3386, 0x3126, 0x3346, 0x3386, 0x0000, 0x33e6, 0x3222, 0x3386, 0x3206, 0x0000, 0x2b66, 0x3126, 0x3366, 0x3386, 0x31a6, 0x3346, 0x0000, 0x2a06, 0x3126, 0x3284, 0x3284, 0x39e4, 0x0000 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + .ereaderText "Start with nine Balls." + .ereaderText "Start with Master Ball." + .ereaderText "" - @ "Start with 99 Coins." - .2byte 0x3026, 0x3386, 0x3126, 0x3346, 0x3386, 0x0000, 0x33e6, 0x3222, 0x3386, 0x3206, 0x0000, 0x29a6, 0x29a6, 0x0000, 0x2a26, 0x32e6, 0x3222, 0x32c6, 0x3366, 0x39e4, 0x0000, 0x0000, 0x0000, 0x0000 - @ "Pichu Saver stays on." - .2byte 0x2bc6, 0x3222, 0x3166, 0x3206, 0x33a6, 0x0000, 0x3026, 0x3126, 0x33c6, 0x31a6, 0x3346, 0x0000, 0x3366, 0x3386, 0x3126, 0x3826, 0x3366, 0x0000, 0x32e6, 0x32c5, 0x39e4, 0x0000, 0x0000, 0x0000 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + .ereaderText "Start with 99 Coins." + .ereaderText "Pichu Saver stays oņ." + .ereaderText "" - @ "Transmission successful." - .2byte 0x3046, 0x3346, 0x3126, 0x32c6, 0x3366, 0x32a6, 0x3222, 0x3366, 0x3366, 0x3222, 0x32e6, 0x32c6, 0x0000, 0x3366, 0x33a6, 0x3166, 0x3166, 0x31a6, 0x3366, 0x3366, 0x31c6, 0x33a6, 0x3284, 0x39e4 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + .ereaderText "Transmission successful." + .ereaderText "" + .ereaderText "" - @ "Start in the Ruin Area." - .2byte 0x3026, 0x3386, 0x3126, 0x3346, 0x3386, 0x0000, 0x3222, 0x32c5, 0x0000, 0x3386, 0x3206, 0x31a6, 0x0000, 0x3006, 0x33a6, 0x3222, 0x32c6, 0x0000, 0x29e6, 0x3346, 0x31a6, 0x3126, 0x39e4, 0x0000 - @ "First bonus stage will" - .2byte 0x2a86, 0x3222, 0x3346, 0x3366, 0x3386, 0x0000, 0x3146, 0x32e6, 0x32c6, 0x33a6, 0x3366, 0x0000, 0x3366, 0x3386, 0x3126, 0x31e6, 0x31a6, 0x0000, 0x33e6, 0x3222, 0x3284, 0x3284, 0x0000, 0x0000 - @ "be the RAYQUAZA stage." - .2byte 0x3146, 0x31a6, 0x0000, 0x3386, 0x3206, 0x31a6, 0x0000, 0x3006, 0x29e6, 0x30e6, 0x2be6, 0x3066, 0x29e6, 0x3106, 0x29e6, 0x0000, 0x3366, 0x3386, 0x3126, 0x31e6, 0x31a6, 0x39e4, 0x0000, 0x0000 + .ereaderText "Start iņ the Ruin Area." + .ereaderText "First bonus stage will" + .ereaderText "be the RAYQUAZA stage." - @ "Transmission successful." - .2byte 0x3046, 0x3346, 0x3126, 0x32c6, 0x3366, 0x32a6, 0x3222, 0x3366, 0x3366, 0x3222, 0x32e6, 0x32c6, 0x0000, 0x3366, 0x33a6, 0x3166, 0x3166, 0x31a6, 0x3366, 0x3366, 0x31c6, 0x33a6, 0x3284, 0x39e4 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + .ereaderText "Transmission successful." + .ereaderText "" + .ereaderText "" - @ "You can select the" - .2byte 0x30e6, 0x32e6, 0x33a6, 0x0000, 0x3166, 0x3126, 0x32c6, 0x0000, 0x3366, 0x31a6, 0x3284, 0x31a6, 0x3166, 0x3386, 0x0000, 0x3386, 0x3206, 0x31a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - @ "bonus stage." - .2byte 0x3146, 0x32e6, 0x32c6, 0x33a6, 0x3366, 0x0000, 0x3366, 0x3386, 0x3126, 0x31e6, 0x31a6, 0x39e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - .2byte 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + .ereaderText "You can select the" + .ereaderText "bonus stage." + .ereaderText "" - @ "Transmission failure." - .2byte 0x3046, 0x3346, 0x3126, 0x32c6, 0x3366, 0x32a6, 0x3222, 0x3366, 0x3366, 0x3222, 0x32e6, 0x32c6, 0x0000, 0x31c6, 0x3126, 0x3222, 0x3284, 0x33a6, 0x3346, 0x31a6, 0x39e4, 0x0000, 0x0000, 0x0000 - @ "Check the connection" - .2byte 0x2a26, 0x3206, 0x31a6, 0x3166, 0x3266, 0x0000, 0x3386, 0x3206, 0x31a6, 0x0000, 0x3166, 0x32e6, 0x32c6, 0x32c6, 0x31a6, 0x3166, 0x3386, 0x3222, 0x32e6, 0x32c6, 0x0000, 0x0000, 0x0000, 0x0000 - @ "and try once again." - .2byte 0x3126, 0x32c6, 0x3186, 0x0000, 0x3386, 0x3346, 0x3826, 0x0000, 0x32e6, 0x32c6, 0x3166, 0x31a6, 0x0000, 0x3126, 0x31e6, 0x3126, 0x3222, 0x32c6, 0x39e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + .ereaderText "Transmission failure." + .ereaderText "Check the connection" + .ereaderText "and try once again." gEReaderSpriteSets:: @ 0x086A54D8 .4byte gPokedexStartTransmissionPopupSpriteSet @@ -683,37 +656,13 @@ gPokedexAnimBaseTileNums:: @ 0x086A5DDA .2byte 576, 580, 582, 584 gPokedexCatchAnimTileOffsets:: @ 0x086A5DF2 -@ Declared [][20] but this run is 16 entries, not a whole number of -@ rows, so it is listed flat. - .2byte 0, 36, 0, 36, 0, 36, 0, 36, 72, 0, 0, 0, 0, 0, 0, 0 - -gPokedexAnimTileDeltas:: @ 0x086A5E12 - .2byte 0, 0, 0, 0 - .2byte 0, 9, 18, 27 - .2byte 36, 45, 54, 63 - .2byte 72, 81, 90, 99 - .2byte 108, 117, 0, 126 - .2byte 0, 0, 0, 0 - .2byte 0, 9, 18, 27 - .2byte 36, 27, 45, 54 - .2byte 63, 54, 72, 81 - .2byte 90, 81, 99, 108 - .2byte 117, 108, 0, 126 - .2byte 8, 8, 8, 8 - .2byte 8, 8, 8, 8 - .2byte 8, 8, 8, 0 - .2byte 0, 0, 0, 0 - .2byte 0, 0, 0, 0 - .2byte 9, 9, 9, 9 - .2byte 9, 9, 9, 9 - .2byte 9, 9, 9, 9 - .2byte 9, 9, 9, 30 - .2byte 0, 0, 0, 0 - .2byte 9, 9, 9, 9 - .2byte 9, 9, 9, 9 - .2byte 9, 9, 9, 9 - .2byte 9, 9, 9, 9 - .2byte 9, 9, 9, 30 +@ Declared [][20] + .2byte 0, 36, 0, 36, 0, 36, 0, 36, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + .2byte 0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108, 117, 0, 126, 0, 0, 0, 0 + .2byte 0, 9, 18, 27, 36, 27, 45, 54, 63, 54, 72, 81, 90, 81, 99, 108, 117, 108, 0, 126 + .2byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0 + .2byte 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 30, 0, 0, 0, 0 + .2byte 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 30 gPokedexHatchAnimTileOffsets:: @ 0x086A5EE2 .2byte 0, 36, 0, 36, 0, 36, 0, 36, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -721,18 +670,17 @@ gPokedexHatchAnimTileOffsets:: @ 0x086A5EE2 .2byte 18, 27, 36, 27, 18, 27, 36, 27, 18, 27, 36, 27, 45, 54, 63, 54, 45, 54, 63, 54, 45, 54, 63, 54, 72, 81, 90, 81, 72, 81, 90, 81, 72, 81, 90, 81, 99, 108, 117, 108, 99, 108, 117, 108, 99, 108, 117, 108, 126, 0, 0 gPokedexAnimFrameDurations:: @ 0x086A6014 -@ Declared [][51] but this run is 154 entries, not a whole number of -@ rows, so it is listed flat. - .2byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0 - .2byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - .2byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - .2byte 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 - .2byte 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 - .2byte 9, 9, 9, 9, 9, 9, 9, 40, 0, 0, 0, 0, 0, 0, 0, 0 - .2byte 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 - .2byte 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 - .2byte 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 - .2byte 9, 9, 9, 9, 9, 9, 40, 0, 0, 0 +@ Declared [][51] : 3 sets, and a spacer + .2byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + .2byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + + .2byte 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 + .2byte 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + + .2byte 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 + .2byte 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 40, 0, 0 + + .align 2 gPokedexSpriteSets:: @ 0x086A6148 .4byte gPokedexCursorHandSpriteSet @@ -6703,13 +6651,18 @@ gGulpinAnimData:: @ 0x086ADA6E .2byte 72, 4, 1, 5, 0 gSideBumperGfxFrameIndices:: @ 0x086ADEB0 - .2byte 0x00 - -gSideBumperAnimDurations:: @ 0x086ADEB2 -@ Declared [][2] but this run is 23 entries, not a whole number of -@ rows, so it is listed flat. - .2byte 200, 0, 28, 0, 44, 1, 10, 0, 10, 1, 10, 0, 40, 1, 10, 0 - .2byte 10, 1, 10, 0, 10, 0, 28 + .2byte 0, 200 + .2byte 0, 28 + .2byte 0, 44 + .2byte 1, 10 + .2byte 0, 10 + .2byte 1, 10 + .2byte 0, 40 + .2byte 1, 10 + .2byte 0, 10 + .2byte 1, 10 + .2byte 0, 10 + .2byte 0, 28 gCatchOverlayAnimData:: @ 0x086ADEE0 .2byte 0, 10 @@ -6765,14 +6718,18 @@ gTimerIndicatorFrames:: @ 0x086ADFD4 .2byte 0, 0, 3, 2, 1, 0, 0 gPikaSaverFrameData:: @ 0x086ADFE2 -@ Declared [][2] but this run is 83 entries, not a whole number of -@ rows, so it is listed flat. - .2byte 0, 3, 1, 3, 2, 3, 3, 3, 4, 7, 5, 7, 3, 49, 6, 5 - .2byte 7, 4, 8, 3, 9, 2, 10, 4, 11, 19, 12, 3, 13, 3, 14, 3 - .2byte 15, 3, 16, 3, 17, 3, 18, 3, 19, 3, 20, 3, 21, 3, 22, 3 - .2byte 23, 3, 24, 3, 25, 3, 26, 3, 27, 3, 28, 3, 29, 3, 30, 3 - .2byte 32, 9, 33, 4, 34, 3, 35, 1, 36, 1, 37, 1, 38, 1, 39, 1 - .2byte 40, 7, 0 +@ Declared [][2] but listed here in sets of 10. + .2byte 0, 3, 1, 3, 2, 3, 3, 3, 4, 7 + .2byte 5, 7, 3, 49, 6, 5, 7, 4, 8, 3 + .2byte 9, 2, 10, 4, 11, 19, 12, 3, 13, 3 + .2byte 14, 3, 15, 3, 16, 3, 17, 3, 18, 3 + .2byte 19, 3, 20, 3, 21, 3, 22, 3, 23, 3 + .2byte 24, 3, 25, 3, 26, 3, 27, 3, 28, 3 + .2byte 29, 3, 30, 3, 32, 9, 33, 4, 34, 3 + .2byte 35, 1, 36, 1, 37, 1, 38, 1, 39, 1 + .2byte 40, 7 + + .align 2 gFlyingCreatureCameraOffsets:: @ 0x086AE088 .2byte 42, 92 @@ -6993,12 +6950,12 @@ gSplashEffectPositions:: @ 0x086AE554 .2byte 159, 10 gSplashEffectTileIndices:: @ 0x086AE588 -.2byte 0 - -gSplashEffectFrameDurations:: @ 0x086AE58A -@ Declared [][2] but this run is 11 entries, not a whole number of -@ rows, so it is listed flat. - .2byte 1, 1, 1, 2, 2, 3, 0, 1, 1, 0, 0 + .2byte 0, 1 + .2byte 1, 1 + .2byte 2, 2 + .2byte 3, 0 + .2byte 1, 1 + .2byte 0, 0 gHoleAnimKeyframeData:: @ 0x086AE5A0 .2byte 0x0006, 0x0001; @@ -7501,19 +7458,19 @@ gScreenShakeOscillationValues:: @ 0x086AEF28 .2byte 1, 2, 0, -1, -2, 0, 2, 1, 0, -2, -1, 0 gGroudonFootstepShakePatterns:: @ 0x086AEF40 - .2byte 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - .2byte 2, 0, 65534, 2, 0, 65534, 2, 0, 65534, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - .2byte 3, 0, 65533, 3, 0, 65533, 3, 0, 65533, 2, 0, 65534, 2, 0, 65534, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 0, 0, 0, 0, 0, 0, 0 - .2byte 4, 0, 65532, 4, 0, 65532, 3, 0, 65533, 2, 0, 65534, 2, 0, 65534, 2, 0, 65534, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 0 - .2byte 6, 0, 65530, 5, 0, 65531, 4, 0, 65532, 3, 0, 65533, 2, 0, 65534, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 0, 0, 0, 0, 0, 0, 0 - .2byte 3, 0, 65533, 3, 0, 65533, 2, 0, 65534, 2, 0, 65534, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 0, 0, 0, 0, 0, 0, 0 + .2byte 1, 0, -1, 1, 0, -1, 1, 0, -1, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + .2byte 2, 0, -2, 2, 0, -2, 2, 0, -2, 1, 0, -1, 1, 0, -1, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + .2byte 3, 0, -3, 3, 0, -3, 3, 0, -3, 2, 0, -2, 2, 0, -2, 1, 0, -1, 1, 0, -1, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0 + .2byte 4, 0, -4, 4, 0, -4, 3, 0, -3, 2, 0, -2, 2, 0, -2, 2, 0, -2, 1, 0, -1, 1, 0, -1, 1, 0, -1, 1, 0, -1, 0 + .2byte 6, 0, -6, 5, 0, -5, 4, 0, -4, 3, 0, -3, 2, 0, -2, 1, 0, -1, 1, 0, -1, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0 + .2byte 3, 0, -3, 3, 0, -3, 2, 0, -2, 2, 0, -2, 1, 0, -1, 1, 0, -1, 1, 0, -1, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0 gGroudonCryShakePattern:: @ 0x086AF0B4 - .2byte 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 1 - .2byte 0, 65535, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 1, 0 - .2byte 65535, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535 - .2byte 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 1, 0, 65535, 1 - .2byte 0, 65535, 1, 0, 65535, 0 + .2byte 1, 0, -1, 1, 0, -1, 1, 0, -1, 1, 0, -1, 1, 0, -1, 1 + .2byte 0, -1, 1, 0, -1, 1, 0, -1, 1, 0, -1, 1, 0, -1, 1, 0 + .2byte -1, 1, 0, -1, 1, 0, -1, 1, 0, -1, 1, 0, -1, 1, 0, -1 + .2byte 1, 0, -1, 1, 0, -1, 1, 0, -1, 1, 0, -1, 1, 0, -1, 1 + .2byte 0, -1, 1, 0, -1, 0 gGroudonAnimFramesetTable:: @ 0x086AF140 @ 99 framesets of 2 u16: OAM animation frame index and how many game frames to @@ -8155,13 +8112,28 @@ gSphealFramesetData:: @ 0x086AFB2C .2byte 0, 3, 21 gSphealWhiscashAnimFrameset:: @ 0x086AFC16 -@ Declared [][4] but this run is 77 entries, not a whole number of -@ rows, so it is listed flat. - .2byte 10, 260, 0, 0, 4, 8, 0, 0, 3, 8, 0, 0, 2, 8, 0, 0 - .2byte 0, 21, 0, 0, 1, 21, 0, 0, 5, 2, 0, 0, 6, 6, 0, 0 - .2byte 7, 6, 0, 0, 7, 6, 1, -1, 7, 14, 2, -2, 7, 6, 1, -1 - .2byte 7, 6, 0, 0, 0, 9, 0, 0, 1, 9, 0, 0, 2, 8, 0, 0 - .2byte 3, 8, 0, 0, 4, 8, 0, 0, 10, 3, 0, 0, 0 +@ Declared [][4] + .2byte 10, 260, 0, 0 + .2byte 4, 8, 0, 0 + .2byte 3, 8, 0, 0 + .2byte 2, 8, 0, 0 + .2byte 0, 21, 0, 0 + .2byte 1, 21, 0, 0 + .2byte 5, 2, 0, 0 + .2byte 6, 6, 0, 0 + .2byte 7, 6, 0, 0 + .2byte 7, 6, 1, -1 + .2byte 7, 14, 2, -2 + .2byte 7, 6, 1, -1 + .2byte 7, 6, 0, 0 + .2byte 0, 9, 0, 0 + .2byte 1, 9, 0, 0 + .2byte 2, 8, 0, 0 + .2byte 3, 8, 0, 0 + .2byte 4, 8, 0, 0 + .2byte 10, 3, 0, 0 + + .align 2 gBoardCollisionDataSets:: @ 0x086AFCB0 @ Note: Only the layer 0 (1st column) from this data is referenced in code. @@ -11564,12 +11536,12 @@ gHatchCaveOamFramesets:: @ 0x086B4D4E gCatchTileParticleOamAttributes:: @ 0x086B4E3E -@ Declared [][3] but this run is 2 entries, not a whole number of -@ rows, so it is listed flat. - .2byte 0, 49152 - -gUnknown_086B4E42:: @ 0x086B4E42 - .incbin "baserom.gba", 0x6B4E42, 0x20 + packed_sprite_oam x=0x0, y=0x0, spriteSize=SPRITE_SIZE_64x64, tileNum=0x2C0, paletteNum=0xE + packed_sprite_oam x=0x0, y=0x0, spriteSize=SPRITE_SIZE_64x64, tileNum=0x300, paletteNum=0xE + packed_sprite_oam x=0x0, y=0x0, spriteSize=SPRITE_SIZE_64x64, tileNum=0x340, paletteNum=0xE + packed_sprite_oam x=0x0, y=0x0, spriteSize=SPRITE_SIZE_64x64, tileNum=0x380, paletteNum=0xE + packed_sprite_oam x=0x0, y=0x0, spriteSize=SPRITE_SIZE_64x64, tileNum=0x340, paletteNum=0xE + packed_sprite_oam x=0x0, y=0x0, spriteSize=SPRITE_SIZE_64x64, tileNum=0x300, paletteNum=0xE gCatchTile_BurstRevealOamFramesets1:: @ 0x086B4E62 packed_sprite_oam x=0x18, y=0x18, spriteSize=SPRITE_SIZE_16x16, tileNum=0x2c8, paletteNum=0xe @@ -11811,12 +11783,14 @@ gAreaRouletteOamFramesets:: @ 0x086B51CE gHatchAnimOamAttributes:: @ 0x086B53B4 -@ Declared [][3] but this run is 2 entries, not a whole number of -@ rows, so it is listed flat. - .2byte 33020, 33276 - -gUnknown_086B53B8:: @ 0x086B53B8 - .incbin "baserom.gba", 0x6B53B8, 0x2C + packed_sprite_oam x=-0x4, y=-0x4, spriteSize=SPRITE_SIZE_16x32, tileNum=0x304, paletteNum=0xE + packed_sprite_oam x=-0x4, y=-0x4, spriteSize=SPRITE_SIZE_16x32, tileNum=0x30C, paletteNum=0xE + packed_sprite_oam x=-0x4, y=-0x4, spriteSize=SPRITE_SIZE_16x32, tileNum=0x314, paletteNum=0xE + packed_sprite_oam x=-0x4, y=-0x4, spriteSize=SPRITE_SIZE_16x32, tileNum=0x31C, paletteNum=0xE + packed_sprite_oam x=0x0, y=0x0, spriteSize=SPRITE_SIZE_8x8, tileNum=0x324, paletteNum=0xE + packed_sprite_oam x=0x0, y=0x0, spriteSize=SPRITE_SIZE_8x8, tileNum=0x325, paletteNum=0xE + packed_sprite_oam x=0x0, y=0x0, spriteSize=SPRITE_SIZE_8x8, tileNum=0x326, paletteNum=0xE + packed_sprite_oam x=0x0, y=0x0, spriteSize=SPRITE_SIZE_8x8, tileNum=0x3C0, paletteNum=0xE gCatchTile_SequentialBreakSpritesheetOam:: @ 0x086B53E4 packed_sprite_oam x=-0x8, y=-0x8, spriteSize=SPRITE_SIZE_32x32, tileNum=0x2c0, paletteNum=0xe diff --git a/graphics/stage/main/hatch_mach_hole_shape.json b/graphics/stage/main/hatch_mach_hole_shape.json new file mode 100644 index 00000000..d569bddf --- /dev/null +++ b/graphics/stage/main/hatch_mach_hole_shape.json @@ -0,0 +1,70 @@ +{ + "kind": "oam-shape", + "version": 1, + "tilecount": 34, + "pngsize": "8x5", + "pieces": [ + { + "pos": "0,0", + "size": "4x1" + }, + { + "pos": "4,0", + "size": "4x1" + }, + { + "pos": "0,1", + "size": "4x1" + }, + { + "pos": "4,1", + "size": "4x1" + }, + { + "pos": "1,2", + "size": "4x1" + }, + { + "pos": "5,2", + "size": "2x1" + }, + { + "pos": "1,3", + "size": "4x1" + }, + { + "pos": "5,3", + "size": "2x1" + }, + { + "pos": "1,4", + "size": "4x1" + }, + { + "pos": "5,4", + "size": "2x1" + }, + { + "pos": "0,2", + "size": "1x2", + "spacer": true + }, + { + "pos": "7,2", + "size": "1x2", + "spacer": true + }, + + { + "pos": "0,4", + "size": "1x1", + "spacer": true + }, + { + "pos": "7,4", + "size": "1x1", + "spacer": true + }, + + ] +} \ No newline at end of file diff --git a/graphics/stage/main/hole_indicator.png b/graphics/stage/main/hole_indicator.png index d7a83b07..a5fbb320 100644 Binary files a/graphics/stage/main/hole_indicator.png and b/graphics/stage/main/hole_indicator.png differ diff --git a/graphics/stage/main/main_stage_gfx.json b/graphics/stage/main/main_stage_gfx.json index 79bc736b..d6ac83d4 100644 --- a/graphics/stage/main/main_stage_gfx.json +++ b/graphics/stage/main/main_stage_gfx.json @@ -334,6 +334,12 @@ "gfx_filename": "egg", "palette": "bonus_stage_obj.gbapal", "palbank": 2 + }, + { + "gfx_filename": "hole_indicator", + "oamshape": "hatch_mach_hole_shape.json", + "width": 32, + "palette": "hole_indicator.gbapal" } ] } diff --git a/graphics/stage/ruby/ruby_gfx.json b/graphics/stage/ruby/ruby_gfx.json index 94ec805f..596e6ac1 100644 --- a/graphics/stage/ruby/ruby_gfx.json +++ b/graphics/stage/ruby/ruby_gfx.json @@ -422,6 +422,11 @@ "oam": true, "mheight": 9, "mwidth": 30 + }, + { + "gfx_filename": "travel_volbeat", + "oamshape": "../main/travel_painter_shape.json", + "width": 102 } ] } \ No newline at end of file diff --git a/graphics/stage/sapphire/sapphire_gfx.json b/graphics/stage/sapphire/sapphire_gfx.json index 8c98f74f..700d815f 100644 --- a/graphics/stage/sapphire/sapphire_gfx.json +++ b/graphics/stage/sapphire/sapphire_gfx.json @@ -398,6 +398,21 @@ { "gfx_filename": "shop_sign_tiles", "oamshape": "shop_sign_shape.json" + }, + { + "gfx_filename": "travel_illumise", + "oamshape": "../main/travel_painter_shape.json", + "width": 102 + }, + { + "gfx_filename": "bumper_minun", + "oamshape": "bumper_shape.json", + "width": 60 + }, + { + "gfx_filename": "bumper_plusle", + "oamshape": "bumper_shape.json", + "width": 60 } ] } \ No newline at end of file diff --git a/graphics_rules.mk b/graphics_rules.mk index 2ac9a074..35b40123 100644 --- a/graphics_rules.mk +++ b/graphics_rules.mk @@ -15,23 +15,3 @@ graphics/options/sprites.4bpp: graphics/options/sprites.png graphics/pokedex/text_glyphs.4bpp: graphics/pokedex/text_glyphs.png $(GFX) $< $@ -num_tiles 513 - -# Travel-cutscene painter mons. Each frame is 4 OAM pieces that tile into a 6x6 -# block, so -oamshape lays the 17 frames out as the sprite instead of the 1D -# tile order the hardware wants. -PAINTER_SHAPE := graphics/stage/main/travel_painter_shape.json -graphics/stage/ruby/travel_volbeat.4bpp: graphics/stage/ruby/travel_volbeat.png $(PAINTER_SHAPE) - $(GFX) $< $@ -oamshape $(PAINTER_SHAPE) -mwidth 6 -mheight 6 - -graphics/stage/sapphire/travel_illumise.4bpp: graphics/stage/sapphire/travel_illumise.png $(PAINTER_SHAPE) - $(GFX) $< $@ -oamshape $(PAINTER_SHAPE) -mwidth 6 -mheight 6 - -# Sapphire Plusle/Minun bumpers. Each frame is a 32x32 over a 32x16, which tiles -# into a 4x6 block, so -oamshape lays the frames out as the sprite. -BUMPER_SHAPE := graphics/stage/sapphire/bumper_shape.json -graphics/stage/sapphire/bumper_minun.4bpp: graphics/stage/sapphire/bumper_minun.png $(BUMPER_SHAPE) - $(GFX) $< $@ -oamshape $(BUMPER_SHAPE) -mwidth 4 -mheight 6 - -graphics/stage/sapphire/bumper_plusle.4bpp: graphics/stage/sapphire/bumper_plusle.png $(BUMPER_SHAPE) - $(GFX) $< $@ -oamshape $(BUMPER_SHAPE) -mwidth 4 -mheight 6 - diff --git a/include/constants/global.h b/include/constants/global.h index eecb6420..f3f0c6e2 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -18,5 +18,6 @@ #define POKEMON_HEIGHT_WEIGHT_TEXT_LENGTH 9 #define POKEMON_CATEGORY_NAME_LENGTH 11 #define POKEMON_DEX_LINE_LENGTH 42 +#define EREADER_LINE_LENGTH 24 #endif // GUARD_CONSTANTS_GLOBAL_H diff --git a/src/groudon_process3.c b/src/groudon_process3.c index b46eede3..fe6c1dd1 100644 --- a/src/groudon_process3.c +++ b/src/groudon_process3.c @@ -18,8 +18,8 @@ extern struct SongHeader se_groudon_fire_ring; extern struct SongHeader se_groudon_fire_grab; extern const s16 gShockwaveSplashDistanceThresholds[]; extern const s16 gScreenShakeOscillationValues[]; -extern const u16 gGroudonFootstepShakePatterns[][31]; -extern const u16 gGroudonCryShakePattern[]; +extern const s16 gGroudonFootstepShakePatterns[][31]; +extern const s16 gGroudonCryShakePattern[]; extern const u16 gGroudonAnimFramesetTable[][2]; extern const struct Vector16 gGroudonFirePillarBasePositions[]; extern const u16 gGroudonFirePillarAnimFrameset[][2]; diff --git a/src/pokedex.c b/src/pokedex.c index b3ff4bef..d3b95edc 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -76,7 +76,6 @@ extern const u16 gPokedexCatchAnimTileOffsets[][20]; extern const s16 gPokedexCatchAnimIndices[]; extern const u16 gPokedexHatchAnimTileOffsets[][51]; extern const s16 gPokedexAnimFrameDurations[][51]; -extern const u16 gPokedexAnimTileDeltas[][4]; extern s16 gPokedexListNameVramOffsets[]; enum PokedexPopupType { @@ -1290,7 +1289,7 @@ static void RenderLinkGraphics(void) { groupOam = &group4->oam[i]; gOamBuffer[groupOam->oamId].tileNum = gPokedexAnimBaseTileNums[1][i] + - gPokedexAnimTileDeltas[1][gPokedexSpriteAnimFrame]; + gPokedexCatchAnimTileOffsets[1][gPokedexSpriteAnimFrame]; gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group4->baseX; gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group4->baseY; } diff --git a/src/ruby_trigger_targets.c b/src/ruby_trigger_targets.c index 14ae7b7c..ced6d680 100644 --- a/src/ruby_trigger_targets.c +++ b/src/ruby_trigger_targets.c @@ -5,8 +5,7 @@ #include "constants/board/ruby_states.h" extern const u8 gSideBumperGfx[][0x100]; -extern const s16 gSideBumperGfxFrameIndices[][2]; -extern const u16 gSideBumperAnimDurations[][2]; +extern const u16 gSideBumperGfxFrameIndices[][2]; extern const s16 gGulpinAnimData[][5]; extern const u16 gGulpinOamData[146][18]; @@ -334,7 +333,7 @@ void UpdateRubySideBumperAnimation(void) { if (gCurrentPinballGame->linooneSideBumperExtensionsPending[i] > 0) { - if (gSideBumperAnimDurations[gCurrentPinballGame->linooneSideBumperAnimPhase[i]][0] > gCurrentPinballGame->linooneSideBumperAnimTimer[i]) + if (gSideBumperGfxFrameIndices[gCurrentPinballGame->linooneSideBumperAnimPhase[i]][1] > gCurrentPinballGame->linooneSideBumperAnimTimer[i]) { gCurrentPinballGame->linooneSideBumperAnimTimer[i]++; } diff --git a/src/sapphire_seedot_egg_shop.c b/src/sapphire_seedot_egg_shop.c index 03f24279..58beab5a 100644 --- a/src/sapphire_seedot_egg_shop.c +++ b/src/sapphire_seedot_egg_shop.c @@ -19,7 +19,6 @@ extern const u8 gHoleIndicatorTileGfx[][0x440]; extern const u8 gSplashEffectTileGfx[][0x100]; extern struct Vector16 gSplashEffectPositions[]; -extern const s16 gSplashEffectFrameDurations[][2]; extern const s16 gSplashEffectTileIndices[][2]; extern const u8 gSapphireShopSignPalettes[][0x20]; extern const u8 gSapphireShopSignTileGfx[][0x480]; @@ -731,7 +730,7 @@ void UpdateSapphireEggMachine(void) group = &gMain.spriteGroups[SG_SAPPHIRE_HATCH_MACHINE_LIGHT_SPARK_FX_BASE + i]; if (group->active) { - if (gSplashEffectFrameDurations[gCurrentPinballGame->splashEffectFrameIndex[i]][0] > gCurrentPinballGame->splashEffectFrameTimer[i]) + if (gSplashEffectTileIndices[gCurrentPinballGame->splashEffectFrameIndex[i]][1] > gCurrentPinballGame->splashEffectFrameTimer[i]) { gCurrentPinballGame->splashEffectFrameTimer[i]++; } diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp index d6831b69..259057f4 100755 --- a/tools/preproc/asm_file.cpp +++ b/tools/preproc/asm_file.cpp @@ -177,6 +177,8 @@ Directive AsmFile::GetDirective() return Directive::DexCategory; else if (CheckForDirective(".dexText")) return Directive::DexText; + else if (CheckForDirective(".ereaderText")) + return Directive::EreaderText; else return Directive::Unknown; } @@ -375,40 +377,81 @@ int AsmFile::ReadBraille(unsigned char* s) return length; } -int AsmFile::ReadDexString(unsigned short* s, uint8_t targetLength, bool padLeft = false) +int AsmFile::ReadDexString(unsigned short* s, uint8_t targetLength, bool padLeft = false, bool fixedWidthEncoding = false) { // Sample dexEncoding map - static std::map dexEncoding = + static std::map dexEncoding; + if (!fixedWidthEncoding) { - { " ", 0x0000 }, - { "-", 0x2826 }, { "♀", 0x2846 }, { "♂", 0x2866 }, - { "0", 0x2886 }, { "1", 0x28A3 }, { "2", 0x28C6 }, { "3", 0x28E6 }, - { "4", 0x2906 }, { "5", 0x2926 }, { "6", 0x2946 }, { "7", 0x2966 }, - { "8", 0x2986 }, { "9", 0x29A6 }, { "—", 0x29C6 }, + dexEncoding = + { + { " ", 0x0000 }, + { "-", 0x2826 }, { "♀", 0x2846 }, { "♂", 0x2866 }, + { "0", 0x2886 }, { "1", 0x28A3 }, { "2", 0x28C6 }, { "3", 0x28E6 }, + { "4", 0x2906 }, { "5", 0x2926 }, { "6", 0x2946 }, { "7", 0x2966 }, + { "8", 0x2986 }, { "9", 0x29A6 }, { "—", 0x29C6 }, - { "A", 0x29E6 }, { "B", 0x2A06 }, { "C", 0x2A26 }, { "D", 0x2A46 }, - { "E", 0x2A66 }, { "F", 0x2A86 }, { "G", 0x2AA6 }, { "H", 0x2AC6 }, - { "I", 0x2AE2 }, { "J", 0x2B06 }, { "K", 0x2B26 }, { "L", 0x2B46 }, - { "M", 0x2B66 }, { "N", 0x2B86 }, { "O", 0x2BA6 }, { "P", 0x2BC6 }, - { "Q", 0x2BE6 }, { "R", 0x3006 }, { "S", 0x3026 }, { "T", 0x3046 }, - { "U", 0x3066 }, { "V", 0x3086 }, { "W", 0x30A6 }, { "X", 0x30C6 }, - { "Y", 0x30E6 }, { "Z", 0x3106 }, + { "A", 0x29E6 }, { "B", 0x2A06 }, { "C", 0x2A26 }, { "D", 0x2A46 }, + { "E", 0x2A66 }, { "F", 0x2A86 }, { "G", 0x2AA6 }, { "H", 0x2AC6 }, + { "I", 0x2AE2 }, { "J", 0x2B06 }, { "K", 0x2B26 }, { "L", 0x2B46 }, + { "M", 0x2B66 }, { "N", 0x2B86 }, { "O", 0x2BA6 }, { "P", 0x2BC6 }, + { "Q", 0x2BE6 }, { "R", 0x3006 }, { "S", 0x3026 }, { "T", 0x3046 }, + { "U", 0x3066 }, { "V", 0x3086 }, { "W", 0x30A6 }, { "X", 0x30C6 }, + { "Y", 0x30E6 }, { "Z", 0x3106 }, - { "a", 0x3126 }, { "b", 0x3146 }, { "c", 0x3166 }, { "d", 0x3186 }, - { "e", 0x31A6 }, { "f", 0x31C6 }, { "g", 0x31E6 }, { "h", 0x3206 }, - { "i", 0x3222 }, { "j", 0x3246 }, { "k", 0x3266 }, { "l", 0x3283 }, - { "m", 0x32A6 }, { "n", 0x32C5 }, { "o", 0x32E6 }, { "p", 0x3306 }, - { "q", 0x3326 }, { "r", 0x3345 }, { "s", 0x3366 }, { "t", 0x3386 }, - { "u", 0x33A6 }, { "v", 0x33C6 }, { "w", 0x33E6 }, { "x", 0x3806 }, - { "y", 0x3826 }, { "z", 0x3846 }, + { "a", 0x3126 }, { "b", 0x3146 }, { "c", 0x3166 }, { "d", 0x3186 }, + { "e", 0x31A6 }, { "f", 0x31C6 }, { "g", 0x31E6 }, { "h", 0x3206 }, + { "i", 0x3222 }, { "j", 0x3246 }, { "k", 0x3266 }, { "l", 0x3283 }, + { "m", 0x32A6 }, { "n", 0x32C5 }, { "o", 0x32E6 }, { "p", 0x3306 }, + { "q", 0x3326 }, { "r", 0x3345 }, { "s", 0x3366 }, { "t", 0x3386 }, + { "u", 0x33A6 }, { "v", 0x33C6 }, { "w", 0x33E6 }, { "x", 0x3806 }, + { "y", 0x3826 }, { "z", 0x3846 }, - { "ˎ", 0x3866 }, { "˳", 0x3886 }, { "╔", 0x38A6 }, { "╝", 0x38C6 }, - { "×", 0x38E6 }, { "“", 0x3926 }, { "”", 0x3906 }, { "!", 0x3942 }, - { "?", 0x3968 }, { ":", 0x3984 }, { ";", 0x39A4 }, { ",", 0x39C4 }, - { ".", 0x39E4 }, { "•", 0x3A04 }, { "(", 0x3A26 }, { ")", 0x3A46 }, - { "~", 0x3A68 }, { "▼", 0x3A88 }, { "é", 0x3AA6 }, { "`", 0x3AC3 }, - { "´", 0x3AE4 }, { "#", 0x3B06 }, - }; + { "ˎ", 0x3866 }, { "˳", 0x3886 }, { "╔", 0x38A6 }, { "╝", 0x38C6 }, + { "×", 0x38E6 }, { "“", 0x3926 }, { "”", 0x3906 }, { "!", 0x3942 }, + { "?", 0x3968 }, { ":", 0x3984 }, { ";", 0x39A4 }, { ",", 0x39C4 }, + { ".", 0x39E4 }, { "•", 0x3A04 }, { "(", 0x3A26 }, { ")", 0x3A46 }, + { "~", 0x3A68 }, { "▼", 0x3A88 }, { "é", 0x3AA6 }, { "`", 0x3AC3 }, + { "´", 0x3AE4 }, { "#", 0x3B06 }, + }; + } + else { + // a handful of characters now take 6 px for their ending, rather flexing + dexEncoding = + { + { " ", 0x0000 }, + { "-", 0x2826 }, { "♀", 0x2846 }, { "♂", 0x2866 }, + { "0", 0x2886 }, { "1", 0x28A3 }, { "2", 0x28C6 }, { "3", 0x28E6 }, + { "4", 0x2906 }, { "5", 0x2926 }, { "6", 0x2946 }, { "7", 0x2966 }, + { "8", 0x2986 }, { "9", 0x29A6 }, { "—", 0x29C6 }, + + { "A", 0x29E6 }, { "B", 0x2A06 }, { "C", 0x2A26 }, { "D", 0x2A46 }, + { "E", 0x2A66 }, { "F", 0x2A86 }, { "G", 0x2AA6 }, { "H", 0x2AC6 }, + { "I", 0x2AE2 }, { "J", 0x2B06 }, { "K", 0x2B26 }, { "L", 0x2B46 }, + { "M", 0x2B66 }, { "N", 0x2B86 }, { "O", 0x2BA6 }, { "P", 0x2BC6 }, + { "Q", 0x2BE6 }, { "R", 0x3006 }, { "S", 0x3026 }, { "T", 0x3046 }, + { "U", 0x3066 }, { "V", 0x3086 }, { "W", 0x30A6 }, { "X", 0x30C6 }, + { "Y", 0x30E6 }, { "Z", 0x3106 }, + + { "a", 0x3126 }, { "b", 0x3146 }, { "c", 0x3166 }, { "d", 0x3186 }, + { "e", 0x31A6 }, { "f", 0x31C6 }, { "g", 0x31E6 }, { "h", 0x3206 }, + { "i", 0x3222 }, { "j", 0x3246 }, { "k", 0x3266 }, { "l", 0x3284 }, + { "m", 0x32A6 }, { "n", 0x32C6 }, { "o", 0x32E6 }, { "p", 0x3306 }, + { "q", 0x3326 }, { "r", 0x3346 }, { "s", 0x3366 }, { "t", 0x3386 }, + { "u", 0x33A6 }, { "v", 0x33C6 }, { "w", 0x33E6 }, { "x", 0x3806 }, + { "y", 0x3826 }, { "z", 0x3846 }, + + { "ˎ", 0x3866 }, { "˳", 0x3886 }, { "╔", 0x38A6 }, { "╝", 0x38C6 }, + { "×", 0x38E6 }, { "“", 0x3926 }, { "”", 0x3906 }, { "!", 0x3946 }, + { "?", 0x3968 }, { ":", 0x3984 }, { ";", 0x39A4 }, { ",", 0x39C4 }, + { ".", 0x39E4 }, { "•", 0x3A04 }, { "(", 0x3A26 }, { ")", 0x3A46 }, + { "~", 0x3A68 }, { "▼", 0x3A88 }, { "é", 0x3AA6 }, { "`", 0x3AC4 }, + { "´", 0x3AE4 }, { "#", 0x3B06 }, + + //funky n, not matching the normal spacer px... + {"ņ", 0x32C5} + }; + } SkipWhitespace(); diff --git a/tools/preproc/asm_file.h b/tools/preproc/asm_file.h index acf7dd1c..84347c60 100755 --- a/tools/preproc/asm_file.h +++ b/tools/preproc/asm_file.h @@ -34,6 +34,7 @@ enum class Directive DexName, DexCategory, DexText, + EreaderText, Unknown }; @@ -49,7 +50,7 @@ public: std::string ReadPath(); int ReadString(unsigned char* s); int ReadBraille(unsigned char* s); - int ReadDexString(unsigned short* s, uint8_t targetLength, bool padLeft); + int ReadDexString(unsigned short* s, uint8_t targetLength, bool padLeft, bool fixedWidthEncoding); bool IsAtEnd(); void OutputLine(); void OutputLocation(); diff --git a/tools/preproc/preproc.cpp b/tools/preproc/preproc.cpp index 7ff7836d..c612002c 100755 --- a/tools/preproc/preproc.cpp +++ b/tools/preproc/preproc.cpp @@ -102,19 +102,25 @@ void PreprocAsmFile(std::string filename) } case Directive::DexName:{ unsigned short s[POKEMON_NAME_LENGTH]; - int length = stack.top().ReadDexString(s, POKEMON_NAME_LENGTH, false); + int length = stack.top().ReadDexString(s, POKEMON_NAME_LENGTH, false, false); PrintAsmHalfwords(s, length); break; } case Directive::DexCategory:{ unsigned short s[POKEMON_CATEGORY_NAME_LENGTH]; - int length = stack.top().ReadDexString(s, POKEMON_CATEGORY_NAME_LENGTH, true); + int length = stack.top().ReadDexString(s, POKEMON_CATEGORY_NAME_LENGTH, true, false); PrintAsmHalfwords(s, length); break; } case Directive::DexText:{ unsigned short s[POKEMON_DEX_LINE_LENGTH]; - int length = stack.top().ReadDexString(s, POKEMON_DEX_LINE_LENGTH, false); + int length = stack.top().ReadDexString(s, POKEMON_DEX_LINE_LENGTH, false, false); + PrintAsmHalfwords(s, length); + break; + } + case Directive::EreaderText:{ + unsigned short s[EREADER_LINE_LENGTH]; + int length = stack.top().ReadDexString(s, EREADER_LINE_LENGTH, false, true); PrintAsmHalfwords(s, length); break; }