diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_pyramid_bag.c | 64 | ||||
-rw-r--r-- | src/field_player_avatar.c | 190 | ||||
-rw-r--r-- | src/starter_choose.c | 345 |
3 files changed, 558 insertions, 41 deletions
diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index 6629e6a0a..bc2821d16 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -42,6 +42,7 @@ extern const u8 gUnknown_08D9ADD0[]; extern const u8 gUnknown_08D9AE04[]; extern const u8 gUnknown_08D9AF44[]; extern const u16 gUnknown_0860F074[]; +extern const u8 gBattleFrontierGfx_PyramidBag[]; // This file's functions. static void Task_HandlePyramidBagInput(u8 taskId); @@ -281,8 +282,67 @@ static const struct WindowTemplate gUnknown_0861F350[] = }, }; -extern const struct CompressedSpriteSheet gUnknown_0861F3CC; -extern const struct SpriteTemplate gUnknown_0861F3D4; +static const struct OamData gOamData_861F378 = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd gSpriteAnim_861F380[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_END, +}; + +static const union AnimCmd * const gSpriteAnimTable_861F388[] = +{ + gSpriteAnim_861F380, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_861F38C[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_861F39C[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 254, 2), + AFFINEANIMCMD_FRAME(0, 0, 2, 4), + AFFINEANIMCMD_FRAME(0, 0, 254, 4), + AFFINEANIMCMD_FRAME(0, 0, 2, 2), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd * const gSpriteAffineAnimTable_861F3C4[] = +{ + gSpriteAffineAnim_861F38C, + gSpriteAffineAnim_861F39C, +}; + +static const struct CompressedSpriteSheet gUnknown_0861F3CC = {gBattleFrontierGfx_PyramidBag, 0x0800, 0x1024}; + +static const struct SpriteTemplate gUnknown_0861F3D4 = +{ + .tileTag = 0x1024, + .paletteTag = 0x1024, + .oam = &gOamData_861F378, + .anims = gSpriteAnimTable_861F388, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_861F3C4, + .callback = SpriteCallbackDummy +}; // code void sub_81C4EEC(void) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 6ab721643..38845beb8 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -1,17 +1,19 @@ #include "global.h" -#include "global.fieldmap.h" -#include "sprite.h" -#include "event_object_movement.h" #include "bike.h" -#include "metatile_behavior.h" -#include "metatile_behaviors.h" -#include "constants/flags.h" #include "event_data.h" +#include "event_object_movement.h" +#include "field_player_avatar.h" #include "fieldmap.h" +#include "global.fieldmap.h" +#include "metatile_behavior.h" +#include "metatile_behaviors.h" #include "overworld.h" #include "rotating_gate.h" +#include "sprite.h" +#include "task.h" +#include "constants/event_objects.h" #include "constants/event_object_movement_constants.h" -#include "field_player_avatar.h" +#include "constants/flags.h" extern void task_add_bump_boulder(u8, u8); static bool8 ShouldJumpLedge(s16, s16, u8); @@ -42,6 +44,42 @@ static void PlayerNotOnBikeTurningInPlace(u8, u16); static void PlayerNotOnBikeMoving(u8, u16); extern void sub_808C750(u8); +extern void PlayerAvatarTransition_Normal(struct EventObject *a); +extern void PlayerAvatarTransition_MachBike(struct EventObject *a); +extern void PlayerAvatarTransition_AcroBike(struct EventObject *a); +extern void PlayerAvatarTransition_Surfing(struct EventObject *a); +extern void PlayerAvatarTransition_Underwater(struct EventObject *a); +extern void PlayerAvatarTransition_ReturnToField(struct EventObject *a); +extern void PlayerAvatarTransition_Dummy(struct EventObject *a); + +extern u8 sub_808C3A4(struct Task *task, struct EventObject *playerObject, struct EventObject *strengthObject); +extern u8 do_boulder_dust(struct Task *task, struct EventObject *playerObject, struct EventObject *strengthObject); +extern u8 sub_808C484(struct Task *task, struct EventObject *playerObject, struct EventObject *strengthObject); + +extern u8 sub_808C544(struct Task *task, struct EventObject *eventObject); + +extern u8 sub_808C61C(struct Task *task, struct EventObject *eventObject); +extern u8 sub_808C644(struct Task *task, struct EventObject *eventObject); +extern u8 sub_808C6BC(struct Task *task, struct EventObject *eventObject); +extern u8 sub_808C6FC(struct Task *task, struct EventObject *eventObject); + +extern u8 fish0(struct Task *task); +extern u8 fish1(struct Task *task); +extern u8 fish2(struct Task *task); +extern u8 fish3(struct Task *task); +extern u8 fish4(struct Task *task); +extern u8 fish5(struct Task *task); +extern u8 fish6(struct Task *task); +extern u8 fish7(struct Task *task); +extern u8 fish8(struct Task *task); +extern u8 fish9(struct Task *task); +extern u8 fishA_wait_for_a_pressed(struct Task *task); +extern u8 fishB(struct Task *task); +extern u8 fishC(struct Task *task); +extern u8 fishD(struct Task *task); +extern u8 fishE(struct Task *task); +extern u8 fishF(struct Task *task); + static bool8 (*const gUnknown_084973FC[])(u8) = { MetatileBehavior_IsTrickHouseSlipperyFloor, @@ -105,6 +143,144 @@ static bool8 (*const gUnknown_0849749C[])(u8) = static const u8 gUnknown_084974B0[] = {9, 10, 11, 12, 13, 0, 0, 0}; +void (*const gUnknown_084974B8[])(struct EventObject *) = +{ + PlayerAvatarTransition_Normal, + PlayerAvatarTransition_MachBike, + PlayerAvatarTransition_AcroBike, + PlayerAvatarTransition_Surfing, + PlayerAvatarTransition_Underwater, + PlayerAvatarTransition_ReturnToField, + PlayerAvatarTransition_Dummy, + PlayerAvatarTransition_Dummy, +}; + +bool8 (*const gUnknown_084974D8[])(u8) = +{ + MetatileBehavior_IsSouthArrowWarp, + MetatileBehavior_IsNorthArrowWarp, + MetatileBehavior_IsWestArrowWarp, + MetatileBehavior_IsEastArrowWarp, +}; + +const u8 gUnknown_084974E8[][2] = +{ + {EVENT_OBJ_GFX_RIVAL_BRENDAN_NORMAL, EVENT_OBJ_GFX_RIVAL_MAY_NORMAL}, + {EVENT_OBJ_GFX_RIVAL_BRENDAN_MACH_BIKE, EVENT_OBJ_GFX_RIVAL_MAY_MACH_BIKE}, + {EVENT_OBJ_GFX_RIVAL_BRENDAN_ACRO_BIKE, EVENT_OBJ_GFX_RIVAL_MAY_ACRO_BIKE}, + {EVENT_OBJ_GFX_RIVAL_BRENDAN_SURFING, EVENT_OBJ_GFX_RIVAL_MAY_SURFING}, + {EVENT_OBJ_GFX_BRENDAN_UNDERWATER, EVENT_OBJ_GFX_MAY_UNDERWATER}, + {EVENT_OBJ_GFX_RIVAL_BRENDAN_FIELD_MOVE, EVENT_OBJ_GFX_RIVAL_MAY_FIELD_MOVE}, + {EVENT_OBJ_GFX_BRENDAN_FISHING, EVENT_OBJ_GFX_MAY_FISHING}, + {EVENT_OBJ_GFX_BRENDAN_WATERING, EVENT_OBJ_GFX_MAY_WATERING} +}; + +const u8 gUnknown_084974F8[][2] = +{ + {EVENT_OBJ_GFX_BRENDAN_NORMAL, EVENT_OBJ_GFX_MAY_NORMAL}, + {EVENT_OBJ_GFX_BRENDAN_MACH_BIKE, EVENT_OBJ_GFX_MAY_MACH_BIKE}, + {EVENT_OBJ_GFX_BRENDAN_ACRO_BIKE, EVENT_OBJ_GFX_MAY_ACRO_BIKE}, + {EVENT_OBJ_GFX_BRENDAN_SURFING, EVENT_OBJ_GFX_MAY_SURFING}, + {EVENT_OBJ_GFX_BRENDAN_UNDERWATER, EVENT_OBJ_GFX_MAY_UNDERWATER}, + {EVENT_OBJ_GFX_BRENDAN_FIELD_MOVE, EVENT_OBJ_GFX_MAY_FIELD_MOVE}, + {EVENT_OBJ_GFX_BRENDAN_FISHING, EVENT_OBJ_GFX_MAY_FISHING}, + {EVENT_OBJ_GFX_BRENDAN_WATERING, EVENT_OBJ_GFX_MAY_WATERING}, +}; + +const u8 gUnknown_08497508[] = {EVENT_OBJ_GFX_RED, EVENT_OBJ_GFX_LEAF}; + +const u8 gUnknown_0849750A[] = {EVENT_OBJ_GFX_LINK_RS_BRENDAN, EVENT_OBJ_GFX_LINK_RS_MAY}; + +const u8 gUnknown_0849750C[2][5][2] = +{ + //male + { + {EVENT_OBJ_GFX_BRENDAN_NORMAL, 1}, + {EVENT_OBJ_GFX_BRENDAN_MACH_BIKE, 2}, + {EVENT_OBJ_GFX_BRENDAN_ACRO_BIKE, 4}, + {EVENT_OBJ_GFX_BRENDAN_SURFING, 8}, + {EVENT_OBJ_GFX_BRENDAN_UNDERWATER, 16}, + }, + //female + { + {EVENT_OBJ_GFX_MAY_NORMAL, 1}, + {EVENT_OBJ_GFX_MAY_MACH_BIKE, 2}, + {EVENT_OBJ_GFX_MAY_ACRO_BIKE, 4}, + {EVENT_OBJ_GFX_MAY_SURFING, 8}, + {EVENT_OBJ_GFX_MAY_UNDERWATER, 16}, + } +}; + +bool8 (*const gUnknown_08497520[])(u8) = //Duplicate of sArrowWarpMetatileBehaviorChecks +{ + MetatileBehavior_IsSouthArrowWarp, + MetatileBehavior_IsNorthArrowWarp, + MetatileBehavior_IsWestArrowWarp, + MetatileBehavior_IsEastArrowWarp, +}; + +u8 (*const gUnknown_08497530[])(struct Task *, struct EventObject *, struct EventObject *) = +{ + sub_808C3A4, + do_boulder_dust, + sub_808C484, +}; + +u8 (*const gUnknown_0849753C[])(struct Task *, struct EventObject *) = +{ + sub_808C544, +}; + +u8 (*const gUnknown_08497540[])(struct Task *, struct EventObject *) = +{ + sub_808C61C, + sub_808C644, + sub_808C6BC, + sub_808C6FC, +}; + +const u8 gUnknown_08497550[] = {3, 4, 2, 1}; + +const u8 gUnknown_08497554[] = {16, 16, 17, 18, 19}; + +u8 (*const gUnknown_0849755C[])(struct Task *) = +{ + fish0, + fish1, + fish2, + fish3, + fish4, + fish5, + fish6, + fish7, + fish8, + fish9, + fishA_wait_for_a_pressed, + fishB, + fishC, + fishD, + fishE, + fishF, +}; + +const u16 gUnknown_0849759C[] = {1, 1, 1}; + +const u16 gUnknown_084975A2[] = {1, 3, 6}; + +const u8 gUnknown_084975A8[] = _("·"); + +const u16 gUnknown_084975AA[] = {36, 33, 30}; + +const u16 gUnknown_084975B0[] = +{ + 0, 0, + 0x28, 10, + 0x46, 30, +}; + +const u8 gUnknown_084975BC[] = {0x01, 0x03, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00}; + +// .text void MovementType_Player(struct Sprite *sprite) { UpdateEventObjectCurrentMovement(&gEventObjects[sprite->data[0]], sprite, EventObjectCB2_NoMovement2); diff --git a/src/starter_choose.c b/src/starter_choose.c index c1e7eea40..71784b016 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) |