diff options
Diffstat (limited to 'src/starter_choose.c')
-rw-r--r-- | src/starter_choose.c | 345 |
1 files changed, 313 insertions, 32 deletions
diff --git a/src/starter_choose.c b/src/starter_choose.c index 80d909c26..179d9a05a 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -1,26 +1,27 @@ #include "global.h" -#include "starter_choose.h" -#include "palette.h" -#include "sprite.h" -#include "pokemon.h" -#include "task.h" #include "bg.h" +#include "data2.h" +#include "decompress.h" +#include "event_data.h" #include "gpu_regs.h" +#include "international_string_util.h" #include "main.h" -#include "window.h" -#include "text.h" -#include "text_window.h" -#include "decompress.h" #include "menu.h" -#include "sound.h" -#include "constants/songs.h" -#include "event_data.h" +#include "palette.h" #include "pokedex.h" -#include "data2.h" -#include "international_string_util.h" -#include "trig.h" +#include "pokemon.h" #include "scanline_effect.h" +#include "sound.h" +#include "sprite.h" +#include "starter_choose.h" +#include "task.h" +#include "text.h" +#include "text_window.h" #include "trainer_pokemon_sprites.h" +#include "trig.h" +#include "window.h" +#include "constants/songs.h" +#include "constants/species.h" #define STARTER_MON_COUNT 3 @@ -32,23 +33,6 @@ extern const u8 gText_BirchInTrouble[]; extern const u8 gText_ConfirmStarterChoice[]; -extern const u16 sStarterMon[STARTER_MON_COUNT]; -extern const struct BgTemplate gUnknown_085B1E00[3]; -extern const struct WindowTemplate gUnknown_085B1DCC[]; -extern const struct WindowTemplate gUnknown_085B1DDC; -extern const struct CompressedSpriteSheet gUnknown_085B1ED8[]; -extern const struct CompressedSpriteSheet gUnknown_085B1EE8[]; -extern const struct SpritePalette gUnknown_085B1EF8[]; -extern const struct SpriteTemplate sSpriteTemplate_PokeBall; -extern const struct SpriteTemplate sSpriteTemplate_Hand; -extern const struct SpriteTemplate gUnknown_085B1F40; -extern const union AffineAnimCmd *const gUnknown_085B1ED0; -extern const u8 sPokeballCoords[STARTER_MON_COUNT][2]; -extern const struct WindowTemplate gUnknown_085B1DE4; -extern const u8 gStarterChoose_LabelCoords[][2]; -extern const u8 gUnknown_085B1E0C[]; -extern const u8 gUnknown_085B1E28[][2]; - // this file's functions static void MainCallback2_StarterChoose(void); static void sub_8134604(void); @@ -62,10 +46,307 @@ static void Task_MoveStarterChooseCursor(u8 taskId); static void sub_8134668(u8 taskId); static void CreateStarterPokemonLabel(u8 selection); static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y); +void sub_81346DC(struct Sprite *sprite); +void sub_813473C(struct Sprite *sprite); void StarterPokemonSpriteCallback(struct Sprite *sprite); static IWRAM_DATA u16 sStarterChooseWindowId; +// .rodata +const u16 gBirchBagGrassPal[][16] = +{ + INCBIN_U16("graphics/misc/birch_bag.gbapal"), + INCBIN_U16("graphics/misc/birch_grass.gbapal"), +}; + +const u16 gBirchBallarrow_Pal[] = INCBIN_U16("graphics/misc/birch_ballarrow.gbapal"); + +const u16 gBirchCircle_Pal[] = INCBIN_U16("graphics/misc/birch_circle.gbapal"); + +const u8 gBirchBagTilemap[] = INCBIN_U8("graphics/misc/birch_bag_map.bin.lz"); + +const u8 gBirchGrassTilemap[] = INCBIN_U8("graphics/misc/birch_grass_map.bin.lz"); + +const u8 gBirchHelpGfx[] = INCBIN_U8("graphics/misc/birch_help.4bpp.lz"); + +const u8 gUnknown_085B18AC[] = INCBIN_U8("graphics/misc/birch_ballarrow.4bpp.lz"); + +const u8 gUnknown_085B1BCC[] = INCBIN_U8("graphics/misc/birch_circle.4bpp.lz"); + +static const struct WindowTemplate gUnknown_085B1DCC[] = +{ + { + .priority = 0, + .tilemapLeft = 3, + .tilemapTop = 15, + .width = 24, + .height = 4, + .paletteNum = 14, + .baseBlock = 0x0200 + }, + DUMMY_WIN_TEMPLATE, +}; + +static const struct WindowTemplate gUnknown_085B1DDC = +{ + .priority = 0, + .tilemapLeft = 24, + .tilemapTop = 9, + .width = 5, + .height = 4, + .paletteNum = 14, + .baseBlock = 0x0260 +}; + +static const struct WindowTemplate gUnknown_085B1DE4 = +{ + .priority = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 13, + .height = 4, + .paletteNum = 14, + .baseBlock = 0x0274 +}; + +static const u8 sPokeballCoords[STARTER_MON_COUNT][2] = +{ + {0x3c, 0x40}, + {0x78, 0x58}, + {0xb4, 0x40}, +}; + +static const u8 gStarterChoose_LabelCoords[][2] = +{ + {0x00, 0x09}, + {0x10, 0x0a}, + {0x08, 0x04}, +}; + +static const u16 sStarterMon[STARTER_MON_COUNT] = +{ + SPECIES_TREECKO, + SPECIES_TORCHIC, + SPECIES_MUDKIP, +}; + +static const struct BgTemplate gUnknown_085B1E00[3] = +{ + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 7, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 6, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, +}; + +static const u8 gUnknown_085B1E0C[] = {0x00, 0x01, 0x03}; + +static const struct OamData gOamData_85B1E10 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct OamData gOamData_85B1E18 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct OamData gOamData_85B1E20 = +{ + .y = 160, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const u8 gUnknown_085B1E28[][2] = +{ + {0x3c, 0x20}, + {0x78, 0x38}, + {0xb4, 0x20}, +}; + +static const union AnimCmd gSpriteAnim_85B1E30[] = +{ + ANIMCMD_FRAME(48, 30), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_85B1E38[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_85B1E40[] = +{ + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(0, 32), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd gSpriteAnim_85B1E88[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; + +static const union AnimCmd * const gSpriteAnimTable_85B1E90[] = +{ + gSpriteAnim_85B1E30, +}; + +static const union AnimCmd * const gSpriteAnimTable_85B1E94[] = +{ + gSpriteAnim_85B1E38, + gSpriteAnim_85B1E40, +}; + +static const union AnimCmd * const gSpriteAnimTable_85B1E9C[] = +{ + gSpriteAnim_85B1E88, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_85B1EA0[] = +{ + AFFINEANIMCMD_FRAME(16, 16, 0, 0), + AFFINEANIMCMD_FRAME(16, 16, 0, 15), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_85B1EB8[] = +{ + AFFINEANIMCMD_FRAME(20, 20, 0, 0), + AFFINEANIMCMD_FRAME(20, 20, 0, 15), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd * const gUnknown_085B1ED0 = {gSpriteAffineAnim_85B1EA0}; +static const union AffineAnimCmd * const gSpriteAffineAnimTable_85B1ED4[] = {gSpriteAffineAnim_85B1EB8}; + +static const struct CompressedSpriteSheet gUnknown_085B1ED8[] = +{ + gUnknown_085B18AC, 0x0800, 0x1000, + NULL, +}; + +static const struct CompressedSpriteSheet gUnknown_085B1EE8[] = +{ + gUnknown_085B1BCC, 0x0800, 0x1001, + NULL, +}; + +static const struct SpritePalette gUnknown_085B1EF8[] = +{ + gBirchBallarrow_Pal, 0x1000, + gBirchCircle_Pal, 0x1001, + NULL, +}; + +static const struct SpriteTemplate sSpriteTemplate_Hand = +{ + .tileTag = 0x1000, + .paletteTag = 0x1000, + .oam = &gOamData_85B1E10, + .anims = gSpriteAnimTable_85B1E90, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81346DC +}; + +static const struct SpriteTemplate sSpriteTemplate_PokeBall = +{ + .tileTag = 0x1000, + .paletteTag = 0x1000, + .oam = &gOamData_85B1E18, + .anims = gSpriteAnimTable_85B1E94, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813473C +}; + +static const struct SpriteTemplate gUnknown_085B1F40 = +{ + .tileTag = 0x1001, + .paletteTag = 0x1001, + .oam = &gOamData_85B1E20, + .anims = gSpriteAnimTable_85B1E9C, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_85B1ED4, + .callback = StarterPokemonSpriteCallback +}; + +// .text u16 GetStarterPokemon(u16 chosenStarterId) { if (chosenStarterId > STARTER_MON_COUNT) |