diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-03-18 04:00:15 +0100 |
---|---|---|
committer | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-03-18 04:00:15 +0100 |
commit | 6035511c139549a0291b6b3d43b9b080f792b2b6 (patch) | |
tree | 128cb1580f3c1ac1a6f897ea2e8e703265e88914 /include | |
parent | d4703599837531d1118b64822c85755f28747ee1 (diff) |
reorganize and add new headers for many files
Diffstat (limited to 'include')
30 files changed, 718 insertions, 180 deletions
diff --git a/include/asm.inc.h b/include/asm.inc.h index 8189914fa..9ee10aa58 100644 --- a/include/asm.inc.h +++ b/include/asm.inc.h @@ -38,14 +38,6 @@ void CreatePokeballSprite(u8 r0, u8 r1, u8 r2, u8 r3, u8 s1, u8 s2, u8 s3, u16 s // asm/berry_blender.o void sub_80516C4(u8, u16); -// src/field_door.o -void FieldSetDoorOpened(u32, u32); -void FieldSetDoorClosed(u32, u32); -s8 FieldAnimateDoorClose(u32, u32); -s8 FieldAnimateDoorOpen(u32, u32); -bool8 FieldIsDoorAnimationRunning(void); -u32 sub_8058790(u32 x, u32 y); - // asm/field_map_obj.o void sub_805AA98(); u8 sub_805AB54(void); @@ -137,32 +129,11 @@ u8 ZCoordToPriority(u8); void FieldObjectUpdateZCoord(struct MapObject *pObject); void SetObjectSubpriorityByZCoord(u8, struct Sprite *, u8); -// src/field_map_obj_helpers.o -bool8 FreezeMapObject(struct MapObject *); -void FreezeMapObjects(void); -void FreezeMapObjectsExceptOne(u8); -void UnfreezeMapObjects(void); -void sub_806487C(struct Sprite *sprite, bool8 invisible); -void sub_8064990(u8, u8); - -// asm/field_control_avatar.o -void FieldClearPlayerInput(struct FieldInput *pStruct); -void FieldGetPlayerInput(struct FieldInput *pStruct, u16 keys, u16 heldKeys); -int sub_8068024(struct FieldInput *pStruct); -u8 *sub_80682A8(struct MapPosition *, u8, u8); -void overworld_poison_timer_set(void); -void prev_quest_postbuffer_cursor_backup_reset(void); -u8 *sub_8068E24(struct MapPosition *); -u8 *GetFieldObjectScriptPointerForComparison(); - // asm/field_tasks.o void SetUpFieldTasks(); void ActivatePerStepCallback(u8); void ResetFieldTasksArgs(void); -// asm/clock.o -void DoTimeBasedEvents(void); - // asm/reset_rtc_screen.o void CB2_InitResetRtcScreen(void); @@ -203,10 +174,6 @@ u8 sub_8083664(void); void sub_8083A84(TaskFunc); s32 sub_8083BF4(u8 id); -// src/fldeff_emotion.o -void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3); -void objc_exclamation_mark_probably(struct Sprite *sprite); - // asm/rom_80859BC.o u8 CreateTrainerSprite_BirchSpeech(u8, u16, u16, u8, void *); void LoadTrainerGfx_TrainerCard(u8 gender, int, void *); @@ -259,11 +226,6 @@ u8 sub_80A7D8C(u8 berry, int i, int i1); void sub_80A7DD4(void); u8 sub_80A7E5C(u8); -// src/matsuda_debug_menu.o -void sub_80AA280(u8); -void sub_80AA5E8(u8); -void sub_80AA658(u8); - // asm/contest.o void sub_80AB1B0(void); void sub_80AE098(u8); @@ -279,18 +241,6 @@ void CreatePokemartMenu(void *); void CreateDecorationShop1Menu(void *); void CreateDecorationShop2Menu(void *); -// src/script_menu.o -bool8 sub_80B5054(u8, u8, u8, u8); -bool8 sub_80B50B0(u8, u8, u8, u8, u8); -bool8 Multichoice(u8, u8, u8, u8); -bool8 yes_no_box(u8, u8); -bool8 sub_80B5578(u8, u8, u8, u8, u8); -bool8 sub_80B58C4(u16, u8, u8); -void *picbox_close(void); - -// asm/naming_screen.o -void DoNamingScreen(u8 r0, u8 *r1, u16 r2, u16 r3, u32 s0, MainCallback s4); - // asm/secret_base.o void sub_80BB5B4(void); u8 sub_80BBB24(void); @@ -330,15 +280,6 @@ void sub_80C4940(void); void sub_80C4980(u8); u8 sub_80C4B34(u8 *); -// asm/script_pokemon_util_80C4BF0.o -u8 sub_80C4D50(void); -void ShowContestWinner(void); -void HealPlayerParty(); -u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8); -u8 ScriptGiveEgg(u16); -void ScriptWildBattle(u16, u8, u16); -void ScriptSetMonMoveSlot(u8, u16, u8); - // asm/fldeff_80C5CD4.o void DoFieldPoisonEffect(void); bool32 FieldPoisonEffectIsRunning(void); @@ -357,16 +298,6 @@ void sub_80C8E1C(u8); void sub_80C8EBC(u8); void sub_80C8F34(u8); -// asm/bike.o -void MovePlayerOnBike(u8, u16, u16); -void sub_80E5B38(u16 i, u16 c); -u8 IsRunningDisallowed(u8); -bool8 player_should_look_direction_be_enforced_upon_movement(void); -void BikeClearState(int i, int i1); -void sub_80E6010(u8 i); -s16 GetPlayerSpeed(void); -void sub_80E6084(); - // asm/easy_chat.o void sub_80E6764(void); void sub_80EB3FC(u8 *, u16); @@ -385,13 +316,6 @@ bool8 sub_80F9344(void); void sub_80F9368(void); void sub_80F9438(void); -// asm/script_pokemon_util_80F99CC.o -void sub_80F99CC(void); - -// src/dewford_trend.o -void sub_80FA17C(void); -void sub_80FA4E4(void *, u32, u8); - // asm/region_map.o void sub_80FBFB4(u8 *str, u8 region, u8); void CopyMapName(); @@ -400,13 +324,6 @@ u8 *CopyLocationName(u8 *dest, u8 location); // asm/slot_machine.o void PlaySlotMachine(u8, void *); -// asm/contest_painting.o -void sub_8106630(u32); - -// asm/rom6.o -bool8 npc_before_player_of_type(u8); -u8 oei_task_add(void); - // asm/pokeblock.o void sub_810C994(void); void sub_810CA6C(s32); @@ -464,13 +381,6 @@ void sub_8134AC0(void *); // src/player_pc.o void NewGameInitPCItems(void); -// src/intro.o -void sub_813CE30(u16, u16, u16, u16); - -// asm/braille_puzzles.o -bool8 ShouldDoBrailleStrengthEffect(void); -void DoBrailleStrengthEffect(void); - // asm/intro_credits_graphics.o void load_intro_part2_graphics(/*TODO: arg types*/); void sub_8148C78(/*TODO: arg types*/); @@ -482,14 +392,3 @@ u8 intro_create_brendan_sprite(/*TODO: arg types*/); u8 intro_create_may_sprite(/*TODO: arg types*/); u8 intro_create_latios_sprite(/*TODO: arg types*/); u8 intro_create_latias_sprite(/*TODO: arg types*/); - -// asm/name_string_util.o -void SanitizeNameString(u8*); - -// src/agb_flash.o -u16 ReadFlashId(void); -u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)); -void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size); -u32 ProgramFlashSectorAndVerify(); -u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n); -u16 IdentifyFlash(void); diff --git a/include/battle.h b/include/battle.h index daaa78cd3..4b9144721 100644 --- a/include/battle.h +++ b/include/battle.h @@ -107,9 +107,12 @@ struct SmallItemStruct struct BattleStruct /* 0x2000000 */ { - u8 filler0[0x1601C]; + u8 filler0[0x15DDE]; + /*0x15DDE*/ u8 unk15DDE; + /*0x15DDF*/ u8 unk15DDF; + /*0x15DE0*/ u8 filler15DE0[0x23C]; // 0xAF off? struct SmallBattleStruct1 unk; - u8 filler1[0x68]; // 0x2016020 + u8 filler1[0x68]; /* 0x16089 */ u8 safariFleeRate; u8 filler1_2[0x42]; /* 0x160CB */ u8 linkPlayerIndex; diff --git a/include/battle_ai.h b/include/battle_ai.h new file mode 100644 index 000000000..a5fea3480 --- /dev/null +++ b/include/battle_ai.h @@ -0,0 +1,31 @@ +#ifndef GUARD_BATTLEAI_H +#define GUARD_BATTLEAI_H + +#define AIScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24) +#define AIScriptRead16(ptr) ((ptr)[0] | (ptr)[1] << 8) +#define AIScriptRead8(ptr) ((ptr)[0]) +#define AIScriptReadPtr(ptr) (u8*) AIScriptRead32(ptr) + +enum +{ + TARGET, + USER +}; + +// AI states +enum +{ + AIState_SettingUp, + AIState_Processing, + AIState_FinishedProcessing, + AIState_DoNotProcess +}; + +// battle_ai +void BattleAI_SetupAIData(void); +void BattleAI_DoAIProcessing(void); +void sub_810745C(void); +void AIStackPushVar(u8 *); +u8 AIStackPop(void); + +#endif diff --git a/include/battle_anim.h b/include/battle_anim.h new file mode 100644 index 000000000..eb98ebf09 --- /dev/null +++ b/include/battle_anim.h @@ -0,0 +1,58 @@ +#ifndef GUARD_BATTLEANIM_H +#define GUARD_BATTLEANIM_H + +#define SCRIPT_READ_8(ptr) ((ptr)[0]) +#define SCRIPT_READ_16(ptr) ((ptr)[0] | ((ptr)[1] << 8)) +#define SCRIPT_READ_32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) + +#define REG_BGnCNT_BITFIELD(n) (*(struct BGCntrlBitfield *)REG_ADDR_BG##n##CNT) +#define REG_BG1CNT_BITFIELD REG_BGnCNT_BITFIELD(1) +#define REG_BG2CNT_BITFIELD REG_BGnCNT_BITFIELD(2) + +#define EWRAM_14800 ((u16 *)(unk_2000000 + 0x14800)) +#define EWRAM_17800 ((struct UnknownStruct1 *)(unk_2000000 + 0x17800)) +#define EWRAM_17810 ((struct UnknownStruct3 *)(unk_2000000 + 0x17810)) +#define EWRAM_18000 ((u16 *)(unk_2000000 + 0x18000)) +#define EWRAM_19348 (*(u16 *)(unk_2000000 + 0x19348)) + +struct BGCntrlBitfield +{ + volatile u16 priority:2; + volatile u16 charBaseBlock:2; + volatile u16 field_0_2:4; + volatile u16 field_1_0:5; + volatile u16 areaOverflowMode:1; + volatile u16 screenSize:2; +}; + +struct BattleAnimBackground +{ + void *image; + void *palette; + void *tilemap; +}; + +struct UnknownStruct1 +{ + u8 unk0; +}; + +struct UnknownStruct2 +{ + void *unk0; + u16 *unk4; + u8 unk8; +}; + +struct UnknownStruct3 +{ + u8 unk0; + u8 filler1[0xB]; +}; + +void move_something(const u8 *const moveAnims[], u16 b, u8 c); +bool8 b_side_obj__get_some_boolean(u8 a); +void sub_8076034(u8, u8); +bool8 sub_8076BE0(void); + +#endif diff --git a/include/battle_party_menu.h b/include/battle_party_menu.h index c808cdcd7..d0ae8da35 100644 --- a/include/battle_party_menu.h +++ b/include/battle_party_menu.h @@ -13,8 +13,23 @@ struct UnknownStruct1 s16 unk266; }; +struct PartyMenuItem +{ + const u8 *text; + TaskFunc func; +}; + +struct PartyPopupMenu +{ + u8 unk0; + u8 unk1; + const u8 *unk4; +}; + extern u8 unk_2000000[]; +void SetUpBattlePokemonMenu(u8); + #define EWRAM_1609D unk_2000000[0x1609D] #define EWRAM_1B000 (*(struct UnknownStruct1 *)(unk_2000000 + 0x1B000)) diff --git a/include/battle_setup.h b/include/battle_setup.h index 2a1a2e717..e88aefe6d 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -1,84 +1,136 @@ #ifndef GUARD_BATTLE_SETUP_H #define GUARD_BATTLE_SETUP_H -// task01_battle_start -// task_add_01_battle_start +#define NUM_TRAINER_EYE_TRAINERS 56 +#define TRAINER_REMATCH_STEPS 255 + +// IV + LEVEL + SPECIES +struct TrainerPartyMember0 +{ + u16 iv; + u8 level; + u16 species; +}; + +// IV + LEVEL + SPECIES + MOVES +struct TrainerPartyMember1 +{ + u16 iv; + u8 level; + u16 species; + u16 moves[4]; +}; + +// IV + LEVEL + SPECIES + ITEMS +struct TrainerPartyMember2 +{ + u16 iv; + u8 level; + u16 species; + u16 heldItem; +}; + +// IV + LEVEL + SPECIES + ITEMS + MOVES +struct TrainerPartyMember3 +{ + u16 iv; + u8 level; + u16 species; + u16 heldItem; + u16 moves[4]; +}; + +struct TrainerBattleSpec +{ + void *ptr; + u8 ptrType; +}; + +struct TrainerEyeTrainer +{ + u16 trainerNums[5]; + u16 mapGroup; + u16 mapNum; +}; + +//void task01_battle_start(u8 taskId); +//void task_add_01_battle_start(u8 transition, u16 song); void CheckForSafariZoneAndProceed(void); void StartBattle_StandardWild(void); void StartBattle_Roamer(void); void StartBattle_Safari(void); -// task_add_01_battle_start_with_music_and_stats -// StartBattle_WallyTutorial +//void task_add_01_battle_start_with_music_and_stats(void); +//void StartBattle_WallyTutorial(void); void StartBattle_ScriptedWild(void); -// StartBattle_SouthernIsland -// StartBattle_Rayquaza -// StartBattle_GroudonKyogre -// StartBattle_Regi +//void StartBattle_SouthernIsland(void); +//void StartBattle_Rayquaza(void); +//void StartBattle_GroudonKyogre(void); +//void StartBattle_Regi(void); void HandleWildBattleEnd(void); void HandleScriptedWildBattleEnd(void); -// GetBattleTerrain -// GetBattleTransitionTypeByMap -// GetSumOfPartyMonLevel -// GetSumOfEnemyPartyLevel +s8 GetBattleTerrain(void); +//s8 GetBattleTransitionTypeByMap(void); +//u16 GetSumOfPartyMonLevel(u8 numMons); +//u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons); u8 GetWildBattleTransition(void); u8 GetTrainerBattleTransition(void); -// GetBattleTowerBattleTransition -// ChooseStarter +u8 GetBattleTowerBattleTransition(void); +//void ChooseStarter(void); void CB2_GiveStarter(void); void CB2_StartFirstBattle(void); void HandleFirstBattleEnd(void); -// TrainerBattleLoadArg32 -// TrainerBattleLoadArg16 -// TrainerBattleLoadArg8 -// trainerflag_opponent +//u32 TrainerBattleLoadArg32(u8 *ptr); +//u16 TrainerBattleLoadArg16(u8 *ptr); +//u8 TrainerBattleLoadArg8(u8 *ptr); +//u16 trainerflag_opponent(void); bool32 battle_exit_is_player_defeat(u32 a1); -// sub_80822BC -// TrainerBattleLoadArgs -// battle_80801F0 +//void sub_80822BC(void); +//void TrainerBattleLoadArgs(const struct TrainerBattleSpec *specs, u8 *data); +//void battle_80801F0(void); u8 *TrainerBattleConfigure(u8 *data); void TrainerWantsBattle(u8, u8 *); bool32 GetTrainerFlagFromScriptPointer(u8 *data); -// sub_8082524 -// sub_8082558 -// sub_8082564 -// sub_808257C -// unref_sub_8082590 +//void sub_8082524(void); +//u8 sub_8082558(void); +//u8 sub_8082564(void); +//void sub_808257C(void); +//void unref_sub_8082590(void); // unused u8 trainer_flag_check(u16); void trainer_flag_set(u16); void trainer_flag_clear(u16); void sub_80825E4(void); void sub_808260C(void); -// do_choose_name_or_words_screen -// sub_80826B0 -// sub_80826D8 +void do_choose_name_or_words_screen(void); +//void sub_80826B0(void); +//void sub_80826D8(void); u8 *sub_80826E8(void); u8 *sub_8082700(void); -// sub_8082718 -// PlayTrainerEncounterMusic -// SanitizeString +//void sub_8082718(void); +//void PlayTrainerEncounterMusic(void); +//u8 *SanitizeString(u8 *str); u8 *sub_808281C(void); -// sub_8082830 -// unref_sub_808286C +u8 *sub_8082830(void); +//u8 *unref_sub_808286C(void); u8 *sub_8082880(void); -// sub_8082894 -// sub_80828B8 -// sub_80828FC -// sub_80829A8 -// sub_80829E8 -// sub_8082A18 -// sub_8082A54 -// sub_8082A90 -// sub_8082AE4 -// sub_8082B10 -// sub_8082B44 +//s32 sub_8082894(const struct TrainerEyeTrainer *trainers, u16 trainerNum); +//s32 sub_80828B8(const struct TrainerEyeTrainer *trainers, u16 trainerNum); +//bool32 sub_80828FC(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum); +//s32 sub_80829A8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum); +//s32 sub_80829E8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum); +//bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 trainerNum); +//bool8 sub_8082A54(const struct TrainerEyeTrainer *trainers, u16 trainerNum); +//u16 sub_8082A90(const struct TrainerEyeTrainer *trainers, u16 trainerNum); +//void sub_8082AE4(const struct TrainerEyeTrainer *trainers, u16 trainerNum); +//bool8 sub_8082B10(const struct TrainerEyeTrainer *trainers, u16 trainerNum); +//bool32 sub_8082B44(void); void sub_8082B78(void); -// sub_8082BA4 +//bool32 sub_8082BA4(void); void sub_8082BD0(u16, u16); -// sub_8082C0C -// unref_sub_8082C2C +s32 sub_8082C0C(u16 mapGroup, u16 mapNum); +s32 unref_sub_8082C2C(u16 mapGroup, u16 mapNum); u16 sub_8082C4C(u16 a1); -// sub_8082C68 -// sub_8082C9C +//s32 sub_8082C68(void); +//u8 sub_8082C9C(void); void sub_8082CB8(void); #endif // GUARD_BATTLE_SETUP_H diff --git a/include/bike.h b/include/bike.h new file mode 100644 index 000000000..decbd1d49 --- /dev/null +++ b/include/bike.h @@ -0,0 +1,56 @@ +#ifndef GUARD_BIKE_H +#define GUARD_BIKE_H + +struct UnknownStruct1 +{ + u32 unk0; + u32 unk4; + u32 unk8; + u32 unkC; + const u8 *unk10; + const u8 *unk14; + u32 unk18; +}; + +// Player speeds +enum +{ + SPEED_STANDING, + SPEED_NORMAL, + SPEED_FAST, + SPEED_FASTER, + SPEED_FASTEST, +}; + +//Acro bike states +enum +{ + ACRO_STATE_NORMAL, + ACRO_STATE_TURNING, + ACRO_STATE_WHEELIE_STANDING, + ACRO_STATE_BUNNY_HOP, + ACRO_STATE_WHEELIE_MOVING, + ACRO_STATE_5, + ACRO_STATE_6, +}; + +//Acro bike transitions +enum +{ + ACRO_TRANS_FACE_DIRECTION, + ACRO_TRANS_NORMAL_TO_WHEELIE = 3, + ACRO_TRANS_WHEELIE_TO_NORMAL, +}; + +void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys); +void sub_80E5B38(u16 a, u16 b); +bool8 IsRunningDisallowed(u8 tile); +bool8 IsBikingDisallowedByPlayer(void); +bool8 player_should_look_direction_be_enforced_upon_movement(void); +void GetOnOffBike(u8 var); +void BikeClearState(int var1, int var2); +void sub_80E6010(u8 var); +s16 GetPlayerSpeed(void); +void sub_80E6084(void); + +#endif diff --git a/include/braille_puzzles.h b/include/braille_puzzles.h new file mode 100644 index 000000000..2b0e2bb96 --- /dev/null +++ b/include/braille_puzzles.h @@ -0,0 +1,14 @@ +#ifndef GUARD_BRAILLEPUZZLES_H +#define GUARD_BRAILLEPUZZLES_H + +bool8 ShouldDoBrailleStrengthEffect(void); +void DoBrailleStrengthEffect(void); +void UseFlyAncientTomb_Callback(void); +void UseFlyAncientTomb_Finish(void); +void Task_BrailleWait(u8 taskId); +bool32 BrailleWait_CheckButtonPress(void); +void SealedChamberShakingEffect(u8 taskId); +bool8 ShouldDoBrailleDigEffect(void); +void DoBrailleDigEffect(void); + +#endif diff --git a/include/clock.h b/include/clock.h new file mode 100644 index 000000000..4e6560c91 --- /dev/null +++ b/include/clock.h @@ -0,0 +1,8 @@ +#ifndef GUARD_CLOCK_H +#define GUARD_CLOCK_H + +// TODO: time of day and seconds in a day defines + +void DoTimeBasedEvents(void); + +#endif diff --git a/include/contest.h b/include/contest.h new file mode 100644 index 000000000..82520717f --- /dev/null +++ b/include/contest.h @@ -0,0 +1,26 @@ +#ifndef GUARD_CONTEST_H +#define GUARD_CONTEST_H + +struct ContestPokemon +{ + /* 0x00 */ u16 species; + /* 0x02 */ u8 nickname[POKEMON_NAME_LENGTH]; + /* 0x0D */ u8 trainerName[8]; + /* 0x15 */ u8 unk15; + /* 0x16 */ u8 unk16; + /* 0x17 */ u8 filler17[7]; + /* 0x1E */ u16 moves[4]; // moves + /* 0x26 */ u8 cool; // cool + /* 0x27 */ u8 beauty; // beauty + /* 0x28 */ u8 cute; // cute + /* 0x29 */ u8 smart; // smart + /* 0x2A */ u8 tough; // tough + /* 0x2B */ u8 sheen; // sheen + /* 0x2C */ u8 filler2C[12]; + /* 0x38 */ u32 unk38; + /* 0x3C */ u32 unk3C; +}; // wow + +extern struct ContestPokemon gContestMons[]; + +#endif // GUARD_CONTEST_H diff --git a/include/contest_painting.h b/include/contest_painting.h new file mode 100644 index 000000000..896aa299b --- /dev/null +++ b/include/contest_painting.h @@ -0,0 +1,77 @@ +#ifndef GUARD_CONTESTPAINTING_H +#define GUARD_CONTESTPAINTING_H + +#define MOSAIC_BIT_BG_HSIZE (0) +#define MOSAIC_BIT_BG_VSIZE (4) +#define MOSAIC_BIT_OBJ_HSIZE (8) +#define MOSAIC_BIT_OBJ_VSIZE (12) + +enum +{ + CONTEST_COOL, + CONTEST_BEAUTY, + CONTEST_CUTE, + CONTEST_SMART, + CONTEST_TOUGH, +}; + +enum +{ + CONTESTRESULT_COOL = 9, + CONTESTRESULT_BEAUTY = 13, + CONTESTRESULT_CUTE = 2, + CONTESTRESULT_SMART = 36, + CONTESTRESULT_TOUGH = 6, +}; + +struct Unk2015E00 +{ + u16 unk2015e00[128][32]; + u16 unk2017e00[0]; +}; + +struct ContestEntry +{ + /*0x00*/ u8 var0; + /*0x04*/ u32 var4; + /*0x08*/ u16 var8; + /*0x0A*/ u8 contestType; + /*0x0B*/ u8 pokemon_name[POKEMON_NAME_LENGTH]; + /*0x15*/ u8 pad15; + /*0x16*/ u8 trainer_name[OT_NAME_LENGTH]; +}; + +struct Unk3000756 +{ + /*0x00*/ u8 var_0; +}; + +struct LabelPair +{ + const u8 *prefix; + const u8 *suffix; +}; + +struct Unk03005E20 +{ + u8 var_0; + u8 pad1[3]; + u16 (*var_4)[][32]; + u16 (*var_8)[]; + u8 pad0C[4]; + u32 var_10; + u16 var_14; + u16 var_16; + u8 var_18; + u8 var_19; + u8 var_1A; + u8 var_1B; + u8 var_1C; + u8 var_1D; + u8 var_1E; + u8 var_1F; +}; + +void sub_8106630(u32); + +#endif diff --git a/include/dewford_trend.h b/include/dewford_trend.h new file mode 100644 index 000000000..713d491b6 --- /dev/null +++ b/include/dewford_trend.h @@ -0,0 +1,10 @@ +#ifndef GUARD_DEWFORDTREND_H +#define GUARD_DEWFORDTREND_H + +#define ARRAY_2007800 ((struct EasyChatPair *)(unk_2000000 + 0x7800)) +#define ARRAY_2007900 ((struct EasyChatPair *)(unk_2000000 + 0x7900)) + +void sub_80FA17C(void); +void sub_80FA4E4(void *, u32, u8); + +#endif diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h new file mode 100644 index 000000000..3f17ebee9 --- /dev/null +++ b/include/field_control_avatar.h @@ -0,0 +1,13 @@ +#ifndef GUARD_FIELDCONTROLAVATAR_H +#define GUARD_FIELDCONTROLAVATAR_H + +void FieldClearPlayerInput(struct FieldInput *pStruct); +void FieldGetPlayerInput(struct FieldInput *pStruct, u16 keys, u16 heldKeys); +int sub_8068024(struct FieldInput *pStruct); +u8 *sub_80682A8(struct MapPosition *, u8, u8); +void overworld_poison_timer_set(void); +void prev_quest_postbuffer_cursor_backup_reset(void); +u8 *sub_8068E24(struct MapPosition *); +u8 *GetFieldObjectScriptPointerForComparison(); + +#endif diff --git a/include/field_door.h b/include/field_door.h new file mode 100644 index 000000000..1759e0dc1 --- /dev/null +++ b/include/field_door.h @@ -0,0 +1,25 @@ +#ifndef GUARD_FIELDDOOR_H +#define GUARD_FIELDDOOR_H + +struct DoorGraphics +{ + u16 metatileNum; + u8 unk2; + void *tiles; + void *palette; +}; + +struct DoorAnimFrame +{ + u8 time; + u16 offset; +}; + +void FieldSetDoorOpened(u32, u32); +void FieldSetDoorClosed(u32, u32); +s8 FieldAnimateDoorClose(u32, u32); +s8 FieldAnimateDoorOpen(u32, u32); +bool8 FieldIsDoorAnimationRunning(void); +u32 sub_8058790(u32 x, u32 y); + +#endif diff --git a/include/field_map_obj_helpers.h b/include/field_map_obj_helpers.h new file mode 100644 index 000000000..5498bde12 --- /dev/null +++ b/include/field_map_obj_helpers.h @@ -0,0 +1,11 @@ +#ifndef GUARD_FIELDMAPOBJHELP_H +#define GUARD_FIELDMAPOBJHELP_H + +bool8 FreezeMapObject(struct MapObject *); +void FreezeMapObjects(void); +void FreezeMapObjectsExceptOne(u8); +void UnfreezeMapObjects(void); +void sub_806487C(struct Sprite *sprite, bool8 invisible); +void sub_8064990(u8, u8); + +#endif diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 3efca3af7..a4f77a172 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -78,7 +78,7 @@ u8 GetPlayerAvatarGraphicsIdByCurrentState(void); void SetPlayerAvatarExtraStateTransition(u8 a, u8 b); void InitPlayerAvatar(s16 a, s16 b, u8 c, u8 d); // sub_8059B88 -// sub_8059BF4 +void sub_8059BF4(void); // sub_8059C3C void sub_8059C94(u8); // sub_8059D08 diff --git a/include/gba/flash_internal.h b/include/gba/flash_internal.h index 6156b6c14..cbcfb5466 100644 --- a/include/gba/flash_internal.h +++ b/include/gba/flash_internal.h @@ -65,6 +65,10 @@ u16 ReadFlashId(void); void StartFlashTimer(u8 phase); void SetReadFlash1(u16 *dest); void StopFlashTimer(void); +u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)); +u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src); +void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size); +u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n); u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData); @@ -73,4 +77,7 @@ u16 EraseFlashSector_MX(u16 sectorNum); u16 ProgramFlashByte_MX(u16 sectorNum, u32 offset, u8 data); u16 ProgramFlashSector_MX(u16 sectorNum, u8 *src); +// agb_flash_1m +u16 IdentifyFlash(void); + #endif // GUARD_GBA_FLASH_INTERNAL_H diff --git a/include/global.h b/include/global.h index 56338a9e8..ad08af84f 100644 --- a/include/global.h +++ b/include/global.h @@ -71,6 +71,11 @@ enum BAG_KEYITEMS }; +struct TextStruct +{ + const u8 *text; +}; + struct Coords16 { s16 x; @@ -167,7 +172,8 @@ struct RamScript struct SB1_2EFC_Struct { - u8 unknown[0x20]; + u16 var; + u8 unknown[0x1E]; }; struct EasyChatPair @@ -295,6 +301,25 @@ typedef union OldMan { struct UnkMauvilleOldManStruct2 oldMan2; } OldMan; +struct Unk_SB_Access_Struct1 +{ + u8 filler0[0xF8]; + struct SB1_2EFC_Struct sb1_2EFC_struct[5]; +}; + +struct Unk_SB_Access_Struct2 +{ + struct SB1_2EFC_Struct sb1_2EFC_struct2[12]; // each is 0x20 + /*0x2F84*/ u8 filler[0x18]; +}; + +/*0x2E04*/ +typedef union SB_Struct { + struct Unk_SB_Access_Struct1 unkSB1; + struct Unk_SB_Access_Struct2 unkSB2; +} SB_Struct; +// size is 0x198 + struct SaveBlock1 /* 0x02025734 */ { /*0x00*/ struct Coords16 pos; @@ -364,8 +389,8 @@ struct SaveBlock1 /* 0x02025734 */ /*0x2D94*/ OldMan oldMan; /*0x2DC0*/ u8 unk_2DC0[0x14]; /*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff - /*0x2DFC*/ u8 filler_2DFC[0x100]; - /*0x2EFC*/ struct SB1_2EFC_Struct sb1_2EFC_struct[5]; + /*0x2DFC*/ u8 filler_2DFC[0x8]; + /*0x2E04*/ SB_Struct sbStruct; /*0x2F9C*/ u8 filler_2F9C[0xA0]; /*0x303C*/ u8 filler_303C[0x38]; /*0x3074*/ u8 filler_3074[0x42]; diff --git a/include/intro.h b/include/intro.h index a859a9ce4..7fdbd9cb0 100644 --- a/include/intro.h +++ b/include/intro.h @@ -3,5 +3,6 @@ void c2_copyright_1(void); void CB2_InitCopyrightScreen(void); +void sub_813CE30(u16, u16, u16, u16); #endif // GUARD_INTRO_H diff --git a/include/matsuda_debug_menu.h b/include/matsuda_debug_menu.h new file mode 100644 index 000000000..5df53d688 --- /dev/null +++ b/include/matsuda_debug_menu.h @@ -0,0 +1,11 @@ +#ifndef GUARD_MATSUDADEBUG_H +#define GUARD_MATSUDADEBUG_H + +#define BIT(n) (1 << (n)) + +void sub_80AB184(void); +void sub_80AA280(u8); +void sub_80AA5E8(u8); +void sub_80AA658(u8); + +#endif diff --git a/include/name_string_util.h b/include/name_string_util.h new file mode 100644 index 000000000..110f8cc22 --- /dev/null +++ b/include/name_string_util.h @@ -0,0 +1,7 @@ +#ifndef GUARD_NAMESTRINGUTIL_H +#define GUARD_NAMESTRINGUTIL_H + +void PadNameString(u8 *a1, u8 a2); +void SanitizeNameString(u8 *a1); + +#endif diff --git a/include/naming_screen.h b/include/naming_screen.h new file mode 100644 index 000000000..b6b464538 --- /dev/null +++ b/include/naming_screen.h @@ -0,0 +1,83 @@ +#ifndef GUARD_NAMINGSCREEN_H +#define GUARD_NAMINGSCREEN_H + +#define KBEVENT_NONE 0 +#define KBEVENT_PRESSED_A 5 +#define KBEVENT_PRESSED_B 6 +#define KBEVENT_PRESSED_SELECT 8 +#define KBEVENT_PRESSED_START 9 + +enum +{ + NAMING_SCREEN_TEMPLATE_PLAYER_NAME, + NAMING_SCREEN_TEMPLATE_BOX_NAME, + NAMING_SCREEN_TEMPLATE_MON_NAME, +}; + +struct NamingScreenTemplate +{ + u8 unk0; + u8 maxChars; + u8 unk2; + u8 unk3; + u8 unk4; //mode? + u8 unk5; + u8 unk6; + u8 unk7; + const u8 *title; +}; + +struct NamingScreenData +{ + /*0x00*/ u8 state; + /*0x01*/ u8 templateNum; + /*0x02*/ u16 unk2; + /*0x04*/ u16 bg1vOffset; + /*0x06*/ u16 bg2vOffset; + /*0x08*/ u16 unk8; + /*0x0A*/ u16 unkA; + /*0x0C*/ u8 unkC; + /*0x0D*/ u8 unkD; + /*0x0E*/ u8 currentPage; + /*0x0F*/ u8 cursorSpriteId; + /*0x10*/ u8 unk10; + /*0x11*/ u8 textBuffer[0x10]; + /*0x21*/ u8 filler21[0x13]; + const struct NamingScreenTemplate *template; + /*0x38*/ u8 *destBuffer; + /*0x3C*/ u16 unk3C; //savedKeyRepeatStartDelay + /*0x3E*/ u16 unk3E; + /*0x40*/ u16 unk40; + /*0x42*/ u32 unk42; + /*0x46*/ MainCallback returnCallback; +}; + +enum +{ + PAGE_UPPER, + PAGE_LOWER, + PAGE_OTHERS, +}; + +enum +{ + MAIN_STATE_BEGIN_FADE_IN, + MAIN_STATE_WAIT_FADE_IN, + MAIN_STATE_HANDLE_INPUT, + MAIN_STATE_MOVE_TO_OK_BUTTON, + MAIN_STATE_START_PAGE_SWAP, + MAIN_STATE_WAIT_PAGE_SWAP, + MAIN_STATE_6, + MAIN_STATE_UPDATE_SENT_TO_PC_MESSAGE, + MAIN_STATE_BEGIN_FADE_OUT, +}; + +enum +{ + INPUT_STATE_DISABLED, + INPUT_STATE_ENABLED, +}; + +void DoNamingScreen(u8 r0, u8 *r1, u16 r2, u16 r3, u32 s0, MainCallback s4); + +#endif diff --git a/include/rom4.h b/include/rom4.h index bb3486c38..5aae277a6 100644 --- a/include/rom4.h +++ b/include/rom4.h @@ -20,7 +20,7 @@ struct LinkPlayerMapObject // sub_8052F5C // flag_var_implications_of_teleport_ void new_game(void); -// sub_8053014 +void sub_8053014(void); void sub_8053050(void); // sub_805308C void ResetGameStats(void); diff --git a/include/rom6.h b/include/rom6.h new file mode 100644 index 000000000..e7a3ba48e --- /dev/null +++ b/include/rom6.h @@ -0,0 +1,7 @@ +#ifndef GUARD_ROM6_H +#define GUARD_ROM6_H + +bool8 npc_before_player_of_type(u8); +u8 oei_task_add(void); + +#endif diff --git a/include/save.h b/include/save.h index fe22e4ad7..b9d4121ec 100644 --- a/include/save.h +++ b/include/save.h @@ -12,38 +12,63 @@ struct SaveSection u8 data[0xFF4]; u16 id; u16 checksum; - u32 unknown; + u32 security; u32 counter; -}; +}; // size is 0x1000 +// headless save section? struct UnkSaveSection { u8 data[0xFF4]; - u32 unknown; + u32 security; +}; // size is 0xFF8 + +// Ruby/Sapphire's save data is Flash 128K, which is 32 save sectors. +#define NUM_SECTORS 32 // defined in agb_flash but not in a header + +#define UNKNOWN_CHECK_VALUE 0x8012025 + +// SetDamagedSectorBits states +enum +{ + ENABLE, + DISABLE, + CHECK // unused +}; + +// Do save types +enum +{ + NORMAL_SAVE, + LINK_SAVE, + EREADER_SAVE, // mossdeep event + HOF_SAVE, + DIFFERENT_FILE_SAVE, + HOF_DELETE_SAVE // unused }; void ClearSaveData(void); -void sub_81251B8(void); -bool32 sub_81251D4(u8 op, u8 bit); -u8 save_write_to_flash(u16 a1, struct SaveSectionLocation *a2); -u8 sub_81252D8(u16, struct SaveSectionLocation *); -u8 sub_81253C8(u8 sector, u8 *data, u16 size); -u8 sub_8125440(u8, u8 *); -u32 sub_812546C(struct SaveSectionLocation *a1); -u32 sub_81254C8(struct SaveSectionLocation *a1); -u8 sub_812550C(u16 a1, struct SaveSectionLocation *a2); -u8 sub_812556C(u16 a1, struct SaveSectionLocation *a2); -u8 sub_81255B8(u16, struct SaveSectionLocation *); -u8 sub_8125758(u16 a1, struct SaveSectionLocation *a2); -u8 sub_81257F0(u16 a1, struct SaveSectionLocation *a2); -u8 sub_812587C(u16 a1, struct SaveSectionLocation *a2); -u8 sub_81258BC(u16, struct SaveSectionLocation *); -u8 sub_8125974(struct SaveSectionLocation *); +void ResetSaveCounters(void); +bool32 ManipulateSectorBits(u8 op, u8 bit); +u8 save_write_to_flash(u16 a1, const struct SaveSectionLocation *a2); +u8 HandleWriteSector(u16, const struct SaveSectionLocation *); +u8 HandleWriteSectorNBytes(u8 sector, u8 *data, u16 size); +u8 TryWriteSector(u8, u8 *); +u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location); +u32 RestoreSaveBackupVars(const struct SaveSectionLocation *location); +u8 sub_812550C(u16 a1, const struct SaveSectionLocation *location); +u8 sub_812556C(u16 a1, const struct SaveSectionLocation *location); +u8 sub_81255B8(u16, const struct SaveSectionLocation *location); +u8 sub_8125758(u16 a1, const struct SaveSectionLocation *location); +u8 sub_81257F0(u16 a1, const struct SaveSectionLocation *location); +u8 sub_812587C(u16 a1, const struct SaveSectionLocation *location); +u8 sub_81258BC(u16, const struct SaveSectionLocation *location); +u8 sub_8125974(const struct SaveSectionLocation *location); u8 sub_8125B88(u8 a1, u8 *data, u16 size); u8 sub_8125BF8(u8, struct SaveSection *); -u16 sub_8125C10(void *, u16); -u8 sub_8125C3C(u8 a1); -u8 sub_8125D44(u8 a1); +u16 CalculateChecksum(void *, u16); +u8 HandleSavingData(u8 saveType); +u8 TrySavingData(u8 saveType); u8 sub_8125D80(void); bool8 sub_8125DA8(void); u8 sub_8125DDC(void); diff --git a/include/script_menu.h b/include/script_menu.h new file mode 100644 index 000000000..7a504556e --- /dev/null +++ b/include/script_menu.h @@ -0,0 +1,31 @@ +#ifndef GUARD_SCRIPTMENU_H +#define GUARD_SCRIPTMENU_H + +struct MultichoiceListStruct +{ + struct MenuAction *list; + u8 count; +}; + +bool8 sub_80B5054(u8 left, u8 top, u8 var3, u8 var4); +bool8 sub_80B50B0(u8 left, u8 top, u8 var3, u8 var4, u8 var5); +u16 GetStringWidthInTilesForScriptMenu(const u8 *str); +void DrawMultichoiceMenu(u8, u8, u8, struct MenuAction *list, u8, u8); +void sub_80B5230(u8, u8, u8, u8, u8, u8); +void sub_80B52B4(u8); +bool8 Multichoice(u8 var1, u8 var2, u8 var3, u8 var4); +void sub_80B53B4(u8, u8, u8, struct MenuAction *list, u8); +bool8 yes_no_box(u8 var1, u8 var2); +bool8 IsScriptActive(void); // unused +void task_yes_no_maybe(u8); +bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount); +void sub_80B5684(u8); +bool8 TryCreatePCMenu(void); +void CreatePCMenu(void); +void sub_80B5838(void); +void task_picbox(u8 taskId); +bool8 sub_80B58C4(u16 var1, u8 var2, u8 var3); +void *picbox_close(void); +bool8 sub_80B59AC(void); + +#endif diff --git a/include/script_pokemon_80C4.h b/include/script_pokemon_80C4.h new file mode 100644 index 000000000..6d4e689b5 --- /dev/null +++ b/include/script_pokemon_80C4.h @@ -0,0 +1,22 @@ +#ifndef GUARD_SCRIPTPOKE80C4_H +#define GUARD_SCRIPTPOKE80C4_H + +struct MonCoords +{ + u8 x, y; +}; + +void sub_80C5190(u8); +void sub_80C5580(void); +void SetBattleTowerPlayerParty(void); +void ReducePlayerPartyToThree(void); + +u8 sub_80C4D50(void); +void ShowContestWinner(void); +void HealPlayerParty(); +u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8); +u8 ScriptGiveEgg(u16); +void ScriptWildBattle(u16, u8, u16); +void ScriptSetMonMoveSlot(u8, u16, u8); + +#endif diff --git a/include/script_pokemon_80F9.h b/include/script_pokemon_80F9.h new file mode 100644 index 000000000..d65c99c15 --- /dev/null +++ b/include/script_pokemon_80F9.h @@ -0,0 +1,17 @@ +#ifndef GUARD_SCRIPTPOKE80F9_H +#define GUARD_SCRIPTPOKE80F9_H + +struct UnknownStruct2018000 +{ + u8 filler0[0x8]; + u8 unk8; +}; + +extern struct UnknownStruct2018000 unk_2018000; + +void sub_80F9A8C(u8); +void sub_80F9C00(void); +void sub_80F9E1C(void); +void sub_80F99CC(void); + +#endif diff --git a/include/trainer_see.h b/include/trainer_see.h index e4d1fe270..dd04912e7 100644 --- a/include/trainer_see.h +++ b/include/trainer_see.h @@ -30,5 +30,7 @@ void sub_80846E4(u8 taskId); void sub_8084794(u32 var); void sub_80847C8(void); void sub_80847D8(u8); +void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3); +void objc_exclamation_mark_probably(struct Sprite *sprite); #endif // GUARD_TRAINER_SEE_H diff --git a/include/vars.h b/include/vars.h index e041e33bb..3fc71dc15 100644 --- a/include/vars.h +++ b/include/vars.h @@ -23,4 +23,6 @@ #define VAR_BARBOACH_SIZE_RECORD 0x404F +#define VAR_PORTHOLE 0x40B4 + #endif // GUARD_VARS_H |