diff options
Diffstat (limited to 'include')
82 files changed, 3262 insertions, 254 deletions
diff --git a/include/asm.h b/include/asm.h new file mode 100644 index 000000000..ec0516497 --- /dev/null +++ b/include/asm.h @@ -0,0 +1,36 @@ +#ifndef PROJECT_ASM_H +#define PROJECT_ASM_H + +#include "task.h" +#include "main.h" +#include "sprite.h" +#include "asm_fieldmap.h" + +struct UnkInputStruct +{ + u8 input_field_0; + u8 input_field_1; + u8 input_field_2; + u8 input_field_3; +}; + +struct UnknownStruct_FPA +{ + u8 unk0; + u8 unk1; + u8 unk2; + s16 unk4; + s16 unk6; + u8 unk8; + u8 unk9; + u8 unkA_0:4; + u8 unkA_4:4; + u16 unkC; + u16 unkE; + u32 unk10; + u16 unk14; +}; + +#include "asm.inc.h" + +#endif //PROJECT_ASM_H diff --git a/include/asm.inc.h b/include/asm.inc.h new file mode 100644 index 000000000..3e7c5fa99 --- /dev/null +++ b/include/asm.inc.h @@ -0,0 +1,494 @@ +// asm/rom3.o +void sub_800C35C(void); + +// asm/rom_800D42C.o +void sub_800E7C4(void); +u8 b_first_side(u8, u8, u8); +void sub_80157C4(u8 index); +u8 sub_8015A98(u8, u8, u8); +u8 sub_8018324(u8, u8, u8, u8, u16); +void sub_8032AA8(u8 index, int i); + +// src/pokemon_3.o +u16 SpeciesToNationalPokedexNum(u16); + +// asm/pokemon_3.o +void DrawSpindaSpots(u16, u32, void *, u8); +u8 sub_803FC58(u16); +void AdjustFriendship(struct Pokemon *, u8); +void sub_80408BC(); +void current_map_music_set__default_for_battle(u16); + +// asm/util.o +void StoreWordInTwoHalfwords(u16 *, u32); +void LoadWordFromTwoHalfwords(u16 *, u32 *); + +// asm/daycare.o +u8 daycare_count_pokemon(u8 *); +void sub_8041324(struct BoxPokemon *, void *); +void sub_8041790(int i); +u16 sub_8041870(u16); +void sub_8041940(void); +void sub_8041950(void); +u8 daycare_relationship_score_from_savegame(void); + +// asm/pokeball.o +void CreatePokeballSprite(u8 r0, u8 r1, u8 r2, u8 r3, u8 s1, u8 s2, u8 s3, u16 s4); + +// 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); +u8 GetFieldObjectIdByLocalIdAndMap(u8, u8, u8); +bool8 TryGetFieldObjectIdByLocalIdAndMap(u8, u8, u8, u8 *); +u8 GetFieldObjectIdByXY(s16, s16); +void RemoveFieldObjectByLocalIdAndMap(u8, u8, u8); +u8 SpawnSpecialFieldObject(struct UnknownStruct_FPA *); +u8 show_sprite(u8, u8, u8); +u8 AddPseudoFieldObject(u8 val, void (*player)(struct Sprite *), int i, int i1, int i2); +u8 sub_805B410(u8, u8, s16, s16, u8, u8); +void sub_805B55C(int i, int i1); +void sub_805B710(int i, int i1); +void sub_805B980(struct MapObject *, u8); +void FieldObjectTurn(struct MapObject *, u8); +void FieldObjectTurnByLocalIdAndMap(u8, u8, u8, u8); +struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8); +void npc_by_local_id_and_map_set_field_1_bit_x20(u8, u8, u8, u8); +void FieldObjectGetLocalIdAndMap(struct MapObject *, u8 *, u8 *, u8 *); +void sub_805BCF0(u8, u8, u8, u8); +void sub_805BD48(u8, u8, u8); +void sub_805BD90(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); +void gpu_pal_allocator_reset__manage_upper_four(void); +void npc_coords_shift(struct MapObject *pObject, s16 x, s16 y); +void sub_805C0F8(u8, u8, u8, s16, s16); +void npc_coords_shift_still(struct MapObject *pObject); +u8 GetFieldObjectIdByXYZ(u16, u16, int); +void UpdateFieldObjectsForCameraUpdate(s16, s16); +u8 AddCameraObject(u8); +u8 * GetFieldObjectScriptPointerByFieldObjectId(u8); +u8 FieldObjectGetBerryTreeId(u8); +void sub_805C754(struct MapObject *pObject); +void sub_805C774(struct MapObject *, u8 ); +void sub_805C78C(u8, u8, u8); +void sub_805C7C4(int i); +u8 FieldObjectDirectionToImageAnimId(u8); +u8 get_go_image_anim_num(u8 unk_19); +u8 sub_805FD98(u8); +u8 sub_805FDE8(u8); +u8 sub_805FDF8(u8); +u8 sub_805FE08(u8); +void npc_set_running_behaviour_etc(struct MapObject *, u8); +u8 npc_running_behaviour_by_direction(u8); +u8 npc_block_way(struct MapObject *, s16, s16, u8); +u8 sub_8060024(struct MapObject *, s16, s16, u8); +u8 sub_8060234(u8, u8, u8); +void sub_8060288(u8, u8, u8); +void sub_80603CC(s16 x, s16 y, s16 *pInt, s16 *pInt1); +void FieldObjectMoveDestCoords(struct MapObject *pObject, u8 unk_19, s16 *pInt, s16 *pInt1); +bool8 FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(struct MapObject *); +void FieldObjectSetSpecialAnim(struct MapObject *, u8); +void FieldObjectForceSetSpecialAnim(struct MapObject *pObject, u8 a); +void FieldObjectClearAnimIfSpecialAnimActive(struct MapObject *); +void FieldObjectClearAnim(struct MapObject *); +bool8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *); +u8 FieldObjectClearAnimIfSpecialAnimFinished(struct MapObject *); +u8 FieldObjectGetSpecialAnim(struct MapObject *); +u8 GetFaceDirectionAnimId(u8); +u8 GetSimpleGoAnimId(u8); +u8 GetGoSpeed0AnimId(u8 a); +u8 sub_8060744(u8 a); +u8 d2s_08064034(u8 a); +u8 sub_806079C(u8 a); +u8 sub_80607F4(u8 a); +u8 GetJumpLedgeAnimId(u8 a); +u8 sub_806084C(u8); +u8 sub_8060878(u8); +u8 sub_80608D0(u8); +u8 GetStepInPlaceDelay32AnimId(u8 a); +u8 GetStepInPlaceDelay16AnimId(u8); +u8 GetStepInPlaceDelay8AnimId(u8 a); +u8 FieldObjectFaceOppositeDirection(void *, u8); +u8 sub_80609D8(u8); +u8 sub_8060A04(u8); +u8 sub_8060A30(u8); +u8 sub_8060A5C(u8); +u8 sub_8060A88(u8); +u8 sub_8060AB4(u8); +u8 sub_8060AE0(u8); +u8 sub_8060B0C(u8); +u8 sub_8060B38(u8); +u8 sub_8060B64(u8); +u8 GetOppositeDirection(u8); + +// asm/field_ground_effect.o +u8 GetLedgeJumpDirection(s16, s16, u8); +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 sub_8067EEC(struct UnkInputStruct *pStruct); +void process_overworld_input(struct UnkInputStruct *pStruct, u16 keys, u16 heldKeys); +int sub_8068024(struct UnkInputStruct *pStruct); +u8 *sub_80682A8(void *, u8, u8); +void overworld_poison_timer_set(void); +void prev_quest_postbuffer_cursor_backup_reset(void); +u8 *sub_8068E24(struct UnkStruct_8054FF8_Substruct *); +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); + +// asm/party_menu.o +void GetMonNickname(struct Pokemon *mon, u8 *nickname); +bool8 pokemon_has_move(struct Pokemon *, u16); + +// asm/rom_8077ABC.o +u8 battle_side_get_owner(u8); +u8 battle_get_per_side_status(u8); +u8 battle_get_side_with_given_state(u8); +bool8 IsDoubleBattle(); + +// asm/weather.o +void SetWeather(u32); + +// asm/rom_8080874.o +void pal_fill_black(); +void sub_8080990(void); +void sub_80809B0(void); +void sub_8080A3C(void); +void sub_8080AC4(void); +void mapldr_default(); +void sub_8080B60(void); +void atk17_seteffectuser(void); +void sub_8080E44(void); +void sub_8080E88(void); +void sp13E_warp_to_last_warp(void); +void sub_8080EF0(void); +void sp13F_fall_to_last_warp(void); +void sub_8080F68(void); +void sub_8081594(u8); +void sub_80815E0(u8 val); + +// asm/cable_club.o +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 *); +u8 CreateBirchSprite(u8, u8, u8); + +// asm/unknown_task.o +void remove_some_task(void); +void dp12_8087EA4(void); +void sub_80895F8(u32 i, u32 i1, u32 i2); +void sub_8089668(void); +void sub_8089944(int i, int i1, int i2, int i3, int i4, int i5, int i6); + +// asm/pokemon_menu.o +void sub_8089A70(void); +void sub_808AB90(void); + +// asm/pokemon_storage_system.o +void sub_80961D8(void); + +// asm/pokemon_icon.o +u8 sub_809D3A4(u16 arg0, void (*)(struct Sprite *), int, u8 arg3, u32 arg4); +u16 sub_809D4A8(u16); +void sub_809D510(struct Sprite *); +void sub_809D580(u16); +void sub_809D608(u16); + +// asm/pokemon_summary_screen.o +u8 pokemon_ailments_get_primary(u32); + +// asm/script_movement.o +u8 exec_movement(u8, u8, u8, void *); +bool8 sub_80A212C(u8, u8, u8); +void sub_80A2178(void); + +// asm/mail_data.o +void sub_80A2B18(void); +u16 sub_80A2D64(u16, u8 *); + +// asm/map_name_popup.o +void AddMapNamePopUpWindowTask(void); +void HideMapNamePopUpWindow(); + +// asm/item_menu.o +void sub_80A3684(void); +void sub_80A3714(void); +void sub_80A53F8(void); +void sub_80A5B40(void); +void sub_80A68CC(); +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); +void sub_80AE398(u8, u8); +u32 sub_80AE770(u8, u8); +void sub_80AE82C(u8); +void sub_80AF668(void); +void sub_80B0F28(u8); +void sub_80B2D1C(void); + +// asm/shop.o +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, struct SaveBlock2 *r1, u16 r2, u16 r3, u8 s0, MainCallback s4); + +// asm/secret_base.o +void sub_80BB5B4(void); +u8 sub_80BBB24(void); +void sub_80BBCCC(u8); +u8 *sub_80BCCE8(void); +void sub_80BD674(void *, u32, u8); + +// asm/tv.o +void sub_80BD7A8(void); +void UpdateTVScreensOnMap(u32, u32); +void sub_80BDAB4(void); +u8 sub_80BDEAC(u8 *); +void sub_80BE160(TVShow *); +void sub_80BE8EC(u16); +void UpdateMassOutbreakTimeLeft(u16); +void sub_80BE97C(u8); +void sub_80BEA50(u16); +void sub_80BEA5C(u16); +bool8 GetPriceReduction(u8); +void sub_80BEE84(u16); +u8 sub_80BF0B8(u32); +void sub_80BF478(void); +u16 sub_80BF674(u16 species); +s8 sub_80BF720(TVShow *); +u8 sub_80BF77C(u32); +void sub_80BFD44(void *, u32, u8); +void sub_80C0514(void *, u32, u8); + +// src/tv.o +void StartMassOutbreak(void); +void TVShowDone(void); + +// asm/contest_link_80C2020.o +void sub_80C2358(void); +void sub_80C48C8(void); +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); +void CreateRecordMixingSprite(void); +void DestroyRecordMixingSprite(void); + +// asm/rotating_gate.o +void RotatingGatePuzzleCameraUpdate(s16, s16); +void sub_80C8080(); +u32 CheckForRotatingGatePuzzleCollision(u8, s16, s16); + +// asm/contest_link_80C857C.o +void sub_80C8734(u8); +void sub_80C88AC(u8); +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 sub_80E5DEC(u8); +bool8 player_should_look_direction_be_enforced_upon_movement(void); +void sub_80E5FCC(int i, int i1); +void sub_80E6010(int i); +s16 sub_80E6034(void); +void sub_80E6084(); + +// asm/easy_chat.o +void sub_80E6764(void); +void sub_80EB3FC(u8 *, u16); +u8 ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16, u16); +u16 sub_80EB72C(u16); + +// asm/pokenav.o +void sub_80EBA5C(void); + +// asm/mauville_old_man.o +void sub_80F7AA4(void); +void sub_80F7F30(void); + +// asm/menu_helpers.o +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_80FA46C(struct EasyChatPair *, u16, u8); +void sub_80FA4E4(struct EasyChatPair *, u32, u8); +bool8 sub_80FA670(struct EasyChatPair *, struct EasyChatPair *, u8); +void sub_80FA740(struct EasyChatPair *); +bool8 SB1ContainsWords(u16 *); +bool8 IsEasyChatPairEqual(u16 *, u16 *); + +// asm/region_map.o +void sub_80FBFB4(u8 *str, u8 region, u8); +void CopyMapName(); +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); +s16 sub_810CAE4(u8, struct Pokeblock *); + +// asm/rom_810CBB4.o +void sub_810CC80(void); +u8 sub_810D32C(void); +void ResetCyclingRoadChallengeData(void); +void ScriptAddElevatorMenuItem(u8, u8, u8, u8); +void ScriptShowElevatorMenu(void); +u8 GetLeadMonIndex(void); +void sub_810FA54(void); + +// asm/battle_records.o +void InitLinkBattleRecords(void); + +// asm/battle_transition.o +void sub_811AABC(u8); +void sub_811AAD8(u8); +u8 sub_811AAE8(void); + +// src/mystery_event_script.o +u32 sub_812613C(u8 *); +void sub_8126160(u8); + +// asm/mystery_event_script.o +u16 sub_8126338(void); + +// asm/field_effect_helpers.o +u8 sub_8126B54(void); +void objid_set_invisible(u8); +void sub_8126BC4(u8 unk_1B, u8 r6, s16 x, s16 y); +void sub_8127ED0(u8, u8); +void sub_8127F28(u8, u8, s16); +u8 sub_8128124(u8 id); + +// asm/rom_81258BC.o +void sub_8132670(void); +void sub_8133F80(void); +u8 sub_8133FE4(u8); +u8 IsThereStorageSpaceForDecoration(u8); +u8 sub_8134074(u8); +s8 sub_81340A8(u8); +void sub_81341F8(void); +void sub_813420C(void); +void mapnumbers_history_shift_sav1_0_2_4_out(void); +void sub_8134348(void); +void sub_8134394(); +u8 sub_81344CC(void); +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*/); +u8 sub_8148EC0(/*TODO: arg types*/); +void sub_8149020(/*TODO: arg types*/); +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/asm_fieldmap.h b/include/asm_fieldmap.h new file mode 100644 index 000000000..10d8c8f6d --- /dev/null +++ b/include/asm_fieldmap.h @@ -0,0 +1,23 @@ +#ifndef GUARD_FIELDMAP_H +#define GUARD_FIELDMAP_H + +void not_trainer_hill_battle_pyramid(void); +void sub_8055FC0(void); +u8 MapGridGetZCoordAt(); +bool8 MapGridIsImpassableAt(s16, s16); +int MapGridGetMetatileIdAt(int, int); +u32 MapGridGetMetatileBehaviorAt(int x, int y); // return: (u8|u16|int) args: (int|s16|s32) +u8 MapGridGetMetatileLayerTypeAt(/*TODO: arg types*/); +void MapGridSetMetatileIdAt(u32, u32, u16); +void save_serialize_map(void); +int CameraMove(int, int); +void sub_8056C50(u16, u16); +void sav1_camera_get_focus_coords(s16 *x, s16 *y); +void GetCameraCoords(s16*, s16*); +void sub_8056D28(struct MapData *pData); +void sub_8056D38(struct MapData *pData); +void apply_map_tileset2_palette(struct MapData *pData); +void copy_map_tileset1_tileset2_to_vram(/*TODO: arg types*/); +void apply_map_tileset1_tileset2_palette(/*TODO: arg types*/); + +#endif // GUARD_FIELDMAP_H diff --git a/include/battle.h b/include/battle.h index 06daeb081..d58b234e3 100644 --- a/include/battle.h +++ b/include/battle.h @@ -1,6 +1,22 @@ #ifndef GUARD_BATTLE_H #define GUARD_BATTLE_H +#define BATTLE_TYPE_DOUBLE 0x0001 +#define BATTLE_TYPE_LINK 0x0002 +#define BATTLE_TYPE_WILD 0x0004 +#define BATTLE_TYPE_TRAINER 0x0008 +#define BATTLE_TYPE_FIRST_BATTLE 0x0010 +#define BATTLE_TYPE_20 0x0020 +#define BATTLE_TYPE_40 0x0040 +#define BATTLE_TYPE_SAFARI 0x0080 +#define BATTLE_TYPE_BATTLE_TOWER 0x0100 +#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200 +#define BATTLE_TYPE_ROAMER 0x0400 +#define BATTLE_TYPE_EREADER_TRAINER 0x0800 +#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000 +#define BATTLE_TYPE_LEGENDARY 0x2000 +#define BATTLE_TYPE_REGI 0x4000 + struct Trainer { /*0x00*/ u8 partyFlags; @@ -16,4 +32,39 @@ struct Trainer /*0x24*/ void *party; }; +struct AI_ThinkingStruct /* 0x2016800 */ +{ +/* 0x00 */ u8 unk0; +/* 0x01 */ u8 moveConsidered; +/* 0x02 */ u16 unk2; +/* 0x04 */ s8 score[4]; // score? +/* 0x08 */ u32 unk8; +/* 0x0C */ u32 aiFlags; +/* 0x10 */ u8 unk10; +/* 0x11 */ u8 aiLogicId; +/* 0x12 */ u8 filler12[6]; +/* 0x18 */ u8 unk18[4]; +}; + +struct SmallBattleStruct1 +{ + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; +}; + +struct BattleStruct /* 0x2000000 */ +{ + u8 filler0[0x1601C]; + struct SmallBattleStruct1 unk; + u8 filler1[0xAB]; // 0x2016020 + /* 0x160CB */ u8 linkPlayerIndex; + u8 filler2[0x734]; + struct AI_ThinkingStruct ai; +}; + +extern struct BattleStruct battle_2000000; +extern struct AI_ThinkingStruct gAIThinkingSpace; + #endif // GUARD_BATTLE_H diff --git a/include/battle_setup.h b/include/battle_setup.h new file mode 100644 index 000000000..6271a3cc5 --- /dev/null +++ b/include/battle_setup.h @@ -0,0 +1,84 @@ +#ifndef GUARD_BATTLE_SETUP_H +#define GUARD_BATTLE_SETUP_H + +// task01_battle_start +// task_add_01_battle_start +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 StartBattle_ScriptedWild(void); +// StartBattle_SouthernIsland +// StartBattle_Rayquaza +// StartBattle_GroudonKyogre +// StartBattle_Regi +void HandleWildBattleEnd(void); +void HandleScriptedWildBattleEnd(void); +// GetBattleTerrain +// GetBattleTransitionTypeByMap +// GetSumOfPartyMonLevel +// GetSumOfEnemyPartyLevel +u8 GetWildBattleTransition(void); +u8 GetTrainerBattleTransition(void); +// GetBattleTowerBattleTransition +// ChooseStarter +void CB2_GiveStarter(void); +void CB2_StartFirstBattle(void); +void HandleFirstBattleEnd(void); +// TrainerBattleLoadArg32 +// TrainerBattleLoadArg16 +// TrainerBattleLoadArg8 +// trainerflag_opponent +bool32 battle_exit_is_player_defeat(u32 a1); +// sub_80822BC +// TrainerBattleLoadArgs +// battle_80801F0 +u8 *TrainerBattleConfigure(u8 *data); +void TrainerWantsBattle(u8, u8 *); +bool32 GetTrainerFlagFromScriptPointer(u8 *data); +// sub_8082524 +// sub_8082558 +// sub_8082564 +// sub_808257C +// unref_sub_8082590 +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 +u8 *sub_80826E8(void); +u8 *sub_8082700(void); +// sub_8082718 +// PlayTrainerEncounterMusic +// SanitizeString +u8 *sub_808281C(void); +// sub_8082830 +// unref_sub_808286C +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 +// sub_8082B78 +// sub_8082BA4 +void sub_8082BD0(u16, u16); +// sub_8082C0C +// unref_sub_8082C2C +u16 sub_8082C4C(u16 a1); +// sub_8082C68 +// sub_8082C9C +void sub_8082CB8(void); + +#endif // GUARD_BATTLE_SETUP_H diff --git a/include/berry.h b/include/berry.h index a80e77512..152f92e38 100644 --- a/include/berry.h +++ b/include/berry.h @@ -1,57 +1,38 @@ #ifndef GUARD_BERRY_H #define GUARD_BERRY_H -struct Berry -{ - u8 name[7]; - u8 firmness; - u16 size; - u8 maxYield; - u8 minYield; - u8 *description1; - u8 *description2; - u8 stageDuration; - u8 spicy; - u8 dry; - u8 sweet; - u8 bitter; - u8 sour; - u8 smoothness; -}; - -struct EnigmaBerry -{ - struct Berry berry; - u8 pic[(6 * 6) * TILE_SIZE_4BPP]; - u16 palette[16]; - u8 description1[45]; - u8 description2[45]; - u8 itemEffect[18]; - u8 holdEffect; - u8 holdEffectParam; - u32 checksum; -}; - -struct BattleEnigmaBerry -{ - u8 name[7]; - u8 holdEffect; - u8 itemEffect[18]; - u8 holdEffectParam; -}; - -struct BerryTree -{ - u8 berry; - u8 stage:7; - u8 growthSparkle:1; - u16 secondsUntilNextStage; - u8 berryYield; - u8 regrowthCount:4; - u8 watered1:1; - u8 watered2:1; - u8 watered3:1; - u8 watered4:1; -}; +void ClearEnigmaBerries(void); +void SetEnigmaBerry(u8 *src); +u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry); +bool32 IsEnigmaBerryValid(void); +struct Berry *GetBerryInfo(u8 berry); +struct BerryTree *GetBerryTreeInfo(u8 id); +bool32 FieldObjectInteractionWaterBerryTree(void); +bool32 IsPlayerFacingPlantedBerryTree(void); +u8 TryToWaterBerryTree(void); +void ClearBerryTrees(void); +bool32 BerryTreeGrow(struct BerryTree *tree); +void BerryTreeTimeUpdate(int time); +void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle); +void RemoveBerryTree(u8 id); +u8 GetBerryTypeByBerryTreeId(u8 id); +u8 GetStageByBerryTreeId(u8); +u8 ItemIdToBerryType(u16 item); +u16 BerryTypeToItemId(u16 berry); +void GetBerryNameByBerryType(u8 berry, u8 *string); +void ResetBerryTreeSparkleFlag(u8 id); +u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree); +u8 GetNumStagesWateredByBerryTreeId(u8 id); +u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water); +u8 CalcBerryYield(struct BerryTree *tree); +u8 GetBerryCountByBerryTreeId(u8 id); +u16 GetStageDurationByBerryType(u8); +void FieldObjectInteractionGetBerryTreeData(void); +void sub_80B4EE4(void); +void FieldObjectInteractionPlantBerryTree(void); +void FieldObjectInteractionPickBerryTree(void); +void FieldObjectInteractionRemoveBerryTree(void); +u8 PlayerHasBerries(void); +void ResetBerryTreeSparkleFlags(void); #endif // GUARD_BERRY_H diff --git a/include/berry_tag_screen.h b/include/berry_tag_screen.h new file mode 100644 index 000000000..60932ff80 --- /dev/null +++ b/include/berry_tag_screen.h @@ -0,0 +1,6 @@ +#ifndef GUARD_BERRY_TAG_SCREEN_H +#define GUARD_BERRY_TAG_SCREEN_H + +void BerryTagScreen_814625C(u8 taskId); + +#endif // GUARD_BERRY_TAG_SCREEN_H diff --git a/include/blend_palette.h b/include/blend_palette.h new file mode 100644 index 000000000..a00847bc3 --- /dev/null +++ b/include/blend_palette.h @@ -0,0 +1,6 @@ +#ifndef GUARD_BLEND_PALETTE_H +#define GUARD_BLEND_PALETTE_H + +void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor); + +#endif // GUARD_BLEND_PALETTE_H diff --git a/include/coins.h b/include/coins.h new file mode 100644 index 000000000..d066c2422 --- /dev/null +++ b/include/coins.h @@ -0,0 +1,12 @@ +#ifndef GUARD_COINS_H +#define GUARD_COINS_H + +void UpdateCoinsWindow(s32 a, u8 b, u8 c); +void ShowCoinsWindow(u32 a, u8 b, u8 c); +void HideCoinsWindow(u8 a, u8 b); +void PrintCoins(s32 a, u8 b, u8 c, u8 d); +u16 GetCoins(void); +bool8 GiveCoins(u16 coins); +bool8 TakeCoins(u16 coins); + +#endif // GUARD_COINS_H diff --git a/include/config.h b/include/config.h new file mode 100644 index 000000000..5ee062006 --- /dev/null +++ b/include/config.h @@ -0,0 +1,25 @@ +#ifndef GUARD_CONFIG_H +#define GUARD_CONFIG_H + +#ifndef REVISION +#define REVISION 0 +#endif + +#if REVISION == 2 +#define BUGFIX_BERRY +#endif + +#if REVISION >= 1 +#define BUGFIX_GLYPHWIDTH +#define BUGFIX_SAVEFAILEDSCREEN1 +#endif + +// #define BUGFIX_SAVEFAILEDSCREEN2 + +// European editions of Ruby/Sapphire and all editions of Emerald have this fix. +// #define BUGFIX_TRAINERAPPROACH + +// Fixed in Emerald. +// #define BUGFIX_SETMONIVS + +#endif // GUARD_CONFIG_H diff --git a/include/decompress.h b/include/decompress.h new file mode 100644 index 000000000..28570afdd --- /dev/null +++ b/include/decompress.h @@ -0,0 +1,17 @@ +#ifndef GUARD_DECOMPRESS_H +#define GUARD_DECOMPRESS_H + +#include "sprite.h" + +void sub_800D238(const void *src, void *dest); +void LZDecompressVram(const void *src, void *dest); +void LoadCompressedObjectPic(const struct SpriteSheet *a); +void LoadCompressedObjectPicOverrideBuffer(const struct SpriteSheet *a, void *buffer); +void LoadCompressedObjectPalette(const struct SpritePalette *a); +void LoadCompressedObjectPaletteOverrideBuffer(const struct SpritePalette *a, void *buffer); +void DecompressPicFromTable_2(const struct SpriteSheet *a, u8 b, u8 c, void *d, void *e, s32 f); +void HandleLoadSpecialPokePic(const struct SpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g); +void LoadSpecialPokePic(const struct SpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g, u32 h); +void Unused_LZDecompressWramIndirect(const void **src, void *dest); + +#endif // GUARD_DECOMPRESS_H diff --git a/include/event_data.h b/include/event_data.h new file mode 100644 index 000000000..5cac27cc8 --- /dev/null +++ b/include/event_data.h @@ -0,0 +1,28 @@ +#ifndef GUARD_EVENT_DATA_H +#define GUARD_EVENT_DATA_H + +#include "flags.h" +#include "vars.h" + +void InitEventData(void); +void ClearTempFieldEventData(void); +void ClearUpperFlags(void); +void DisableNationalPokedex(void); +void EnableNationalPokedex(void); +bool32 IsNationalPokedexEnabled(void); +void DisableMysteryGift(void); +void EnableMysteryGift(void); +bool32 IsMysteryGiftEnabled(void); +void DisableResetRTC(void); +void EnableResetRTC(void); +bool32 CanResetRTC(void); +u16 *GetVarPointer(u16 id); +u16 VarGet(u16 id); +bool8 VarSet(u16 id, u16 value); +u8 VarGetFieldObjectGraphicsId(u8 id); +u8 *GetFlagPointer(u16 id); +u8 FlagSet(u16 id); +u8 FlagReset(u16 id); +bool8 FlagGet(u16 id); + +#endif // GUARD_EVENT_DATA_H diff --git a/include/field_camera.h b/include/field_camera.h new file mode 100644 index 000000000..51c370d0a --- /dev/null +++ b/include/field_camera.h @@ -0,0 +1,18 @@ +#ifndef GUARD_FIELD_CAMERA_H +#define GUARD_FIELD_CAMERA_H + +void move_tilemap_camera_to_upper_left_corner(void); +void sub_8057A58(void); +void sub_8057B14(u16 *a, u16 *b); +void DrawWholeMapView(void); +void CurrentMapDrawMetatileAt(int a, int b); +void DrawDoorMetatileAt(int x, int y, u16 *arr); +void ResetCameraUpdateInfo(void); +u32 InitCameraUpdateCallback(u8 a); +void CameraUpdate(void); +void SetCameraPanningCallback(void (*a)(void)); +void SetCameraPanning(s16 a, s16 b); +void InstallCameraPanAheadCallback(void); +void UpdateCameraPanning(void); + +#endif // GUARD_FIELD_CAMERA_H diff --git a/include/field_effect.h b/include/field_effect.h new file mode 100644 index 000000000..a46c048cb --- /dev/null +++ b/include/field_effect.h @@ -0,0 +1,29 @@ +#ifndef GUARD_FIELD_EFFECT_H +#define GUARD_FIELD_EFFECT_H + +#include "sprite.h" + +u32 FieldEffectStart(u8 id); +bool8 FieldEffectCmd_loadtiles(u8 **script, u32 *val); +bool8 FieldEffectCmd_loadfadedpal(u8 **script, u32 *val); +bool8 FieldEffectCmd_loadpal(u8 **script, u32 *val); +bool8 FieldEffectCmd_callnative(u8 **script, u32 *val); +bool8 FieldEffectCmd_end(u8 **script, u32 *val); +bool8 FieldEffectCmd_loadgfx_callnative(u8 **script, u32 *val); +bool8 FieldEffectCmd_loadtiles_callnative(u8 **script, u32 *val); +bool8 FieldEffectCmd_loadfadedpal_callnative(u8 **script, u32 *val); +u32 FieldEffectScript_ReadWord(u8 **script); +void FieldEffectScript_LoadTiles(u8 **script); +void FieldEffectScript_LoadFadedPalette(u8 **script); +void FieldEffectScript_LoadPalette(u8 **script); +void FieldEffectScript_CallNative(u8 **script, u32 *val); +void FieldEffectFreeGraphicsResources(struct Sprite *sprite); +void FieldEffectStop(struct Sprite *sprite, u8 id); +void FieldEffectFreeTilesIfUnused(u16 tileStart); +void FieldEffectFreePaletteIfUnused(u8 paletteNum); +void FieldEffectActiveListClear(void); +void FieldEffectActiveListAdd(u8 id); +void FieldEffectActiveListRemove(u8 id); +bool8 FieldEffectActiveListContains(u8 id); + +#endif // GUARD_FIELD_EFFECT_H diff --git a/include/field_map_obj.h b/include/field_map_obj.h new file mode 100644 index 000000000..c31b0fc2a --- /dev/null +++ b/include/field_map_obj.h @@ -0,0 +1,11 @@ +#ifndef GUARD_FIELD_MAP_OBJ_H +#define GUARD_FIELD_MAP_OBJ_H + +#include "sprite.h" + +void sub_805C058(struct MapObject *mapObject, s16 a, s16 b); +void FieldObjectSetDirection(struct MapObject *pObject, u8 unk_18); +void MoveCoords(u8 direction, s16 *x, s16 *y); +void meta_step(struct MapObject *pObject, struct Sprite *pSprite, u32 (*d8)(void)); + +#endif // GUARD_FIELD_MAP_OBJ_H diff --git a/include/field_message_box.h b/include/field_message_box.h index 072a9fd66..50d96ccd1 100644 --- a/include/field_message_box.h +++ b/include/field_message_box.h @@ -12,8 +12,11 @@ enum void InitFieldMessageBox(void); bool8 ShowFieldMessage(u8 *message); bool8 ShowFieldAutoScrollMessage(u8 *message); +bool8 unref_sub_8064BB8(u8 *message); +bool8 unref_sub_8064BD0(u8 *message); void HideFieldMessageBox(void); u8 GetFieldMessageBoxMode(void); bool8 IsFieldMessageBoxHidden(void); +void unref_sub_8064CA0(void); #endif // GUARD_FIELD_MESSAGE_BOX_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h new file mode 100644 index 000000000..0095c229f --- /dev/null +++ b/include/field_player_avatar.h @@ -0,0 +1,112 @@ +#ifndef GUARD_FIELD_PLAYER_AVATAR_H +#define GUARD_FIELD_PLAYER_AVATAR_H + +// sub_80587B4 +void player_step(u8 a, u16 b, u16 c); +// ForcedMovement_None +// ForcedMovement_Slip +// sub_8058AAC +// sub_8058AC4 +// sub_8058ADC +// sub_8058AF4 +// sub_8058B0C +// sub_8058B24 +// sub_8058B3C +// sub_8058B54 +// ForcedMovement_SlideSouth +// ForcedMovement_SlideNorth +// ForcedMovement_SlideWest +// ForcedMovement_SlideEast +// sub_8058C04 +// sub_8058C10 +// ForcedMovement_MuddySlope +// PlayerNotOnBikeNotMoving +// PlayerNotOnBikeTurningInPlace +// sub_8058D0C +u8 CheckForFieldObjectCollision(struct MapObject *a, s16 b, s16 c, u8 d, u8 e); +void SetPlayerAvatarTransitionFlags(u16 a); +// nullsub_49 +// PlayerAvatarTransition_Normal +// PlayerAvatarTransition_MachBike +// PlayerAvatarTransition_AcroBike +// PlayerAvatarTransition_Surfing +// PlayerAvatarTransition_Underwater +// sub_80591F4 +void sub_8059204(void); +// player_get_x22 +// player_npc_set_state_and_x22_etc +void PlayerGoSpeed0(u8 a); +void sub_80593C4(u8 a); +void npc_use_some_d2s(u8 a); +// sub_80593F4 +void sub_805940C(u8 a); +// PlayerOnBikeCollide +void PlayerFaceDirection(u8 a); +void PlayerTurnInPlace(u8 a); +void PlayerJumpLedge(u8 a); +void sub_80594C0(void); +// sub_8059504 +// sub_805951C +// sub_8059534 +// sub_805954C +// sub_8059570 +// sub_8059594 +// sub_80595B8 +// sub_80595DC +// sub_8059600 +// sub_8059618 +// sub_8059630 +void GetXYCoordsOneStepInFrontOfPlayer(s16 *x, s16 *y); +void PlayerGetDestCoords(s16 *, s16 *); +u8 player_get_direction_lower_nybble(void); +u8 player_get_direction_upper_nybble(void); +// PlayerGetZCoord +u8 TestPlayerAvatarFlags(u8); +// sub_80597D0 +// GetPlayerAvatarObjectId +void sub_80597E8(void); +void sub_80597F4(void); +u8 sub_805983C(u8 a, u8 b); +u8 GetPlayerAvatarGraphicsIdByStateId(u8 a); +// GetPlayerAvatarGenderByGraphicsId +// PartyHasMonWithSurf +// IsPlayerSurfingNorth +bool8 IsPlayerFacingSurfableFishableWater(void); +// ClearPlayerAvatarInfo +void SetPlayerAvatarStateMask(u8 a); +// GetPlayerAvatarGraphicsIdByCurrentState +// SetPlayerAvatarExtraStateTransition +void InitPlayerAvatar(s16 a, s16 b, u8 c, u8 d); +// sub_8059B88 +// sub_8059BF4 +// sub_8059C3C +// sub_8059C94 +// sub_8059D08 +// sub_8059E84 +// sub_8059EA4 +// sub_8059F40 +// sub_805A000 +// sub_805A0D8 +// sub_805A100 +// sub_805A178 +// sub_805A1B8 +void sub_805A20C(u8 a); +void StartFishing(u8 a); +// Fishing1 +// Fishing2 +// Fishing3 +// Fishing4 +// Fishing5 +// Fishing6 +// Fishing7 +// Fishing8 +// Fishing9 +// Fishing10 +// Fishing11 +// Fishing12 +// Fishing13 +// Fishing14 +// Fishing15 +// Fishing16 + +#endif diff --git a/include/flag.h b/include/flag.h deleted file mode 100644 index 8f4c01b02..000000000 --- a/include/flag.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef GUARD_FLAG_H -#define GUARD_FLAG_H - -#include "flags.h" - -u8 *GetFlagPointer(u16 id); -u8 FlagSet(u16 id); -u8 FlagReset(u16 id); -bool8 FlagGet(u16 id); - -#endif // GUARD_FLAG_H diff --git a/include/flags.h b/include/flags.h index e2b14b16b..0c0cebc5f 100644 --- a/include/flags.h +++ b/include/flags.h @@ -5,9 +5,12 @@ // SYSTEM FLAGS -#define SYS_POKEMON_GET 0x800 -#define SYS_POKEDEX_GET 0x801 -#define SYS_POKENAV_GET 0x802 +#define SYS_POKEMON_GET 0x800 +#define SYS_POKEDEX_GET 0x801 +#define SYS_POKENAV_GET 0x802 +#define SYS_GAME_CLEAR 0x804 +#define SYS_CHAT_USED 0x805 +#define SYS_HIPSTER_MEET 0x806 // badges #define BADGE01_GET 0x807 @@ -19,20 +22,38 @@ #define BADGE07_GET 0x80D #define BADGE08_GET 0x80E -#define SYS_USE_FLASH 0x828 -#define SYS_USE_STRENGTH 0x829 -#define SYS_WEATHER_CTRL 0x82A -#define SYS_CYCLING_ROAD 0x82B -#define SYS_SAFARI_MODE 0x82C -#define SYS_CRUISE_MODE 0x82D - -#define SYS_POPWORD_INPUT 0x833 -#define SYS_MIX_RECORD 0x834 - -#define SYS_RIBBON_GET 0x83B - -#define SYS_ENC_UP_ITEM 0x84D -#define SYS_ENC_DOWN_ITEM 0x84E +#define SYS_USE_FLASH 0x828 +#define SYS_USE_STRENGTH 0x829 +#define SYS_WEATHER_CTRL 0x82A +#define SYS_CYCLING_ROAD 0x82B +#define SYS_SAFARI_MODE 0x82C +#define SYS_CRUISE_MODE 0x82D + +#define SYS_TV_HOME 0x830 +#define SYS_TV_WATCH 0x831 +#define SYS_TV_START 0x832 +#define SYS_POPWORD_INPUT 0x833 +#define SYS_MIX_RECORD 0x834 +#define SYS_CLOCK_SET 0x835 +#define SYS_NATIONAL_DEX 0x836 +#define SYS_CAVE_SHIP 0x837 +#define SYS_CAVE_WONDER 0x838 +#define SYS_CAVE_BATTLE 0x839 +#define SYS_SHOAL_TIDE 0x83A +#define SYS_RIBBON_GET 0x83B + +#define SYS_PC_LANETTE 0x84B +#define SYS_EXDATA_ENABLE 0x84C +#define SYS_ENC_UP_ITEM 0x84D +#define SYS_ENC_DOWN_ITEM 0x84E +#define SYS_BRAILLE_DIG 0x84F +#define SYS_BRAILLE_STRENGTH 0x850 +#define SYS_BRAILLE_WAIT 0x851 +#define SYS_BRAILLE_FLY 0x852 + +#define SYS_B_DASH 0x860 // got Running Shoes +#define SYS_CTRL_OBJ_DELETE 0x861 +#define SYS_RESET_RTC_ENABLE 0x862 // SPECIAL FLAGS (unknown purpose) diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index f5d44de99..572b77711 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -1,3 +1,6 @@ +#ifndef GUARD_M4A_INTERNAL_H +#define GUARD_M4A_INTERNAL_H + #include "gba/gba.h" // ASCII encoding of 'Smsh' in reverse @@ -460,3 +463,5 @@ void ply_xleng(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xswee(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xcmd_0C(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xcmd_0D(struct MusicPlayerInfo *, struct MusicPlayerTrack *); + +#endif // GUARD_M4A_INTERNAL_H diff --git a/include/gba/macro.h b/include/gba/macro.h index 62d3e73fa..230fb4383 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -25,6 +25,8 @@ CPU_FAST_SET_SRC_FIXED | ((size)/(32/8) & 0x1FFFFF)); \ } +#define CpuFastFill16(value, dest, size) CpuFastFill(((value) << 16) | (value), (dest), (size)) + #define CpuFastCopy(src, dest, size) CpuFastSet(src, dest, ((size)/(32/8) & 0x1FFFFF)) #define DmaSet(dmaNum, src, dest, control) \ diff --git a/include/gba/syscall.h b/include/gba/syscall.h index 9576f7e99..e47f964d1 100644 --- a/include/gba/syscall.h +++ b/include/gba/syscall.h @@ -31,6 +31,8 @@ void CpuSet(const void *src, void *dest, u32 control); void CpuFastSet(const void *src, void *dest, u32 control); +void BgAffineSet(struct BgAffineSrcData *src, struct BgAffineDstData *dest, s32 count); + void ObjAffineSet(struct ObjAffineSrcData *src, void *dest, s32 count, s32 offset); void LZ77UnCompWram(const void *src, void *dest); diff --git a/include/gba/types.h b/include/gba/types.h index be7390d5a..fd8a20a4c 100644 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -74,6 +74,27 @@ struct OamData #define ST_OAM_H_RECTANGLE 1 #define ST_OAM_V_RECTANGLE 2 +struct BgAffineSrcData +{ + s32 texX; + s32 texY; + s16 scrX; + s16 scrY; + s16 sx; + s16 sy; + u16 alpha; +}; + +struct BgAffineDstData +{ + s16 pa; + s16 pb; + s16 pc; + s16 pd; + s32 dx; + s32 dy; +}; + struct ObjAffineSrcData { s16 xScale; diff --git a/include/global.berry.h b/include/global.berry.h new file mode 100644 index 000000000..8b98a5f58 --- /dev/null +++ b/include/global.berry.h @@ -0,0 +1,57 @@ +#ifndef GUARD_GLOBAL_BERRY_H +#define GUARD_GLOBAL_BERRY_H + +struct Berry +{ + u8 name[7]; + u8 firmness; + u16 size; + u8 maxYield; + u8 minYield; + u8 *description1; + u8 *description2; + u8 stageDuration; + u8 spicy; + u8 dry; + u8 sweet; + u8 bitter; + u8 sour; + u8 smoothness; +}; + +struct EnigmaBerry +{ + struct Berry berry; + u8 pic[(6 * 6) * TILE_SIZE_4BPP]; + u16 palette[16]; + u8 description1[45]; + u8 description2[45]; + u8 itemEffect[18]; + u8 holdEffect; + u8 holdEffectParam; + u32 checksum; +}; + +struct BattleEnigmaBerry +{ + u8 name[7]; + u8 holdEffect; + u8 itemEffect[18]; + u8 holdEffectParam; +}; + +struct BerryTree +{ + u8 berry; + u8 stage:7; + u8 growthSparkle:1; + u16 secondsUntilNextStage; + u8 berryYield; + u8 regrowthCount:4; + u8 watered1:1; + u8 watered2:1; + u8 watered3:1; + u8 watered4:1; +}; + +#endif // GUARD_GLOBAL_BERRY_H diff --git a/include/fieldmap.h b/include/global.fieldmap.h index 9e841a3f3..95ccf2614 100644 --- a/include/fieldmap.h +++ b/include/global.fieldmap.h @@ -1,16 +1,45 @@ -#ifndef GUARD_FIELDMAP_H -#define GUARD_FIELDMAP_H +#ifndef GUARD_GLOBAL_FIELDMAP_H +#define GUARD_GLOBAL_FIELDMAP_H enum { - CONNECTION_DOWN = 1, - CONNECTION_UP, - CONNECTION_LEFT, - CONNECTION_RIGHT, + CONNECTION_SOUTH = 1, + CONNECTION_NORTH, + CONNECTION_WEST, + CONNECTION_EAST, CONNECTION_DIVE, CONNECTION_EMERGE }; +// map types +enum +{ + MAP_TYPE_0, + MAP_TYPE_TOWN, + MAP_TYPE_CITY, + MAP_TYPE_ROUTE, + MAP_TYPE_UNDERGROUND, + MAP_TYPE_UNDERWATER, + MAP_TYPE_6, + MAP_TYPE_7, + MAP_TYPE_INDOOR, + MAP_TYPE_SECRET_BASE +}; + +// map battle scenes +enum +{ + MAP_BATTLE_SCENE_NORMAL, // 0 + MAP_BATTLE_SCENE_GYM, // 1 + MAP_BATTLE_SCENE_MAGMA, // 2 + MAP_BATTLE_SCENE_AQUA, // 3 + MAP_BATTLE_SCENE_SIDNEY, // 4 + MAP_BATTLE_SCENE_PHOEBE, // 5 + MAP_BATTLE_SCENE_GLACIA, // 6 + MAP_BATTLE_SCENE_DRAKE, // 7 + MAP_BATTLE_SCENE_BATTLE_TOWER, // 8 +}; + typedef void (*TilesetCB)(void); struct Tileset @@ -28,8 +57,8 @@ struct MapData { s32 width; s32 height; - void *border; - void *map; + u16 *border; + u16 *map; struct Tileset *primaryTileset; struct Tileset *secondaryTileset; }; @@ -58,7 +87,8 @@ struct WarpEvent struct CoordEvent { s16 x, y; - u8 filler_4[0x2]; + u8 filler_4; + u8 filler_5; u16 trigger; u16 index; u8 filler_A[0x2]; @@ -91,8 +121,8 @@ struct MapConnection { u8 direction; u32 offset; - s8 mapGroup; - s8 mapNum; + u8 mapGroup; + u8 mapNum; }; struct MapConnections @@ -112,7 +142,7 @@ struct MapHeader u8 name; u8 cave; u8 weather; - /* 0x17 */ u8 light; + /* 0x17 */ u8 mapType; u8 filler_18; u8 escapeRope; u8 flags; @@ -172,10 +202,11 @@ struct MapObject /*0x1B*/ u8 mapobj_unk_1B; /*0x1C*/ u8 mapobj_unk_1C; /*0x1D*/ u8 trainerRange_berryTreeId; - /*0x1E */ u8 mapobj_unk_1E; + /*0x1E*/ u8 mapobj_unk_1E; /*0x1F*/ u8 mapobj_unk_1F; /*0x20*/ u8 mapobj_unk_20; /*0x21*/ u8 mapobj_unk_21; + /*0x22*/ u8 mapobj_unk_22; /*size = 0x24*/ }; @@ -234,7 +265,7 @@ struct MapObject2 /*0x1B*/ u8 mapobj_unk_1B; /*0x1C*/ u8 mapobj_unk_1C; /*0x1D*/ u8 trainerRange_berryTreeId; - /*0x1E */ u8 mapobj_unk_1E; + /*0x1E*/ u8 mapobj_unk_1E; /*0x1F*/ u8 mapobj_unk_1F; /*0x20*/ u8 mapobj_unk_20; /*0x21*/ u8 mapobj_unk_21; @@ -261,14 +292,25 @@ struct MapObjectGraphicsInfo union AffineAnimCmd **affineAnims; }; +#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0) +#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1) +#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2) +#define PLAYER_AVATAR_FLAG_SURFING (1 << 3) +#define PLAYER_AVATAR_FLAG_4 (1 << 4) +#define PLAYER_AVATAR_FLAG_5 (1 << 5) +#define PLAYER_AVATAR_FLAG_6 (1 << 6) +#define PLAYER_AVATAR_FLAG_DASH (1 << 7) + struct PlayerAvatar { - /* 0x00 */ u8 bitfield; - /* 0x01 */ u8 bike; - /* 0x02 */ u8 running2; - /* 0x03 */ u8 running1; - /* 0x04 */ u8 spriteId; - /* 0x05 */ u8 mapObjectId; + /*0x00*/ u8 flags; + /*0x01*/ u8 bike; + /*0x02*/ u8 running2; + /*0x03*/ u8 running1; + /*0x04*/ u8 spriteId; + /*0x05*/ u8 mapObjectId; + /*0x06*/ u8 unk6; + /*0x07*/ u8 gender; // TODO: rest of struct }; @@ -277,4 +319,4 @@ extern u8 gSelectedMapObject; extern struct MapHeader gMapHeader; extern struct PlayerAvatar gPlayerAvatar; -#endif // GUARD_FIELDMAP_H +#endif // GUARD_GLOBAL_FIELDMAP_H diff --git a/include/global.h b/include/global.h index b1bfa25ad..a5932d175 100644 --- a/include/global.h +++ b/include/global.h @@ -2,10 +2,7 @@ #define GUARD_GLOBAL_H #include "gba/gba.h" - -#ifndef REVISION -#define REVISION 0 -#endif +#include "config.h" // Prevent cross-jump optimization. #define BLOCK_CROSS_JUMP asm(""); @@ -27,8 +24,17 @@ enum { VERSION_SAPPHIRE = 1, VERSION_RUBY = 2, + VERSION_EMERALD = 3, +}; + +enum LanguageId { + LANGUAGE_JAPANESE = 1, + LANGUAGE_ENGLISH = 2, + LANGUAGE_GERMAN = 5, }; +#define GAME_LANGUAGE (LANGUAGE_ENGLISH) + enum { MALE, @@ -61,6 +67,15 @@ enum OPTIONS_BATTLE_STYLE_SET }; +enum +{ + BAG_ITEMS = 1, + BAG_POKEBALLS, + BAG_TMsHMs, + BAG_BERRIES, + BAG_KEYITEMS +}; + struct Coords16 { s16 x; @@ -95,8 +110,8 @@ struct SecretBaseRecord }; #include "game_stat.h" -#include "fieldmap.h" -#include "berry.h" +#include "global.fieldmap.h" +#include "global.berry.h" #include "pokemon.h" struct WarpData @@ -169,6 +184,93 @@ struct EasyChatPair u16 words[2]; }; /*size = 0x8*/ +struct TVShowCommon { + /*0x00*/ u8 var00; + /*0x01*/ u8 var01; +}; + +struct TVShowFanClubLetter { + /*0x00*/ u8 var00; + /*0x01*/ u8 var01; + /*0x02*/ u16 species; + u8 pad04[12]; + /*0x10*/ u8 playerName[8]; + /*0x18*/ u8 var18; +}; + +struct TVShowRecentHappenings { + /*0x00*/ u8 var00; + /*0x01*/ u8 var01; + /*0x02*/ u16 var02; + u8 pad04[12]; + /*0x10*/ u8 var10[8]; + /*0x18*/ u8 var18; + u8 pad19[10]; +}; + +struct TVShowFanclubOpinions { + /*0x00*/ u8 var00; + /*0x01*/ u8 var01; + /*0x02*/ u16 var02; + /*0x04*/ u8 var04A:4; + u8 var04B:4; + /*0x04*/ u8 var05[8]; + /*0x0D*/ u8 var0D; + /*0x0E*/ u8 var0E; + /*0x0F*/ u8 var0F; + /*0x10*/ u8 var10[8]; +}; + +struct TVShowNameRaterShow { + /*0x00*/ u8 var00; + /*0x01*/ u8 var01; + /*0x02*/ u16 species; + /*0x04*/ u8 pokemonName[11]; + /*0x0F*/ u8 trainerName[11]; + /*0x1A*/ u8 random; + /*0x1B*/ u8 random2; + /*0x1C*/ u16 var1C; + /*0x1E*/ u8 language; + /*0x1F*/ u8 var1F; +}; + +struct TVShowMassOutbreak { + /*0x00*/ u8 var00; + /*0x01*/ u8 var01; + /*0x02*/ u8 var02; + /*0x03*/ u8 var03; + /*0x04*/ u16 moves[4]; + /*0x0C*/ u16 species; + /*0x0E*/ u16 var0E; + /*0x10*/ u8 locationMapNum; + /*0x11*/ u8 locationMapGroup; + /*0x12*/ u8 var12; + /*0x13*/ u8 probability; + /*0x14*/ u8 level; + /*0x15*/ u8 var15; + /*0x16*/ u16 var16; + /*0x18*/ u8 var18; + u8 pad19[11]; +}; + +typedef union TVShow { + struct TVShowCommon common; + struct TVShowFanClubLetter fanclubLetter; + struct TVShowRecentHappenings recentHappenings; + struct TVShowFanclubOpinions fanclubOpinions; + struct TVShowNameRaterShow nameRaterShow; + struct TVShowMassOutbreak massOutbreak; +} TVShow; + +struct MailStruct +{ + /*0x00*/ u16 words[9]; + /*0x12*/ u8 playerName[8]; + /*0x1A*/ u8 trainerId[4]; + /*0x1E*/ u16 species; + /*0x20*/ u16 itemId; +}; + struct SaveBlock1 { /*0x00*/ struct Coords16 pos; @@ -218,17 +320,23 @@ struct SaveBlock1 /*0x2704*/ u8 decorDoll[40]; /*0x272C*/ u8 decorCushion[10]; /*0x2736*/ u8 padding_2736[2]; - /*0x2738*/ u8 tvShows[24][36]; // TODO: TV show struct + /*0x2738*/ TVShow tvShows[24]; /*0x2A98*/ u8 filler_2A98[0x64]; /*0x2AFC*/ u16 outbreakPokemonSpecies; /*0x2AFE*/ u8 outbreakLocationMapNum; /*0x2AFF*/ u8 outbreakLocationMapGroup; /*0x2B00*/ u8 outbreakPokemonLevel; - /*0x2B01*/ u8 filler_2B01[3]; + /*0x2B01*/ u8 outbreakUnk1; + /*0x2B02*/ u16 outbreakUnk2; /*0x2B04*/ u16 outbreakPokemonMoves[4]; - /*0x2B0C*/ u8 unk2B0C; + /*0x2B0C*/ u8 outbreakUnk4; /*0x2B0D*/ u8 outbreakPokemonProbability; - /*0x2B0E*/ u8 filler_2B0E[0x2C6]; + /*0x2B0E*/ u16 outbreakUnk5; + /*0x2B10*/ u8 filler_2B0E[0xC]; + /*0x2B1C*/ u16 unk2B1C[4]; + /*0x2B24*/ u8 filler_2B24[0x28]; + /*0x2B4C*/ struct MailStruct mail[16]; + /*0x2D8C*/ u8 filler_2D8C[0x48]; /*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]; @@ -251,10 +359,10 @@ extern struct SaveBlock1 gSaveBlock1; struct Time { - s16 days; - s8 hours; - s8 minutes; - s8 seconds; + /*0x00*/ s16 days; + /*0x02*/ s8 hours; + /*0x03*/ s8 minutes; + /*0x04*/ s8 seconds; }; struct Pokedex @@ -270,18 +378,26 @@ struct Pokedex /*0x44*/ u8 seen[52]; }; -struct SaveBlock2 +struct SaveBlock2_Sub +{ + /*0x0000, 0x00A8*/ u8 filler_000[0x4C8]; + /*0x04C8, 0x0570*/ u16 var_4C8; + /*0x04CA, 0x0572*/ u16 var_4CA; + /*0x04CC, 0x0574*/ u8 filler_4CC[0x31C]; +}; + +struct SaveBlock2 /* 0x02024EA4 */ { /*0x00*/ u8 playerName[8]; /*0x08*/ u8 playerGender; // MALE, FEMALE - /*0x09*/ u8 sb2_field_9; + /*0x09*/ u8 specialSaveWarp; /*0x0A*/ u8 playerTrainerId[4]; /*0x0E*/ u16 playTimeHours; /*0x10*/ u8 playTimeMinutes; /*0x11*/ u8 playTimeSeconds; /*0x12*/ u8 playTimeVBlanks; /*0x13*/ u8 optionsButtonMode; // OPTIONS_BUTTON_MODE_[NORMAL/LR/L_EQUALS_A] - u16 optionsTextSpeed:3; // OPTIONS_TEXT_SPEED_[SLOW/MID/FAST] + /*0x14*/ u16 optionsTextSpeed:3; // OPTIONS_TEXT_SPEED_[SLOW/MID/FAST] u16 optionsWindowFrameType:5; // Specifies one of the 20 decorative borders for text boxes u16 optionsSound:1; // OPTIONS_SOUND_[MONO/STEREO] u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET] @@ -291,7 +407,24 @@ struct SaveBlock2 /*0x90*/ u8 filler_90[0x8]; /*0x98*/ struct Time localTimeOffset; /*0xA0*/ struct Time lastBerryTreeUpdate; - /*0xA8*/ u8 filler_A8[0x7E8]; + /*0xA8*/ struct SaveBlock2_Sub filler_A8; +}; + +struct UnkStruct_8054FF8_Substruct +{ + s16 x; + s16 y; + u8 field_8; +}; + +struct UnkStruct_8054FF8 +{ + u8 a; + u8 b; + u8 c; + u8 d; + struct UnkStruct_8054FF8_Substruct sub; + u16 field_C; }; extern struct SaveBlock2 gSaveBlock2; diff --git a/include/heal_location.h b/include/heal_location.h new file mode 100644 index 000000000..785918bd6 --- /dev/null +++ b/include/heal_location.h @@ -0,0 +1,18 @@ +#ifndef GUARD_HEAL_LOCATION_H +#define GUARD_HEAL_LOCATION_H + +#include "sprite.h" + +struct HealLocation +{ + s8 group; + s8 map; + u16 x; + u16 y; +}; + +u32 GetHealLocationIndexByMap(u16 mapGroup, u16 mapNum); +const struct HealLocation *GetHealLocationByMap(u16 mapGroup, u16 mapNum); +const struct HealLocation *GetHealLocation(u32 index); + +#endif // GUARD_HEAL_LOCATION_H diff --git a/include/hold_effects.h b/include/hold_effects.h new file mode 100644 index 000000000..b653f5a92 --- /dev/null +++ b/include/hold_effects.h @@ -0,0 +1,72 @@ +#ifndef GUARD_HOLD_EFFECTS_H +#define GUARD_HOLD_EFFECTS_H + +#define HOLD_EFFECT_NONE 0 +#define HOLD_EFFECT_RESTORE_HP 1 +#define HOLD_EFFECT_CURE_PAR 2 +#define HOLD_EFFECT_CURE_SLP 3 +#define HOLD_EFFECT_CURE_PSN 4 +#define HOLD_EFFECT_CURE_BRN 5 +#define HOLD_EFFECT_CURE_FRZ 6 +#define HOLD_EFFECT_RESTORE_PP 7 +#define HOLD_EFFECT_CURE_CONFUSION 8 +#define HOLD_EFFECT_CURE_STATUS 9 +#define HOLD_EFFECT_CONFUSE_SPICY 10 +#define HOLD_EFFECT_CONFUSE_DRY 11 +#define HOLD_EFFECT_CONFUSE_SWEET 12 +#define HOLD_EFFECT_CONFUSE_BITTER 13 +#define HOLD_EFFECT_CONFUSE_SOUR 14 +#define HOLD_EFFECT_ATTACK_UP 15 +#define HOLD_EFFECT_DEFENSE_UP 16 +#define HOLD_EFFECT_SPEED_UP 17 +#define HOLD_EFFECT_SP_ATTACK_UP 18 +#define HOLD_EFFECT_SP_DEFENSE_UP 19 +#define HOLD_EFFECT_CRITICAL_UP 20 +#define HOLD_EFFECT_RANDOM_STAT_UP 21 +#define HOLD_EFFECT_EVASION_UP 22 +#define HOLD_EFFECT_RESTORE_STATS 23 +#define HOLD_EFFECT_MACHO_BRACE 24 +#define HOLD_EFFECT_EXP_SHARE 25 +#define HOLD_EFFECT_QUICK_CLAW 26 +#define HOLD_EFFECT_HAPPINESS_UP 27 +#define HOLD_EFFECT_CURE_ATTRACT 28 +#define HOLD_EFFECT_CHOICE_BAND 29 +#define HOLD_EFFECT_FLINCH 30 +#define HOLD_EFFECT_BUG_POWER 31 +#define HOLD_EFFECT_DOUBLE_PRIZE 32 +#define HOLD_EFFECT_REPEL 33 +#define HOLD_EFFECT_SOUL_DEW 34 +#define HOLD_EFFECT_DEEP_SEA_TOOTH 35 +#define HOLD_EFFECT_DEEP_SEA_SCALE 36 +#define HOLD_EFFECT_CAN_ALWAYS_RUN 37 +#define HOLD_EFFECT_PREVENT_EVOLVE 38 +#define HOLD_EFFECT_FOCUS_BAND 39 +#define HOLD_EFFECT_LUCKY_EGG 40 +#define HOLD_EFFECT_SCOPE_LENS 41 +#define HOLD_EFFECT_STEEL_POWER 42 +#define HOLD_EFFECT_LEFTOVERS 43 +#define HOLD_EFFECT_DRAGON_SCALE 44 +#define HOLD_EFFECT_LIGHT_BALL 45 +#define HOLD_EFFECT_GROUND_POWER 46 +#define HOLD_EFFECT_ROCK_POWER 47 +#define HOLD_EFFECT_GRASS_POWER 48 +#define HOLD_EFFECT_DARK_POWER 49 +#define HOLD_EFFECT_FIGHTING_POWER 50 +#define HOLD_EFFECT_ELECTRIC_POWER 51 +#define HOLD_EFFECT_WATER_POWER 52 +#define HOLD_EFFECT_FLYING_POWER 53 +#define HOLD_EFFECT_POISON_POWER 54 +#define HOLD_EFFECT_ICE_POWER 55 +#define HOLD_EFFECT_GHOST_POWER 56 +#define HOLD_EFFECT_PSYCHIC_POWER 57 +#define HOLD_EFFECT_FIRE_POWER 58 +#define HOLD_EFFECT_DRAGON_POWER 59 +#define HOLD_EFFECT_NORMAL_POWER 60 +#define HOLD_EFFECT_UP_GRADE 61 +#define HOLD_EFFECT_SHELL_BELL 62 +#define HOLD_EFFECT_LUCKY_PUNCH 63 +#define HOLD_EFFECT_METAL_POWDER 64 +#define HOLD_EFFECT_THICK_CLUB 65 +#define HOLD_EFFECT_STICK 66 + +#endif // GUARD_HOLD_EFFECTS_H diff --git a/include/intro.h b/include/intro.h new file mode 100644 index 000000000..a859a9ce4 --- /dev/null +++ b/include/intro.h @@ -0,0 +1,7 @@ +#ifndef GUARD_INTRO_H +#define GUARD_INTRO_H + +void c2_copyright_1(void); +void CB2_InitCopyrightScreen(void); + +#endif // GUARD_INTRO_H diff --git a/include/item.h b/include/item.h new file mode 100644 index 000000000..cc917dbc8 --- /dev/null +++ b/include/item.h @@ -0,0 +1,35 @@ +#ifndef GUARD_ITEM_H +#define GUARD_ITEM_H + +typedef void (*ItemUseFunc)(u8); + +void CopyItemName(u16 itemId, u8 *string); +bool8 IsBagPocketNonEmpty(u8 pocket); +bool8 CheckBagHasItem(u16 itemId, u16 count); +bool8 CheckBagHasSpace(u16 itemId, u16 count); +bool8 AddBagItem(u16 itemId, u16 count); +bool8 RemoveBagItem(u16 itemId, u16 count); +u8 GetPocketByItemId(u16 itemId); +void ClearItemSlots(struct ItemSlot *itemSlots, u8 b); +u8 CountUsedPCItemSlots(void); +bool8 CheckPCHasItem(u16 itemId, u16 count); +bool8 AddPCItem(u16 itemId, u16 count); +void RemovePCItem(u8 index, u16 count); +void SwapRegisteredBike(void); +struct Item *ItemId_GetItem(u16 itemId); +u16 ItemId_GetId(u16 itemId); +u16 ItemId_GetPrice(u16 itemId); +u8 ItemId_GetHoldEffect(u16 itemId); +u8 ItemId_GetHoldEffectParam(u16 itemId); +u8 *ItemId_GetDescription(u16 itemId); +bool8 ItemId_CopyDescription(u8 *a, u32 itemId, u32 c); +u8 ItemId_GetImportance(u16 itemId); +u8 ItemId_GetUnknownValue(u16 itemId); +u8 ItemId_GetPocket(u16 itemId); +u8 ItemId_GetType(u16 itemId); +ItemUseFunc ItemId_GetFieldFunc(u16 itemId); +u8 ItemId_GetBattleUsage(u16 itemId); +ItemUseFunc ItemId_GetBattleFunc(u16 itemId); +u8 ItemId_GetSecondaryId(u16 itemId); + +#endif // GUARD_ITEM_H diff --git a/include/items.h b/include/items.h new file mode 100644 index 000000000..8f6dceb6a --- /dev/null +++ b/include/items.h @@ -0,0 +1,315 @@ +#ifndef GUARD_ITEMS_H +#define GUARD_ITEMS_H + +#define ITEM_NONE 0x000 +#define ITEM_MASTER_BALL 0x001 +#define ITEM_ULTRA_BALL 0x002 +#define ITEM_GREAT_BALL 0x003 +#define ITEM_POKE_BALL 0x004 +#define ITEM_SAFARI_BALL 0x005 +#define ITEM_NET_BALL 0x006 +#define ITEM_DIVE_BALL 0x007 +#define ITEM_NEST_BALL 0x008 +#define ITEM_REPEAT_BALL 0x009 +#define ITEM_TIMER_BALL 0x00a +#define ITEM_LUXURY_BALL 0x00b +#define ITEM_PREMIER_BALL 0x00c +#define ITEM_POTION 0x00d +#define ITEM_ANTIDOTE 0x00e +#define ITEM_BURN_HEAL 0x00f +#define ITEM_ICE_HEAL 0x010 +#define ITEM_AWAKENING 0x011 +#define ITEM_PARALYZE_HEAL 0x012 +#define ITEM_FULL_RESTORE 0x013 +#define ITEM_MAX_POTION 0x014 +#define ITEM_HYPER_POTION 0x015 +#define ITEM_SUPER_POTION 0x016 +#define ITEM_FULL_HEAL 0x017 +#define ITEM_REVIVE 0x018 +#define ITEM_MAX_REVIVE 0x019 +#define ITEM_FRESH_WATER 0x01a +#define ITEM_SODA_POP 0x01b +#define ITEM_LEMONADE 0x01c +#define ITEM_MOOMOO_MILK 0x01d +#define ITEM_ENERGY_POWDER 0x01e +#define ITEM_ENERGY_ROOT 0x01f +#define ITEM_HEAL_POWDER 0x020 +#define ITEM_REVIVAL_HERB 0x021 +#define ITEM_ETHER 0x022 +#define ITEM_MAX_ETHER 0x023 +#define ITEM_ELIXIR 0x024 +#define ITEM_MAX_ELIXIR 0x025 +#define ITEM_LAVA_COOKIE 0x026 +#define ITEM_BLUE_FLUTE 0x027 +#define ITEM_YELLOW_FLUTE 0x028 +#define ITEM_RED_FLUTE 0x029 +#define ITEM_BLACK_FLUTE 0x02a +#define ITEM_WHITE_FLUTE 0x02b +#define ITEM_BERRY_JUICE 0x02c +#define ITEM_SACRED_ASH 0x02d +#define ITEM_SHOAL_SALT 0x02e +#define ITEM_SHOAL_SHELL 0x02f +#define ITEM_RED_SHARD 0x030 +#define ITEM_BLUE_SHARD 0x031 +#define ITEM_YELLOW_SHARD 0x032 +#define ITEM_GREEN_SHARD 0x033 +#define ITEM_HP_UP 0x03f +#define ITEM_PROTEIN 0x040 +#define ITEM_IRON 0x041 +#define ITEM_CARBOS 0x042 +#define ITEM_CALCIUM 0x043 +#define ITEM_RARE_CANDY 0x044 +#define ITEM_PP_UP 0x045 +#define ITEM_ZINC 0x046 +#define ITEM_PP_MAX 0x047 +#define ITEM_GUARD_SPEC 0x049 +#define ITEM_DIRE_HIT 0x04a +#define ITEM_X_ATTACK 0x04b +#define ITEM_X_DEFEND 0x04c +#define ITEM_X_SPEED 0x04d +#define ITEM_X_ACCURACY 0x04e +#define ITEM_X_SPECIAL 0x04f +#define ITEM_POKE_DOLL 0x050 +#define ITEM_FLUFFY_TAIL 0x051 +#define ITEM_SUPER_REPEL 0x053 +#define ITEM_MAX_REPEL 0x054 +#define ITEM_ESCAPE_ROPE 0x055 +#define ITEM_REPEL 0x056 +#define ITEM_SUN_STONE 0x05d +#define ITEM_MOON_STONE 0x05e +#define ITEM_FIRE_STONE 0x05f +#define ITEM_THUNDER_STONE 0x060 +#define ITEM_WATER_STONE 0x061 +#define ITEM_LEAF_STONE 0x062 +#define ITEM_TINY_MUSHROOM 0x067 +#define ITEM_BIG_MUSHROOM 0x068 +#define ITEM_PEARL 0x06a +#define ITEM_BIG_PEARL 0x06b +#define ITEM_STARDUST 0x06c +#define ITEM_STAR_PIECE 0x06d +#define ITEM_NUGGET 0x06e +#define ITEM_HEART_SCALE 0x06f +#define ITEM_ORANGE_MAIL 0x079 +#define ITEM_HARBOR_MAIL 0x07a +#define ITEM_GLITTER_MAIL 0x07b +#define ITEM_MECH_MAIL 0x07c +#define ITEM_WOOD_MAIL 0x07d +#define ITEM_WAVE_MAIL 0x07e +#define ITEM_BEAD_MAIL 0x07f +#define ITEM_SHADOW_MAIL 0x080 +#define ITEM_TROPIC_MAIL 0x081 +#define ITEM_DREAM_MAIL 0x082 +#define ITEM_FAB_MAIL 0x083 +#define ITEM_RETRO_MAIL 0x084 +#define ITEM_CHERI_BERRY 0x085 +#define ITEM_CHESTO_BERRY 0x086 +#define ITEM_PECHA_BERRY 0x087 +#define ITEM_RAWST_BERRY 0x088 +#define ITEM_ASPEAR_BERRY 0x089 +#define ITEM_LEPPA_BERRY 0x08a +#define ITEM_ORAN_BERRY 0x08b +#define ITEM_PERSIM_BERRY 0x08c +#define ITEM_LUM_BERRY 0x08d +#define ITEM_SITRUS_BERRY 0x08e +#define ITEM_FIGY_BERRY 0x08f +#define ITEM_WIKI_BERRY 0x090 +#define ITEM_MAGO_BERRY 0x091 +#define ITEM_AGUAV_BERRY 0x092 +#define ITEM_IAPAPA_BERRY 0x093 +#define ITEM_RAZZ_BERRY 0x094 +#define ITEM_BLUK_BERRY 0x095 +#define ITEM_NANAB_BERRY 0x096 +#define ITEM_WEPEAR_BERRY 0x097 +#define ITEM_PINAP_BERRY 0x098 +#define ITEM_POMEG_BERRY 0x099 +#define ITEM_KELPSY_BERRY 0x09a +#define ITEM_QUALOT_BERRY 0x09b +#define ITEM_HONDEW_BERRY 0x09c +#define ITEM_GREPA_BERRY 0x09d +#define ITEM_TAMATO_BERRY 0x09e +#define ITEM_CORNN_BERRY 0x09f +#define ITEM_MAGOST_BERRY 0x0a0 +#define ITEM_RABUTA_BERRY 0x0a1 +#define ITEM_NOMEL_BERRY 0x0a2 +#define ITEM_SPELON_BERRY 0x0a3 +#define ITEM_PAMTRE_BERRY 0x0a4 +#define ITEM_WATMEL_BERRY 0x0a5 +#define ITEM_DURIN_BERRY 0x0a6 +#define ITEM_BELUE_BERRY 0x0a7 +#define ITEM_LIECHI_BERRY 0x0a8 +#define ITEM_GANLON_BERRY 0x0a9 +#define ITEM_SALAC_BERRY 0x0aa +#define ITEM_PETAYA_BERRY 0x0ab +#define ITEM_APICOT_BERRY 0x0ac +#define ITEM_LANSAT_BERRY 0x0ad +#define ITEM_STARF_BERRY 0x0ae +#define ITEM_ENIGMA_BERRY 0x0af +#define ITEM_BRIGHT_POWDER 0x0b3 +#define ITEM_WHITE_HERB 0x0b4 +#define ITEM_MACHO_BRACE 0x0b5 +#define ITEM_EXP_SHARE 0x0b6 +#define ITEM_QUICK_CLAW 0x0b7 +#define ITEM_SOOTHE_BELL 0x0b8 +#define ITEM_MENTAL_HERB 0x0b9 +#define ITEM_CHOICE_BAND 0x0ba +#define ITEM_KINGS_ROCK 0x0bb +#define ITEM_SILVER_POWDER 0x0bc +#define ITEM_AMULET_COIN 0x0bd +#define ITEM_CLEANSE_TAG 0x0be +#define ITEM_SOUL_DEW 0x0bf +#define ITEM_DEEP_SEA_TOOTH 0x0c0 +#define ITEM_DEEP_SEA_SCALE 0x0c1 +#define ITEM_SMOKE_BALL 0x0c2 +#define ITEM_EVERSTONE 0x0c3 +#define ITEM_FOCUS_BAND 0x0c4 +#define ITEM_LUCKY_EGG 0x0c5 +#define ITEM_SCOPE_LENS 0x0c6 +#define ITEM_METAL_COAT 0x0c7 +#define ITEM_LEFTOVERS 0x0c8 +#define ITEM_DRAGON_SCALE 0x0c9 +#define ITEM_LIGHT_BALL 0x0ca +#define ITEM_SOFT_SAND 0x0cb +#define ITEM_HARD_STONE 0x0cc +#define ITEM_MIRACLE_SEED 0x0cd +#define ITEM_BLACK_GLASSES 0x0ce +#define ITEM_BLACK_BELT 0x0cf +#define ITEM_MAGNET 0x0d0 +#define ITEM_MYSTIC_WATER 0x0d1 +#define ITEM_SHARP_BEAK 0x0d2 +#define ITEM_POISON_BARB 0x0d3 +#define ITEM_NEVER_MELT_ICE 0x0d4 +#define ITEM_SPELL_TAG 0x0d5 +#define ITEM_TWISTED_SPOON 0x0d6 +#define ITEM_CHARCOAL 0x0d7 +#define ITEM_DRAGON_FANG 0x0d8 +#define ITEM_SILK_SCARF 0x0d9 +#define ITEM_UP_GRADE 0x0da +#define ITEM_SHELL_BELL 0x0db +#define ITEM_SEA_INCENSE 0x0dc +#define ITEM_LAX_INCENSE 0x0dd +#define ITEM_LUCKY_PUNCH 0x0de +#define ITEM_METAL_POWDER 0x0df +#define ITEM_THICK_CLUB 0x0e0 +#define ITEM_STICK 0x0e1 +#define ITEM_RED_SCARF 0x0fe +#define ITEM_BLUE_SCARF 0x0ff +#define ITEM_PINK_SCARF 0x100 +#define ITEM_GREEN_SCARF 0x101 +#define ITEM_YELLOW_SCARF 0x102 +#define ITEM_MACH_BIKE 0x103 +#define ITEM_COIN_CASE 0x104 +#define ITEM_ITEMFINDER 0x105 +#define ITEM_OLD_ROD 0x106 +#define ITEM_GOOD_ROD 0x107 +#define ITEM_SUPER_ROD 0x108 +#define ITEM_SS_TICKET 0x109 +#define ITEM_CONTEST_PASS 0x10a +#define ITEM_WAILMER_PAIL 0x10c +#define ITEM_DEVON_GOODS 0x10d +#define ITEM_SOOT_SACK 0x10e +#define ITEM_BASEMENT_KEY 0x10f +#define ITEM_ACRO_BIKE 0x110 +#define ITEM_POKEBLOCK_CASE 0x111 +#define ITEM_LETTER 0x112 +#define ITEM_EON_TICKET 0x113 +#define ITEM_RED_ORB 0x114 +#define ITEM_BLUE_ORB 0x115 +#define ITEM_SCANNER 0x116 +#define ITEM_GO_GOGGLES 0x117 +#define ITEM_METEORITE 0x118 +#define ITEM_ROOM_1_KEY 0x119 +#define ITEM_ROOM_2_KEY 0x11a +#define ITEM_ROOM_4_KEY 0x11b +#define ITEM_ROOM_6_KEY 0x11c +#define ITEM_STORAGE_KEY 0x11d +#define ITEM_ROOT_FOSSIL 0x11e +#define ITEM_CLAW_FOSSIL 0x11f +#define ITEM_DEVON_SCOPE 0x120 +#define ITEM_TM01 0x121 +#define ITEM_TM02 0x122 +#define ITEM_TM03 0x123 +#define ITEM_TM04 0x124 +#define ITEM_TM05 0x125 +#define ITEM_TM06 0x126 +#define ITEM_TM07 0x127 +#define ITEM_TM08 0x128 +#define ITEM_TM09 0x129 +#define ITEM_TM10 0x12a +#define ITEM_TM11 0x12b +#define ITEM_TM12 0x12c +#define ITEM_TM13 0x12d +#define ITEM_TM14 0x12e +#define ITEM_TM15 0x12f +#define ITEM_TM16 0x130 +#define ITEM_TM17 0x131 +#define ITEM_TM18 0x132 +#define ITEM_TM19 0x133 +#define ITEM_TM20 0x134 +#define ITEM_TM21 0x135 +#define ITEM_TM22 0x136 +#define ITEM_TM23 0x137 +#define ITEM_TM24 0x138 +#define ITEM_TM25 0x139 +#define ITEM_TM26 0x13a +#define ITEM_TM27 0x13b +#define ITEM_TM28 0x13c +#define ITEM_TM29 0x13d +#define ITEM_TM30 0x13e +#define ITEM_TM31 0x13f +#define ITEM_TM32 0x140 +#define ITEM_TM33 0x141 +#define ITEM_TM34 0x142 +#define ITEM_TM35 0x143 +#define ITEM_TM36 0x144 +#define ITEM_TM37 0x145 +#define ITEM_TM38 0x146 +#define ITEM_TM39 0x147 +#define ITEM_TM40 0x148 +#define ITEM_TM41 0x149 +#define ITEM_TM42 0x14a +#define ITEM_TM43 0x14b +#define ITEM_TM44 0x14c +#define ITEM_TM45 0x14d +#define ITEM_TM46 0x14e +#define ITEM_TM47 0x14f +#define ITEM_TM48 0x150 +#define ITEM_TM49 0x151 +#define ITEM_TM50 0x152 +#define ITEM_HM01 0x153 +#define ITEM_HM02 0x154 +#define ITEM_HM03 0x155 +#define ITEM_HM04 0x156 +#define ITEM_HM05 0x157 +#define ITEM_HM06 0x158 +#define ITEM_HM07 0x159 +#define ITEM_HM08 0x15a +#define ITEM_OAKS_PARCEL 0x15d +#define ITEM_POKE_FLUTE 0x15e +#define ITEM_SECRET_KEY 0x15f +#define ITEM_BIKE_VOUCHER 0x160 +#define ITEM_GOLD_TEETH 0x161 +#define ITEM_OLD_AMBER 0x162 +#define ITEM_CARD_KEY 0x163 +#define ITEM_LIFT_KEY 0x164 +#define ITEM_HELIX_FOSSIL 0x165 +#define ITEM_DOME_FOSSIL 0x166 +#define ITEM_SILPH_SCOPE 0x167 +#define ITEM_BICYCLE 0x168 +#define ITEM_TOWN_MAP 0x169 +#define ITEM_VS_SEEKER 0x16a +#define ITEM_FAME_CHECKER 0x16b +#define ITEM_TM_CASE 0x16c +#define ITEM_BERRY_POUCH 0x16d +#define ITEM_TEACHY_TV 0x16e +#define ITEM_TRI_PASS 0x16f +#define ITEM_RAINBOW_PASS 0x170 +#define ITEM_TEA 0x171 +#define ITEM_MYSTIC_TICKET 0x172 +#define ITEM_AURORA_TICKET 0x173 +#define ITEM_POWDER_JAR 0x174 +#define ITEM_RUBY 0x175 +#define ITEM_SAPPHIRE 0x176 +#define ITEM_MAGMA_EMBLEM 0x177 +#define ITEM_OLD_SEA_MAP 0x178 + +#endif // GUARD_ITEMS_H diff --git a/include/landmark.h b/include/landmark.h new file mode 100644 index 000000000..eee5ac8c2 --- /dev/null +++ b/include/landmark.h @@ -0,0 +1,6 @@ +#ifndef GUARD_LANDMARK_H +#define GUARD_LANDMARK_H + +u8 *GetLandmarkName(u8 mapSection, u8 id, u8 count); + +#endif // GUARD_LANDMARK_H diff --git a/include/libgncmultiboot.h b/include/libgncmultiboot.h new file mode 100644 index 000000000..b4d1cd231 --- /dev/null +++ b/include/libgncmultiboot.h @@ -0,0 +1,16 @@ +#ifndef GUARD_LIBGNCMULTIBOOT_H +#define GUARD_LIBGNCMULTIBOOT_H + +struct GcmbStruct +{ + u16 gcmb_field_0; + u8 gcmb_field_2; +}; + +void GameCubeMultiBoot_Main(struct GcmbStruct *pStruct); +void GameCubeMultiBoot_ExecuteProgram(struct GcmbStruct *pStruct); +void GameCubeMultiBoot_Init(struct GcmbStruct *pStruct); +void GameCubeMultiBoot_HandleSerialInterrupt(struct GcmbStruct *pStruct); +void GameCubeMultiBoot_Quit(void); + +#endif // GUARD_LIBGNCMULTIBOOT_H diff --git a/include/link.h b/include/link.h index 550102fb9..49dff6547 100644 --- a/include/link.h +++ b/include/link.h @@ -1,8 +1,6 @@ #ifndef GUARD_LINK_H #define GUARD_LINK_H -#include "global.h" - #define MAX_LINK_PLAYERS 4 #define CMD_LENGTH 8 #define QUEUE_CAPACITY 50 @@ -64,14 +62,14 @@ enum struct LinkPlayer { - u16 version; - u16 lp_field_2; - u32 trainerId; - u8 name[11]; - u8 gender; - u32 linkType; - u16 lp_field_18; - u16 language; + /* 0x00 */ u16 version; + /* 0x02 */ u16 lp_field_2; + /* 0x04 */ u32 trainerId; + /* 0x05 */ u8 name[11]; + /* 0x10 */ u8 gender; + /* 0x14 */ u32 linkType; + /* 0x18 */ u16 lp_field_18; + /* 0x20 */ u16 language; }; struct LinkPlayerBlock @@ -126,11 +124,13 @@ struct Link extern struct Link gLink; extern u16 gRecvCmds[CMD_LENGTH][MAX_LINK_PLAYERS]; +extern u16 gLinkType; extern u32 gLinkStatus; extern u16 gSendCmd[CMD_LENGTH]; extern u8 gShouldAdvanceLinkState; extern struct LinkPlayer gLinkPlayers[]; extern u16 word_3002910[]; +extern bool8 gReceivedRemoteLinkPlayers; void Task_DestroySelf(u8); void sub_8007270(u8); diff --git a/include/load_save.h b/include/load_save.h new file mode 100644 index 000000000..a3c2c609c --- /dev/null +++ b/include/load_save.h @@ -0,0 +1,17 @@ +#ifndef GUARD_LOAD_SAVE_H +#define GUARD_LOAD_SAVE_H + +void CheckForFlashMemory(void); +bool32 GetSecretBase2Field_9(void); +void ClearSecretBase2Field_9(void); +void SetSecretBase2Field_9(void); +void SetSecretBase2Field_9_AndHideBG(void); +void ClearSecretBase2Field_9_2(void); +void SavePlayerParty(void); +void LoadPlayerParty(void); +void SaveSerializedGame(void); +void LoadSerializedGame(void); +void LoadPlayerBag(void); +void SavePlayerBag(void); + +#endif // GUARD_LOAD_SAVE_H diff --git a/include/lottery_corner.h b/include/lottery_corner.h new file mode 100644 index 000000000..5e2346d37 --- /dev/null +++ b/include/lottery_corner.h @@ -0,0 +1,12 @@ +#ifndef GUARD_LOTTERY_CORNER_H +#define GUARD_LOTTERY_CORNER_H + +void ResetLotteryCorner(void); +void SetRandomLotteryNumber(u16 i); +void RetrieveLotteryNumber(void); +void PickLotteryCornerTicket(void); +void SetLotteryNumber(u32 lotteryNum); +u32 GetLotteryNumber(void); +void SetLotteryNumber16_Unused(u16 lotteryNum); + +#endif // GUARD_LOTTERY_CORNER_H diff --git a/include/m4a.h b/include/m4a.h new file mode 100644 index 000000000..949403885 --- /dev/null +++ b/include/m4a.h @@ -0,0 +1,18 @@ +#ifndef GUARD_M4A_H +#define GUARD_M4A_H + +#include "gba/m4a_internal.h" + +void m4aSoundVSync(void); + +void m4aSoundInit(void); +void m4aSoundMain(void); +void m4aSongNumStart(u16); +void m4aSongNumStop(u16 n); +void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo); +void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed); +void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed); +void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed); +void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo); + +#endif //GUARD_M4A_H diff --git a/include/mail.h b/include/mail.h new file mode 100644 index 000000000..693b0b2dc --- /dev/null +++ b/include/mail.h @@ -0,0 +1,8 @@ +#ifndef GUARD_MAIL_H +#define GUARD_MAIL_H + +#include "main.h" + +void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2); + +#endif // GUARD_MAIL_H diff --git a/include/main.h b/include/main.h index 67595ac65..aef55a182 100644 --- a/include/main.h +++ b/include/main.h @@ -9,47 +9,49 @@ typedef void (*IntrFunc)(void); struct Main { - MainCallback callback1; - MainCallback callback2; + /*0x000*/ MainCallback callback1; + /*0x004*/ MainCallback callback2; - MainCallback field_8; + /*0x008*/ MainCallback savedCallback; - IntrCallback vblankCallback; - IntrCallback hblankCallback; - IntrCallback vcountCallback; - IntrCallback serialCallback; + /*0x00C*/ IntrCallback vblankCallback; + /*0x010*/ IntrCallback hblankCallback; + /*0x014*/ IntrCallback vcountCallback; + /*0x018*/ IntrCallback serialCallback; - vu16 intrCheck; + /*0x01C*/ vu16 intrCheck; - u32 vblankCounter1; - u32 vblankCounter2; + /*0x020*/ u32 vblankCounter1; + /*0x024*/ u32 vblankCounter2; - u16 heldKeysRaw; // held keys without L=A remapping - u16 newKeysRaw; // newly pressed keys without L=A remapping - u16 heldKeys; // held keys with L=A remapping - u16 newKeys; // newly pressed keys with L=A remapping - u16 newAndRepeatedKeys; // newly pressed keys plus key repeat - u16 keyRepeatCounter; // counts down to 0, triggering key repeat - bool16 watchedKeysPressed; // whether one of the watched keys was pressed - u16 watchedKeysMask; // bit mask for watched keys + /*0x028*/ u16 heldKeysRaw; // held keys without L=A remapping + /*0x02A*/ u16 newKeysRaw; // newly pressed keys without L=A remapping + /*0x02C*/ u16 heldKeys; // held keys with L=A remapping + /*0x02E*/ u16 newKeys; // newly pressed keys with L=A remapping + /*0x030*/ u16 newAndRepeatedKeys; // newly pressed keys plus key repeat + /*0x032*/ u16 keyRepeatCounter; // counts down to 0, triggering key repeat + /*0x034*/ bool16 watchedKeysPressed; // whether one of the watched keys was pressed + /*0x036*/ u16 watchedKeysMask; // bit mask for watched keys - u8 objCount; + /*0x038*/ u8 objCount; - struct OamData oamBuffer[128]; + /*0x03C*/ struct OamData oamBuffer[128]; - u8 state; + /*0x43C*/ u8 state; - u8 oamLoadDisabled:1; + /*0x43D*/ u8 oamLoadDisabled:1; + /*0x43D*/ u8 inBattle:1; }; extern u8 gUnknown_3001764; extern struct Main gMain; -extern u8 gUnknown_3001BB4; +extern bool8 gSoftResetDisabled; extern bool8 gLinkVSyncDisabled; extern const u8 gGameVersion; extern const u8 gGameLanguage; +void AgbMain(void); void SetMainCallback2(MainCallback callback); void InitKeys(void); void SetVBlankCallback(IntrCallback callback); diff --git a/include/main_menu.h b/include/main_menu.h new file mode 100644 index 000000000..08cd913dc --- /dev/null +++ b/include/main_menu.h @@ -0,0 +1,6 @@ +#ifndef GUARD_MAIN_MENU_H +#define GUARD_MAIN_MENU_H + +void CB2_InitMainMenu(void); + +#endif // GUARD_MAIN_MENU_H diff --git a/include/map_obj_lock.h b/include/map_obj_lock.h new file mode 100644 index 000000000..f7352be22 --- /dev/null +++ b/include/map_obj_lock.h @@ -0,0 +1,16 @@ +#ifndef GUARD_MAP_OBJ_LOCK_H +#define GUARD_MAP_OBJ_LOCK_H + +bool8 walkrun_is_standing_still(void); +void sub_8064CDC(u8 taskId); +bool8 sub_8064CFC(void); +void ScriptFreezeMapObjects(void); +void sub_8064D38(u8 taskId); +bool8 sub_8064DB4(void); +void sub_8064DD8(void); +void sub_8064E2C(void); +void unref_sub_8064E5C(void); +void sub_8064EAC(void); +void sub_8064ED4(void); + +#endif // GUARD_MAP_OBJ_LOCK_H diff --git a/include/menu.h b/include/menu.h index 6df47cf93..0e4860791 100644 --- a/include/menu.h +++ b/include/menu.h @@ -3,14 +3,22 @@ #include "text.h" -void InitMenuWindow(struct WindowConfig *); -void MultistepInitMenuWindowBegin(struct WindowConfig *); +struct MenuAction +{ + u8 *text; + u8 (*func)(); +}; + +void CloseMenu(void); +void AppendToList(u8 *list, u8 *pindex, u32 value); +void InitMenuWindow(const struct WindowConfig *); +void MultistepInitMenuWindowBegin(const struct WindowConfig *); bool32 MultistepInitMenuWindowContinue(void); void unref_sub_8071DA4(struct WindowConfig *, u16); void MenuLoadTextWindowGraphics_OverrideFrameType(u8); void MenuLoadTextWindowGraphics(void); -void BasicInitMenuWindow(struct WindowConfig *); -void MenuPrint(u8 *, u8, u8); +void BasicInitMenuWindow(const struct WindowConfig *); +void MenuPrint(const u8 *, u8, u8); void MenuZeroFillWindowRect(u8, u8, u8, u8); void MenuFillWindowRectWithBlankTile(u8, u8, u8, u8); void MenuZeroFillScreen(void); @@ -33,11 +41,11 @@ s8 ProcessMenuInput(void); s8 ProcessMenuInputNoWrap(void); u8 MoveMenuCursor3(s8); u8 MoveMenuCursor4(s8); -void sub_807274C(u8, u8, u8, u8, u8 * const [][2], u8, u32); +void sub_807274C(u8, u8, u8, u8, const struct MenuAction[], u8, u32); s8 sub_80727CC(void); u8 sub_807288C(u8); -void PrintMenuItems(u8, u8, u8, u8 * const [][2]); -void PrintMenuItemsReordered(u8, u8, u8, u8 * const [][2], u8*); +void PrintMenuItems(u8, u8, u8, const struct MenuAction[]); +void PrintMenuItemsReordered(u8, u8, u8, const struct MenuAction[], u8*); void InitYesNoMenu(u8, u8, u8); void DisplayYesNoMenu(u8, u8, u32); s8 ProcessMenuInputNoWrap_(void); diff --git a/include/menu_cursor.h b/include/menu_cursor.h new file mode 100644 index 000000000..cc6cc16bc --- /dev/null +++ b/include/menu_cursor.h @@ -0,0 +1,24 @@ +#ifndef GUARD_MENU_CURSOR_H +#define GUARD_MENU_CURSOR_H + +#include "sprite.h" + +void sub_814A590(void); +u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5); +u8 sub_814A758(u8 a1, u8 a2, u8 a3, u8 a4); +u8 unref_sub_814A7AC(u8 a1, u16 a2, u8 a3); +void sub_814A7FC(void); +void sub_814A880(u8 a1, u8 a2); +void sub_814A904(void); +void sub_814A958(u8 a1); +void sub_814AABC(void (*callback)(struct Sprite *)); +void sub_814AAF8(u16 a1); +void sub_814AB84(void); +void unref_sub_814ABE4(int a1); +u8 CreateBlendedOutlineCursor(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5); +void sub_814AD44(void); +void sub_814AD7C(u8 a1, u8 a2); +void sub_814ADC8(void); +void sub_814ADF4(u8 a1); + +#endif // GUARD_MENU_CURSOR_H diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h new file mode 100644 index 000000000..e7b4adfbd --- /dev/null +++ b/include/metatile_behavior.h @@ -0,0 +1,136 @@ +#ifndef GUARD_METATILE_BEHAVIOR +#define GUARD_METATILE_BEHAVIOR + +bool8 MetatileBehavior_IsATile(u8); +bool8 MetatileBehavior_IsEncounterTile(u8); +bool8 MetatileBehavior_IsJumpEast(u8); +bool8 MetatileBehavior_IsJumpWest(u8); +bool8 MetatileBehavior_IsJumpNorth(u8); +bool8 MetatileBehavior_IsJumpSouth(u8); +bool8 MetatileBehavior_IsPokeGrass(u8); +bool8 MetatileBehavior_IsSandOrDeepSand(u8); +bool8 MetatileBehavior_IsDeepSand(u8); +bool8 MetatileBehavior_IsReflective(u8); +bool8 MetatileBehavior_IsIce(u8); +bool8 MetatileBehavior_IsWarpDoor(u8); +bool8 MetatileBehavior_IsDoor(u8); +bool8 MetatileBehavior_IsEscalator(u8); +bool8 unref_sub_8056EE0(u8); +bool8 MetatileBehavior_IsLadder(u8); +bool8 MetatileBehavior_IsNonAnimDoor(u8); +bool8 MetatileBehavior_IsDeepSouthWarp(u8); +bool8 MetatileBehavior_IsSurfableWaterOrUnderwater(u8); +bool8 MetatileBehavior_IsEastArrowWarp(u8); +bool8 MetatileBehavior_IsWestArrowWarp(u8); +bool8 MetatileBehavior_IsNorthArrowWarp(u8); +bool8 MetatileBehavior_IsSouthArrowWarp(u8); +bool8 MetatileBehavior_IsArrowWarp(u8); +bool8 MetatileBehavior_IsMoveTile(u8); +bool8 MetatileBehavior_IsIce_2(u8); +bool8 MetatileBehavior_IsTrickHouseSlipperyFloor(u8); +bool8 MetatileBehavior_0x05(u8); +bool8 MetatileBehavior_IsWalkNorth(u8); +bool8 MetatileBehavior_IsWalkSouth(u8); +bool8 MetatileBehavior_IsWalkWest(u8); +bool8 MetatileBehavior_IsWalkEast(u8); +bool8 MetatileBehavior_IsNorthwardCurrent(u8); +bool8 MetatileBehavior_IsSouthwardCurrent(u8); +bool8 MetatileBehavior_IsWestwardCurrent(u8); +bool8 MetatileBehavior_IsEastwardCurrent(u8); +bool8 MetatileBehavior_IsSlideNorth(u8); +bool8 MetatileBehavior_IsSlideSouth(u8); +bool8 MetatileBehavior_IsSlideWest(u8); +bool8 MetatileBehavior_IsSlideEast(u8); +bool8 MetatileBehavior_IsCounter(u8); +bool8 MetatileBehavior_IsPlayerFacingTVScreen(u8, u8); +bool8 MetatileBehavior_IsPC(u8); +bool8 is_tile_x84(u8); +bool8 sub_80571C0(u8); +bool8 MetatileBehavior_IsSecretBaseCave(u8); +bool8 MetatileBehavior_IsSecretBaseTree(u8); +bool8 MetatileBehavior_IsSecretBaseShrub(u8); +bool8 MetatileBehavior_IsSecretBasePC(u8); +bool8 sub_805724C(u8); +bool8 unref_sub_8057260(u8); +bool8 sub_8057274(u8); +bool8 sub_8057288(u8); +bool8 sub_805729C(u8); +bool8 sub_80572B0(u8); +bool8 unref_sub_80572C4(u8); +bool8 sub_80572D8(u8); +bool8 sub_80572EC(u8); +bool8 sub_8057300(u8); +bool8 sub_8057314(u8); +bool8 sub_8057328(u8); +bool8 sub_805733C(u8); +bool8 sub_8057350(u8); +bool8 sub_8057364(u8); +bool8 sub_8057378(u8); +bool8 sub_805738C(u8); +bool8 MetatileBehavior_HasRipples(u8); +bool8 MetatileBehavior_IsPuddle(u8); +bool8 MetatileBehavior_IsTallGrass(u8); +bool8 MetatileBehavior_IsLongGrass(u8); +bool8 MetatileBehavior_IsBerryTreeSoil(u8); +bool8 MetatileBehavior_IsAsh(u8); +bool8 MetatileBehavior_IsUnusedFootprintMetatile(u8); +bool8 MetatileBehavior_IsBridge(u8); +u8 sub_8057450(u8); +bool8 MetatileBehavior_IsLandWildEncounter(u8); +bool8 MetatileBehavior_IsWaterWildEncounter(u8); +bool8 sub_80574C4(u8); +bool8 sub_80574D8(u8); +bool8 sub_80574EC(u8); +bool8 sub_805750C(u8); +bool8 MetatileBehavior_IsShallowFlowingWater(u8); +bool8 MetatileBehavior_IsThinIce(u8); +bool8 MetatileBehavior_IsCrackedIce(u8); +bool8 sub_8057568(u8); +bool8 unref_sub_8057584(u8); +bool8 sub_805759C(u8); +bool8 MetatileBehavior_IsEastBlocked(u8); +bool8 MetatileBehavior_IsWestBlocked(u8); +bool8 MetatileBehavior_IsNorthBlocked(u8); +bool8 MetatileBehavior_IsSouthBlocked(u8); +bool8 MetatileBehavior_IsShortGrass(u8); +bool8 MetatileBehavior_IsHotSprings(u8); +bool8 MetatileBehavior_IsWaterfall(u8); +bool8 MetatileBehavior_IsFortreeBridge(u8); +bool8 sub_80576A0(u8); +bool8 sub_80576B4(u8); +bool8 sub_80576C8(u8); +bool8 sub_80576DC(u8); +bool8 MetatileBehavior_IsPacifidlogLog(u8); +bool8 MetatileBehavior_IsTrickHousePuzzleDoor(u8); +bool8 MetatileBehavior_IsRegionMap(u8); +bool8 MetatileBehavior_IsClosedSootpolisGymDoor(u8); +bool8 MetatileBehavior_IsRoulette(u8); +bool8 MetatileBehavior_IsPokeblockFeeder(u8); +bool8 MetatileBehavior_0xBB(u8); +bool8 MetatileBehavior_0xBC(u8); +bool8 MetatileBehavior_IsLavaridgeB1FWarp(u8); +bool8 MetatileBehavior_IsLavaridge1FWarp(u8); +bool8 MetatileBehavior_IsAquaHideoutWarp(u8); +bool8 MetatileBehavior_IsSurfableFishableWater(u8); +bool8 MetatileBehavior_IsMtPyreHole(u8); +bool8 MetatileBehavior_IsCrackedFloorHole(u8); +bool8 MetatileBehavior_IsCrackedFloor(u8); +bool8 MetatileBehavior_IsMuddySlope(u8); +bool8 MetatileBehavior_IsBumpySlope(u8); +bool8 MetatileBehavior_IsIsolatedVerticalRail(u8); +bool8 MetatileBehavior_IsIsolatedHorizontalRail(u8); +bool8 MetatileBehavior_IsVerticalRail(u8); +bool8 MetatileBehavior_IsHorizontalRail(u8); +bool8 MetatileBehavior_IsSeaweed(u8); +bool8 MetatileBehavior_IsRunningDisallowed(u8); +bool8 sub_80578F8(u8); +bool8 sub_805791C(u8); +bool8 MetatileBehavior_IsPictureBookShelf(u8); +bool8 MetatileBehavior_IsBookShelf(u8); +bool8 MetatileBehavior_IsPokeCenterBookShelf(u8); +bool8 MetatileBehavior_IsVase(u8); +bool8 MetatileBehavior_IsTrashCan(u8); +bool8 MetatileBehavior_IsShopShelf(u8); +bool8 MetatileBehavior_IsBlueprint(u8); + +#endif // GUARD_METATILE_BEHAVIOR diff --git a/include/metatile_behaviors.h b/include/metatile_behaviors.h new file mode 100644 index 000000000..ea705054e --- /dev/null +++ b/include/metatile_behaviors.h @@ -0,0 +1,173 @@ +#ifndef GUARD_METATILE_BEHAVIORS +#define GUARD_METATILE_BEHAVIORS + +#define MB_NORMAL 0x00 +#define MB_TALL_GRASS 0x02 +#define MB_LONG_GRASS 0x03 +#define MB_04 0x04 +#define MB_05 0x05 +#define MB_DEEP_SAND 0x06 +#define MB_SHORT_GRASS 0x07 +#define MB_CAVE 0x08 +#define MB_LONG_GRASS_SOUTH_EDGE 0x09 +#define MB_NO_RUNNING 0x0A +#define MB_0B 0x0B +#define MB_MOUNTAIN_TOP 0x0C +#define MB_BATTLE_PYRAMID_WARP 0x0D +#define MB_MOSSDEEP_GYM_WARP 0x0E +#define MB_MT_PYRE_HOLE 0x0F +#define MB_POND_WATER 0x10 +#define MB_SEMI_DEEP_WATER 0x11 +#define MB_DEEP_WATER 0x12 +#define MB_WATERFALL 0x13 +#define MB_SOOTOPOLIS_DEEP_WATER 0x14 +#define MB_OCEAN_WATER 0x15 +#define MB_PUDDLE 0x16 +#define MB_SHALLOW_WATER 0x17 +#define MB_18 0x18 +#define MB_NO_SURFACING 0x19 +#define MB_1A 0x1A +#define MB_STAIRS_OUTSIDE_ABANDONED_SHIP 0x1B +#define MB_SHOAL_CAVE_ENTRANCE 0x1C +#define MB_ICE 0x20 +#define MB_SAND 0x21 +#define MB_SEAWEED 0x22 +#define MB_ASH 0x24 +#define MB_25 0x25 +#define MB_THIN_ICE 0x26 +#define MB_CRACKED_ICE 0x27 +#define MB_HOT_SPRINGS 0x28 +#define MB_LAVARIDGE_GYM_B1F_WARP 0x29 +#define MB_SEAWEED_NO_SURFACING 0x2A +#define MB_REFLECTION_UNDER_BRIDGE 0x2B +#define MB_IMPASSABLE_EAST 0x30 +#define MB_IMPASSABLE_WEST 0x31 +#define MB_IMPASSABLE_NORTH 0x32 +#define MB_IMPASSABLE_SOUTH 0x33 +#define MB_IMPASSABLE_NORTHEAST 0x34 +#define MB_IMPASSABLE_NORTHWEST 0x35 +#define MB_IMPASSABLE_SOUTHEAST 0x36 +#define MB_IMPASSABLE_SOUTHWEST 0x37 +#define MB_JUMP_EAST 0x38 +#define MB_JUMP_WEST 0x39 +#define MB_JUMP_NORTH 0x3A +#define MB_JUMP_SOUTH 0x3B +#define MB_JUMP_SOUTHEAST 0x3E +#define MB_JUMP_SOUTHWEST 0x3F +#define MB_WALK_EAST 0x40 +#define MB_WALK_WEST 0x41 +#define MB_WALK_NORTH 0x42 +#define MB_WALK_SOUTH 0x43 +#define MB_SLIDE_EAST 0x44 +#define MB_SLIDE_WEST 0x45 +#define MB_SLIDE_NORTH 0x46 +#define MB_SLIDE_SOUTH 0x47 +#define MB_TRICK_HOUSE_PUZZLE_8_FLOOR 0x48 +#define MB_EASTWARD_CURRENT 0x50 +#define MB_WESTWARD_CURRENT 0x51 +#define MB_NORTHWARD_CURRENT 0x52 +#define MB_SOUTHWARD_CURRENT 0x53 +#define MB_NON_ANIMATED_DOOR 0x60 +#define MB_LADDER 0x61 +#define MB_EAST_ARROW_WARP 0x62 +#define MB_WEST_ARROW_WARP 0x63 +#define MB_NORTH_ARROW_WARP 0x64 +#define MB_SOUTH_ARROW_WARP 0x65 +#define MB_CRACKED_FLOOR_HOLE 0x66 +#define MB_AQUA_HIDEOUT_WARP 0x67 +#define MB_LAVARIDGE_GYM_1F_WARP 0x68 +#define MB_ANIMATED_DOOR 0x69 +#define MB_UP_ESCALATOR 0x6A +#define MB_DOWN_ESCALATOR 0x6B +#define MB_WATER_DOOR 0x6C +#define MB_WATER_SOUTH_ARROW_WARP 0x6D +#define MB_DEEP_SOUTH_WARP 0x6E +#define MB_WARP_OR_BRIDGE 0x70 +#define MB_ROUTE120_NORTH_BRIDGE_1 0x72 +#define MB_ROUTE120_NORTH_BRIDGE_2 0x73 +#define MB_PACIFIDLOG_VERTICAL_LOG_1 0x74 +#define MB_PACIFIDLOG_VERTICAL_LOG_2 0x75 +#define MB_PACIFIDLOG_HORIZONTAL_LOG_1 0x76 +#define MB_PACIFIDLOG_HORIZONTAL_LOG_2 0x77 +#define MB_FORTREE_BRIDGE 0x78 +#define MB_ROUTE120_SOUTH_BRIDGE_1 0x7A +#define MB_ROUTE120_SOUTH_BRIDGE_2 0x7B +#define MB_ROUTE120_NORTH_BRIDGE_3 0x7C +#define MB_ROUTE120_NORTH_BRIDGE_4 0x7D +#define MB_ROUTE110_BRIDGE 0x7F +#define MB_COUNTER 0x80 +#define MB_PC 0x83 +#define MB_84 0x84 +#define MB_REGION_MAP 0x85 +#define MB_TELEVISION 0x86 +#define MB_POKEBLOCK_FEEDER 0x87 +#define MB_SLOT_MACHINE 0x89 +#define MB_ROULETTE 0x8A +#define MB_CLOSED_SOOTOPOLIS_GYM_DOOR 0x8B +#define MB_TRICK_HOUSE_PUZZLE_DOOR 0x8C +#define MB_8D 0x8D +#define MB_8E 0x8E +#define MB_QUESTIONNAIRE 0x8F +#define MB_SECRET_BASE_SPOT_RED_CAVE 0x90 +#define MB_91 0x91 +#define MB_SECRET_BASE_SPOT_BROWN_CAVE 0x92 +#define MB_93 0x93 +#define MB_SECRET_BASE_SPOT_YELLOW_CAVE 0x94 +#define MB_95 0x95 +#define MB_SECRET_BASE_SPOT_TREE_1 0x96 +#define MB_97 0x97 +#define MB_SECRET_BASE_SPOT_SHRUB 0x98 +#define MB_99 0x99 +#define MB_SECRET_BASE_SPOT_BLUE_CAVE 0x9A +#define MB_9B 0x9B +#define MB_SECRET_BASE_SPOT_TREE_2 0x9C +#define MB_9D 0x9D +#define MB_BERRY_TREE_SOIL 0xA0 +#define MB_SECRET_BASE_PC 0xB0 +#define MB_B1 0xB1 +#define MB_B2 0xB2 +#define MB_B3 0xB3 +#define MB_B4 0xB4 +#define MB_B5 0xB5 +#define MB_B6 0xB6 +#define MB_B7 0xB7 +#define MB_B8 0xB8 +#define MB_B9 0xB9 +#define MB_BA 0xBA +#define MB_BB 0xBB +#define MB_BC 0xBC +#define MB_BD 0xBD +#define MB_BE 0xBE +#define MB_BF 0xBF +#define MB_BED 0xC0 +#define MB_C1 0xC1 +#define MB_C2 0xC2 +#define MB_C3 0xC3 +#define MB_C4 0xC4 +#define MB_C5 0xC5 +#define MB_C6 0xC6 +#define MB_C7 0xC7 +#define MB_C8 0xC8 +#define MB_C9 0xC9 +#define MB_CA 0xCA +#define MB_CB 0xCB +#define MB_CC 0xCC +#define MB_CD 0xCD +#define MB_CE 0xCE +#define MB_CF 0xCF +#define MB_MUDDY_SLOPE 0xD0 +#define MB_BUMPY_SLOPE 0xD1 +#define MB_CRACKED_FLOOR 0xD2 +#define MB_ISOLATED_VERTICAL_RAIL 0xD3 +#define MB_ISOLATED_HORIZONTAL_RAIL 0xD4 +#define MB_VERTICAL_RAIL 0xD5 +#define MB_HORIZONTAL_RAIL 0xD6 +#define MB_PICTURE_BOOK_SHELF 0xE0 +#define MB_BOOKSHELF 0xE1 +#define MB_POKEMON_CENTER_BOOKSHELF 0xE2 +#define MB_VASE 0xE3 +#define MB_TRASH_CAN 0xE4 +#define MB_SHOP_SHELF 0xE5 +#define MB_BLUEPRINT 0xE6 + +#endif // GUARD_METATILE_BEHAVIORS diff --git a/include/money.h b/include/money.h new file mode 100644 index 000000000..49015ee19 --- /dev/null +++ b/include/money.h @@ -0,0 +1,17 @@ +#ifndef GUARD_MONEY_H +#define GUARD_MONEY_H + +bool8 IsEnoughMoney(u32, u32); +void sub_80B79B8(u32 *, u32); +void sub_80B79E0(u32 *, u32); +void sub_80B79F8(u8 *buffer, u32 arg1, u8 arg2); +void sub_80B7A94(u32 arg0, u8 arg1, u8 x, u8 y); +void sub_80B7AEC(u32, u8 left, u8 top); +void sub_80B7B34(void); +void sub_80B7BEC(u32, u8, u8); +void sub_80B7C14(u32, u8, u8); +void RemoveMoneyLabelObject(u8, u8); +bool8 sub_80B7CE8(void); +void sub_80B7D0C(void); + +#endif // GUARD_MONEY_H diff --git a/include/mori_debug_menu.h b/include/mori_debug_menu.h new file mode 100644 index 000000000..f1dc0de93 --- /dev/null +++ b/include/mori_debug_menu.h @@ -0,0 +1,17 @@ +#ifndef GUARD_MORI_DEBUG_MENU_H +#define GUARD_MORI_DEBUG_MENU_H + +bool8 sub_8083D4C(void); +u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr); +s8 MoriDebugMenu_Egg(void); +s8 MoriDebugMenu_MaleEgg(void); +s8 MoriDebugMenu_1000Steps(void); +s8 MoriDebugMenu_10000Steps(void); +s8 MoriDebugMenu_MoveTutor(void); +s8 MoriDebugMenu_BreedEgg(void); +s8 MoriDebugMenu_LongName(void); +s8 MoriDebugMenu_PokeblockCase(void); +bool8 MoriDebugMenuProcessInput(void); +s8 InitMoriDebugMenu(void); + +#endif // GUARD_MORI_DEBUG_MENU_H diff --git a/include/mystery_event_menu.h b/include/mystery_event_menu.h new file mode 100644 index 000000000..8801789d9 --- /dev/null +++ b/include/mystery_event_menu.h @@ -0,0 +1,6 @@ +#ifndef GUARD_MYSTERY_EVENT_MENU_H +#define GUARD_MYSTERY_EVENT_MENU_H + +void CB2_InitMysteryEventMenu(void); + +#endif // GUARD_MYSTERY_EVENT_MENU_H diff --git a/include/new_game.h b/include/new_game.h new file mode 100644 index 000000000..62e83f8f0 --- /dev/null +++ b/include/new_game.h @@ -0,0 +1,16 @@ +#ifndef GUARD_NEW_GAME_H +#define GUARD_NEW_GAME_H + +void write_word_to_mem(u32 var, u8 *dataPtr); +void copy_word_to_mem(u8 *copyTo, u8 *copyFrom); +void set_player_trainer_id(void); +void SetDefaultOptions(void); +void ClearPokedexFlags(void); +void sub_8052DA8(void); +void sub_8052DE4(void); +void WarpToTruck(void); +void ClearSav2(void); +void sub_8052E4C(void); +void NewGameInitData(void); + +#endif // GUARD_NEW_GAME_H diff --git a/include/option_menu.h b/include/option_menu.h new file mode 100644 index 000000000..b23a73c4c --- /dev/null +++ b/include/option_menu.h @@ -0,0 +1,6 @@ +#ifndef GUARD_OPTION_MENU_H +#define GUARD_OPTION_MENU_H + +void CB2_InitOptionMenu(void); + +#endif // GUARD_OPTION_MENU_H diff --git a/include/palette.h b/include/palette.h index de2cf0083..37fcb4d65 100644 --- a/include/palette.h +++ b/include/palette.h @@ -1,8 +1,6 @@ #ifndef GUARD_PALETTE_H #define GUARD_PALETTE_H -#include "global.h" - #define gPaletteFade_selectedPalettes (gPaletteFade.multipurpose1) // normal and fast fade #define gPaletteFade_blendCnt (gPaletteFade.multipurpose1) // hardware fade #define gPaletteFade_delay (gPaletteFade.multipurpose2) // normal and hardware fade @@ -54,7 +52,7 @@ bool8 unref_sub_8073D3C(u32, u8, u8, u8, u16); void unref_sub_8073D84(u8, u32 *); void ResetPaletteStructByUid(u16); void ResetPaletteStruct(u8); -void ResetPaletteFadeControl(); +void ResetPaletteFadeControl(void); void unref_sub_8074168(u16); void unref_sub_8074194(u16); void InvertPlttBuffer(u32); diff --git a/include/play_time.h b/include/play_time.h index ac64b62fb..49091f4b1 100644 --- a/include/play_time.h +++ b/include/play_time.h @@ -1,9 +1,10 @@ #ifndef GUARD_PLAY_TIME_H #define GUARD_PLAY_TIME_H -void PlayTimeCounter_Reset(); -void PlayTimeCounter_Start(); -void PlayTimeCounter_Stop(); -void PlayTimeCounter_Update(); +void PlayTimeCounter_Reset(void); +void PlayTimeCounter_Start(void); +void PlayTimeCounter_Stop(void); +void PlayTimeCounter_Update(void); +void PlayTimeCounter_SetToMax(void); #endif // GUARD_PLAY_TIME_H diff --git a/include/pokedex.h b/include/pokedex.h new file mode 100644 index 000000000..1ac4e8c33 --- /dev/null +++ b/include/pokedex.h @@ -0,0 +1,158 @@ +#ifndef GUARD_POKEDEX_H +#define GUARD_POKEDEX_H + +#include "sprite.h" + +struct PokedexListItem +{ + u16 dexNum; + u16 seen:1; + u16 owned:1; +}; + +struct PokedexView +{ + struct PokedexListItem unk0[386]; + u16 unk608; + u8 unk60A_1:1; + u8 unk60A_2:1; + u8 unk60B; + u16 unk60C; + u16 selectedPokemon; + u16 unk610; + u16 dexMode; //National or Hoenn + u16 unk614; + u16 dexOrder; + u16 unk618; + u16 unk61A; + u16 unk61C; + u16 unk61E[4]; + u16 unk626; //sprite id of selected Pokemon + u16 unk628; + u16 unk62A; + u8 unk62C; + u8 unk62D; + u8 unk62E; + u8 unk62F; + s16 unk630; + s16 unk632; + u16 unk634; + u16 unk636; + u16 unk638; + u16 unk63A[4]; + u8 filler642[8]; + u8 unk64A; + u8 unk64B; + u8 unk64C_1:1; + u8 selectedScreen; + u8 unk64E; + u8 unk64F; + u8 menuIsOpen; //menuIsOpen + u8 unk651; + u16 menuCursorPos; //Menu cursor position + s16 menuY; //Menu Y position (inverted because we use REG_BG0VOFS for this) + u8 unk656[8]; + u8 unk65E[8]; +}; + +void sub_808C02C(void); +void sub_808C0A0(void); +void sub_808C0B8(void); +void ClearPokedexView(struct PokedexView *pokedexView); +void CB2_InitPokedex(void); +u8 unref_sub_808C540(void (*func)(u8)); +void MainCB(void); +void Task_PokedexShowMainScreen(u8 taskId); +void Task_PokedexMainScreen(u8 taskId); +void sub_808C898(u8 taskId); +void Task_PokedexMainScreenMenu(u8 taskId); +void sub_808CA64(u8 taskId); +void sub_808CAE4(u8 taskId); +void sub_808CB8C(u8 taskId); +void Task_ClosePokedex(u8 taskId); +void sub_808CCC4(u8 taskId); +void Task_PokedexResultsScreen(u8 taskId); +void sub_808CEF8(u8 taskId); +void Task_PokedexResultsScreenMenu(u8 taskId); +void sub_808D118(u8 taskId); +void sub_808D198(u8 taskId); +void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId); +void Task_PokedexResultsScreenExitPokedex(u8 taskId); +bool8 sub_808D344(u8 a); +void sub_808D640(void); +void SortPokedex(u8 dexMode, u8 sortMode); +void sub_808DBE8(u8 a, u16 b, u16 c); +void sub_808DEB0(u16 a, u8 b, u8 c, u16 d); +void sub_808DF88(u16 a, u8 b, u8 c, u16 d); +u8 sub_808DFE4(u16 a, u8 b, u8 c); +void sub_808E090(u8 a, u8 b, u16 c); +void sub_808E0CC(u16 a, u16 b); +bool8 sub_808E208(u8 a, u8 b, u8 c); +void sub_808E398(u8 a, u16 b); +u16 sub_808E48C(u16 a, u16 b); +void sub_808E6BC(void); +u8 sub_808E71C(void); +u8 sub_808E82C(void); +u16 sub_808E888(u16 a1); +u32 sub_808E8C8(u16 a, u16 b, u16 c); +void sub_808E978(u8 a); +void nullsub_58(struct Sprite *sprite); +void sub_808ED94(struct Sprite *sprite); +void sub_808EDB8(struct Sprite *sprite); +void sub_808EE28(struct Sprite *sprite); +void sub_808EF38(struct Sprite *sprite); +void sub_808EF8C(struct Sprite *sprite); +void sub_808F08C(struct Sprite *sprite); +void sub_808F0B4(struct Sprite *sprite); +void sub_808F168(struct Sprite *sprite); +u8 sub_808F210(struct PokedexListItem *item, u8 b); +bool8 sub_808F250(u8 taskId); +u8 sub_808F284(struct PokedexListItem *item, u8 b); +void Task_InitPageScreenMultistep(u8 taskId); +void Task_PageScreenProcessInput(u8 taskId); +void sub_808F888(u8 taskId); +void Task_ClosePageScreen(u8 taskId); +void Task_InitAreaScreenMultistep(u8 taskId); +void Task_AreaScreenProcessInput(u8 taskId); +void sub_808FA00(u8 taskId); +void Task_InitCryScreenMultistep(u8 taskId); +void Task_CryScreenProcessInput(u8 taskId); +void sub_808FFBC(u8 taskId); +void sub_8090040(u8 a); +void Task_InitSizeScreenMultistep(u8 taskId); +void Task_SizeScreenProcessInput(u8 taskId); +void sub_8090498(u8 taskId); +void sub_80904FC(u16 a); +void sub_8090540(u16 a); +void sub_8090584(u8 a, u16 b); +void sub_8090644(u8 a, u16 b); +u8 sub_809070C(u16 dexNum, u32 b, u32 c); + +// ASM +void sub_8090750(u8); +void sub_8090A3C(u8); + +void sub_8090C68(void); +u8 *GetPokemonCategory(u16); + +bool8 sub_8090D90(u16, u8); +u16 GetNationalPokedexCount(u8); +u16 GetHoennPokedexCount(u8); +bool8 sub_8090FC0(void); +u16 sub_8090FF4(void); +void sub_8091060(u16); +void sub_8091154(u16 order, int i, int i1); +void sub_80911C8(u16 num, int i, int i1); +void sub_8091260(u16 num, int i, int i1, int i2); +void sub_8091304(u8 name[12], int i, int i1); + +void sub_8091458(u16 height, int i, int i1); +void sub_8091564(u16 weight, int i, int i1); +void sub_8091738(u16, u16, u16); +void sub_80917CC(int i, int i1); +u16 sub_8091818(u8, u16, u16, u16); + +u16 sub_80918EC(u16 a, s16 b, s16 c, u16 d); //Not sure of return type +u8 sub_8091A4C(u8 gender, int i, int i1, int i2); + +#endif // GUARD_POKEDEX_H diff --git a/include/pokemon.h b/include/pokemon.h index 450a8174f..10eb05757 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -1,8 +1,6 @@ #ifndef GUARD_POKEMON_H #define GUARD_POKEMON_H -#include "global.h" - #define MON_DATA_PERSONALITY 0 #define MON_DATA_OT_ID 1 #define MON_DATA_NICKNAME 2 @@ -97,6 +95,53 @@ #define MON_FEMALE 0xFE #define MON_GENDERLESS 0xFF +#define TYPE_NORMAL 0x00 +#define TYPE_FIGHTING 0x01 +#define TYPE_FLYING 0x02 +#define TYPE_POISON 0x03 +#define TYPE_GROUND 0x04 +#define TYPE_ROCK 0x05 +#define TYPE_BUG 0x06 +#define TYPE_GHOST 0x07 +#define TYPE_STEEL 0x08 +#define TYPE_MYSTERY 0x09 +#define TYPE_FIRE 0x0a +#define TYPE_WATER 0x0b +#define TYPE_GRASS 0x0c +#define TYPE_ELECTRIC 0x0d +#define TYPE_PSYCHIC 0x0e +#define TYPE_ICE 0x0f +#define TYPE_DRAGON 0x10 +#define TYPE_DARK 0x11 + +enum { + NATURE_HARDY, + NATURE_LONELY, + NATURE_BRAVE, + NATURE_ADAMANT, + NATURE_NAUGHTY, + NATURE_BOLD, + NATURE_DOCILE, + NATURE_RELAXED, + NATURE_IMPISH, + NATURE_LAX, + NATURE_TIMID, + NATURE_HASTY, + NATURE_SERIOUS, + NATURE_JOLLY, + NATURE_NAIVE, + NATURE_MODEST, + NATURE_MILD, + NATURE_QUIET, + NATURE_BASHFUL, + NATURE_RASH, + NATURE_CALM, + NATURE_GENTLE, + NATURE_SASSY, + NATURE_CAREFUL, + NATURE_QUIRKY, +}; + struct PokemonSubstruct0 { u16 species; @@ -130,41 +175,41 @@ struct PokemonSubstruct2 struct PokemonSubstruct3 { - u8 pokerus; - u8 metLocation; + /* 0x00 */ u8 pokerus; + /* 0x01 */ u8 metLocation; - u16 metLevel:7; - u16 metGame:4; - u16 pokeball:4; - u16 otGender:1; + /* 0x02 */ u16 metLevel:7; + /* 0x02 */ u16 metGame:4; + /* 0x03 */ u16 pokeball:4; + /* 0x03 */ u16 otGender:1; - u32 hpIV:5; - u32 attackIV:5; - u32 defenseIV:5; - u32 speedIV:5; - u32 spAttackIV:5; - u32 spDefenseIV:5; - u32 isEgg:1; - u32 altAbility:1; + /* 0x04 */ u32 hpIV:5; + /* 0x04 */ u32 attackIV:5; + /* 0x05 */ u32 defenseIV:5; + /* 0x05 */ u32 speedIV:5; + /* 0x05 */ u32 spAttackIV:5; + /* 0x06 */ u32 spDefenseIV:5; + /* 0x07 */ u32 isEgg:1; + /* 0x07 */ u32 altAbility:1; - u32 coolRibbon:3; - u32 beautyRibbon:3; - u32 cuteRibbon:3; - u32 smartRibbon:3; - u32 toughRibbon:3; - u32 championRibbon:1; - u32 winningRibbon:1; - u32 victoryRibbon:1; - u32 artistRibbon:1; - u32 effortRibbon:1; - u32 giftRibbon1:1; - u32 giftRibbon2:1; - u32 giftRibbon3:1; - u32 giftRibbon4:1; - u32 giftRibbon5:1; - u32 giftRibbon6:1; - u32 giftRibbon7:1; - u32 fatefulEncounter:5; // unused in Ruby/Sapphire, but the high bit must be set for Mew/Deoxys to obey in FR/LG/Emerald + /* 0x08 */ u32 coolRibbon:3; + /* 0x08 */ u32 beautyRibbon:3; + /* 0x08 */ u32 cuteRibbon:3; + /* 0x09 */ u32 smartRibbon:3; + /* 0x09 */ u32 toughRibbon:3; + /* 0x09 */ u32 championRibbon:1; + /* 0x0A */ u32 winningRibbon:1; + /* 0x0A */ u32 victoryRibbon:1; + /* 0x0A */ u32 artistRibbon:1; + /* 0x0A */ u32 effortRibbon:1; + /* 0x0A */ u32 giftRibbon1:1; + /* 0x0A */ u32 giftRibbon2:1; + /* 0x0A */ u32 giftRibbon3:1; + /* 0x0A */ u32 giftRibbon4:1; + /* 0x0B */ u32 giftRibbon5:1; + /* 0x0B */ u32 giftRibbon6:1; + /* 0x0B */ u32 giftRibbon7:1; + /* 0x0B */ u32 fatefulEncounter:5; // unused in Ruby/Sapphire, but the high bit must be set for Mew/Deoxys to obey in FR/LG/Emerald }; union PokemonSubstruct @@ -327,6 +372,8 @@ struct PokemonStorage { u8 currentBox; struct BoxPokemon boxes[14][30]; + u8 boxNames[14][9]; + u8 unkArray[14]; }; extern struct Pokemon gPlayerParty[6]; @@ -362,6 +409,8 @@ u16 sub_803B7C8(struct Pokemon *mon, u8 a2); void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move); void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move); +u8 sub_803C348(u8 a1); +u8 sub_803C434(u8 a1); u8 GetMonGender(struct Pokemon *mon); u8 GetBoxMonGender(struct BoxPokemon *boxMon); u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality); diff --git a/include/pokemon_size_record.h b/include/pokemon_size_record.h new file mode 100644 index 000000000..3ccc597bb --- /dev/null +++ b/include/pokemon_size_record.h @@ -0,0 +1,14 @@ +#ifndef GUARD_POKEMON_SIZE_RECORD_H +#define GUARD_POKEMON_SIZE_RECORD_H + +void InitShroomishSizeRecord(void); +void GetShroomishSizeRecordInfo(void); +void CompareShroomishSize(void); + +void InitBarboachSizeRecord(void); +void GetBarboachSizeRecordInfo(void); +void CompareBarboachSize(void); + +void GiveGiftRibbonToParty(u8 index, u8 ribbonId); + +#endif // GUARD_POKEMON_SIZE_RECORD_H diff --git a/include/record_mixing.h b/include/record_mixing.h new file mode 100644 index 000000000..39cf5bd43 --- /dev/null +++ b/include/record_mixing.h @@ -0,0 +1,34 @@ +#ifndef GUARD_RECORD_MIXING_H +#define GUARD_RECORD_MIXING_H + +#include <stddef.h> + +void sub_80B929C(void); +void sub_80B92AC(void); +void sub_80B93B0(u32 a); +void sub_80B9450(u8 taskId); +void sub_80B9484(u8 taskId); +void sub_80B95F0(u8 taskId); +void sub_80B97DC(u8 taskId); +void Task_CopyRecvBuffer(u8 taskId); +void sub_80B99B4(u8 taskId); +void sub_80B99E8(u8 taskId); +void sub_80B9A1C(u8 taskId); +void *LoadPtrFromTaskData(u16 *ptr); +void StorePtrInTaskData(void *ptr, u16 *data); +u8 GetMultiplayerId_(void); +u16 *GetPlayerRecvBuffer(u8 player); +void sub_80B9A78(void); +void sub_80B9A88(u8 *a); +void sub_80B9B1C(u8 *a, size_t size, u8 index); +void sub_80B9B70(u8 *a, size_t size, u8 index); +u8 sub_80B9BBC(u16 *a); +void sub_80B9BC4(u32 a, u32 b, u32 c, u32 d); +u8 sub_80B9C4C(u8 *a); + +// ASM +void sub_80B9C6C(void *, u32, u8, void *); +void sub_80B9F3C(void *, u8); +void sub_80BA00C(u8); + +#endif // GUARD_RECORD_MIXING_H diff --git a/include/rom4.h b/include/rom4.h new file mode 100644 index 000000000..0fe80a82b --- /dev/null +++ b/include/rom4.h @@ -0,0 +1,228 @@ +#ifndef GUARD_ROM4_H +#define GUARD_ROM4_H + +#include "sprite.h" + +struct UnkPlayerStruct +{ + u8 player_field_0; + u8 player_field_1; +}; + +struct LinkPlayerMapObject { + u8 active; + u8 linkPlayerId; + u8 mapObjId; + u8 mode; +}; + +// sub_8052F5C +// flag_var_implications_of_teleport_ +// new_game +// sub_8053014 +void sub_8053050(void); +// sub_805308C +void ResetGameStats(void); +void IncrementGameStat(u8 index); +u32 GetGameStat(u8 index); +// SetGameStat +// sub_8053154 +// sub_8053198 +void update_saveblock1_field_object_coords(u8, s16, s16); +void update_saveblock1_field_object_movement_behavior(u8, u8); +// mapdata_load_assets_to_gpu_and_full_redraw +// get_mapdata_header +// warp_shift +// warp_set +// warp_data_is_not_neg_1 +// get_mapheader_by_bank_and_number +// warp1_get_mapheader +// set_current_map_header_from_sav1_save_old_name +// sub_805338C +// sub_80533CC +void warp_in(void); +void warp1_set(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); +// warp1_set_2 +// saved_warp2_set +void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); +// copy_saved_warp2_bank_and_enter_x_to_warp1 +// sub_8053538 +void sub_8053570(void); +void sub_8053588(u8); +// sub_80535C4 +void sub_805363C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); +// sub_8053678 +void sub_8053690(s8, s8, s8, s8, s8); +// warp1_set_to_warp2 +void sub_80536E4(s8, s8, s8, s8, s8); +void sub_8053720(s16, s16); +// sub_8053778 +// unref_sub_8053790 +// sub_80537CC +void gpu_sync_bg_hide(); +// sub_8053818 +// sub_8053850 +// sub_80538B0 +// sub_80538D0 +// sub_80538F0 +// sub_8053994 +void player_avatar_init_params_reset(void); +// walkrun_find_lowest_active_bit_in_bitfield +// sub_8053AA8 +u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3); +u8 sub_8053B60(struct UnkPlayerStruct *playerStruct, u8, u16, u8); +u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void); +bool32 IsBikingAllowedByMap(void); +void sub_8053C98(void); +void sub_8053CE4(s32 a1); +u8 sav1_get_flash_used_on_map(void); +void sub_8053D14(u16); +// sub_8053D30 +// sub_8053D6C +// sub_8053D9C +// sav1_map_get_music +// warp1_target_get_music +// call_map_music_set_to_zero +// sub_8053E90 +void sav1_set_battle_music_maybe(u16); +void sav1_reset_battle_music_maybe(void); +void sub_8053F0C(void); +void sub_8053F84(void); +void sub_8053FB0(u16); +// is_warp1_light_level_8_or_9 +// sub_8053FF8 +// sub_8054034 +// sub_8054044 +// sub_8054050 +// sub_80540D0 +void sub_8054164(void); +u8 get_map_light_level_by_bank_and_number(s8 mapGroup, s8 mapNum); +// get_map_light_level_from_warp +u8 sav1_map_get_light_level(void); +// get_map_light_from_warp0 +bool8 is_light_level_1_2_3_5_or_6(u8 a1); +// is_light_level_1_2_3_or_6 +u8 is_light_level_8_or_9(u8); +// unref_sub_8054260 +u8 sav1_map_get_name(); +// sav1_map_get_battletype +// ResetSafariZoneFlag_ +bool32 is_c1_link_related_active(void); +// c1_overworld_normal +// c1_overworld +// c2_overworld_basic +// sub_8054398 +void c2_overworld(void); +// set_callback1 +// sub_80543DC +// sub_80543E8 +void CB2_NewGame(void); +void CB2_WhiteOut(void); +void CB2_LoadMap(void); +void CB2_LoadMap2(void); +// sub_8054534 +// sub_8054588 +void c2_80567AC(void); +void c2_exit_to_overworld_2_switch(void); +void c2_exit_to_overworld_2_local(void); +void c2_exit_to_overworld_2_link(void); +// sub_805465C +void sub_805469C(void); +// sub_80546B8 +void c2_exit_to_overworld_1_continue_scripts_restart_music(void); +void sub_80546F0(void); +// sub_805470C +void CB2_ContinueSavedGame(void); +void FieldClearVBlankHBlankCallbacks(void); +void SetFieldVBlankCallback(void); +void VBlankCB_Field(void); +// sub_8054814 +bool32 sub_805483C(u8 *); +bool32 sub_805493C(u8 *, u32); +bool32 sub_8054A4C(u8 *); +bool32 sub_8054A9C(u8 *a1); +void do_load_map_stuff_loop(u8 *a1); +void sub_8054BA8(void); +void sub_8054C2C(void); +void sub_8054C54(void); +void sub_8054D4C(u32 a1); +void sub_8054D90(void); +void mli4_mapscripts_and_other(void); +void sub_8054E20(void); +void sub_8054E34(void); +void sub_8054E60(void); +void sub_8054E7C(void); +void sub_8054E98(void); +void sub_8054EC8(void); +void sub_8054F48(void); +void sub_8054F70(void); +// sub_8054F88 +// sub_8054FC0 +// sub_8054FF8 +// sub_8055218 +// sub_8055280 +// sub_80552B0 +u16 sub_805530C(u16); +void sub_8055340(u16 *); +void sub_8055354(void); +u16 sub_8055390(u32); +// sub_80553E0 +u16 sub_80553E4(u32); +u16 sub_8055408(u32); +u16 sub_8055438(u32); +// sub_8055468 +// sub_805546C +// sub_80554A4 +// sub_80554B8 +// sub_80554BC +// sub_80554E4 +// sub_80554F8 +// unref_sub_8055568 +// sub_8055574 +u16 sub_8055588(void); +// sub_805559C +void sub_80555B0(int linkPlayerId, int a2, struct UnkStruct_8054FF8 *a3); +bool32 sub_8055618(struct UnkStruct_8054FF8 *); +bool32 sub_8055630(struct UnkStruct_8054FF8 *); +u8 *sub_8055648(struct UnkStruct_8054FF8 *); +bool32 sub_8055660(struct UnkStruct_8054FF8 *); +u8 *sub_805568C(struct UnkStruct_8054FF8 *); +u16 sub_8055758(u8 *); +void sub_80557E8(void); +void sub_80557F4(void); +void sub_8055808(u8 *); +void sub_8055824(void); +void sub_8055840(u8 *); +void sub_805585C(void); +bool32 sub_8055870(void); +u32 sub_80558AC(void); +u32 sub_8055910(void); +u32 sub_8055940(void); +// ZeroLinkPlayerMapObject +// strange_npc_table_clear +// ZeroMapObject +void SpawnLinkPlayerMapObject(u8, s16, s16, u8); +void InitLinkPlayerMapObjectPos(struct MapObject *, s16, s16); +// unref_sub_8055A6C +// unref_sub_8055A9C +u8 sub_8055AE8(u8); +void sub_8055B08(u8, u16 *, u16 *); +u8 sub_8055B30(u8); +u8 sub_8055B50(u8); +// unref_sub_8055B74 +u8 GetLinkPlayerIdAt(s16, s16); +void sub_8055BFC(u8, u8); +// sub_8055C68 +// sub_8055C88 +// sub_8055C8C +// sub_8055CAC +// sub_8055CB0 +// sub_8055D18 +// sub_8055D30 +// sub_8055D38 +u8 npc_something3(u8, u8); +u8 LinkPlayerDetectCollision(u8, u8, s16, s16); +void CreateLinkPlayerSprite(u8); +void SpriteCB_LinkPlayer(struct Sprite *); + +#endif // GUARD_ROM4_H diff --git a/include/rtc.h b/include/rtc.h index 4c9d06d31..fdc5ad709 100644 --- a/include/rtc.h +++ b/include/rtc.h @@ -1,7 +1,7 @@ #ifndef GUARD_RTC_UTIL_H #define GUARD_RTC_UTIL_H -#include "global.h" +#include "siirtc.h" #define RTC_INIT_ERROR 0x0001 #define RTC_INIT_WARNING 0x0002 @@ -19,18 +19,30 @@ extern struct Time gLocalTime; -void RtcInit(); -u16 RtcGetErrorStatus(); -void RtcReset(); +void RtcDisableInterrupts(void); +void RtcRestoreInterrupts(void); +u32 ConvertBcdToBinary(u8 bcd); +bool8 IsLeapYear(u8 year); +u16 ConvertDateToDayCount(u8 year, u8 month, u8 day); +u16 RtcGetDayCount(struct SiiRtcInfo *rtc); +void RtcInit(void); +u16 RtcGetErrorStatus(void); +void RtcGetInfo(struct SiiRtcInfo *rtc); +void RtcGetDateTime(struct SiiRtcInfo *rtc); +void RtcGetStatus(struct SiiRtcInfo *rtc); +void RtcGetRawInfo(struct SiiRtcInfo *rtc); +u16 RtcCheckInfo(struct SiiRtcInfo *rtc); +void RtcReset(void); void FormatDecimalTime(u8 *dest, s32 hour, s32 minute, s32 second); void FormatHexTime(u8 *dest, s32 hour, s32 minute, s32 second); void FormatHexRtcTime(u8 *dest); void FormatDecimalDate(u8 *dest, s32 year, s32 month, s32 day); void FormatHexDate(u8 *dest, s32 year, s32 month, s32 day); -void RtcCalcLocalTime(); +void RtcCalcTimeDifference(struct SiiRtcInfo *rtc, struct Time *result, struct Time *t); +void RtcCalcLocalTime(void); void RtcInitLocalTimeOffset(s32 hour, s32 minute); void RtcCalcLocalTimeOffset(s32 days, s32 hours, s32 minutes, s32 seconds); void CalcTimeDifference(struct Time *result, struct Time *t1, struct Time *t2); -u32 RtcGetMinuteCount(); +u32 RtcGetMinuteCount(void); #endif // GUARD_RTC_UTIL_H diff --git a/include/safari_zone.h b/include/safari_zone.h new file mode 100644 index 000000000..f491be2f1 --- /dev/null +++ b/include/safari_zone.h @@ -0,0 +1,21 @@ +#ifndef GUARD_SAFARI_ZONE_H +#define GUARD_SAFARI_ZONE_H + +bool32 GetSafariZoneFlag(void); +void SetSafariZoneFlag(void); +void ResetSafariZoneFlag(void); + +void EnterSafariMode(void); +void ExitSafariMode(void); + +bool8 SafariZoneTakeStep(void); +void SafariZoneRetirePrompt(void); +void sub_80C824C(void); + +void SafariZoneGetPokeblockNameInFeeder(void); +struct Pokeblock *unref_sub_80C8418(void); +struct Pokeblock *SafariZoneGetActivePokeblock(void); +void SafariZoneActivatePokeblockFeeder(u8 pokeblock_index); +bool8 unref_sub_80C853C(void); + +#endif // GUARD_SAFARI_ZONE_H diff --git a/include/save.h b/include/save.h new file mode 100644 index 000000000..976af77c6 --- /dev/null +++ b/include/save.h @@ -0,0 +1,60 @@ +#ifndef GUARD_SAVE_H +#define GUARD_SAVE_H + +struct SaveSectionLocation +{ + void *data; + u16 size; +}; + +struct SaveSection +{ + u8 data[0xFF4]; + u16 id; + u16 checksum; + u32 unknown; + u32 counter; +}; + +struct UnkSaveSection +{ + u8 data[0xFF4]; + u32 unknown; +}; + +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 *); +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); +u8 sub_8125D80(void); +bool8 sub_8125DA8(void); +u8 sub_8125DDC(void); +u8 sub_8125E04(void); +u8 sub_8125E2C(void); +u8 sub_8125E6C(void); +u8 sub_8125EC8(u8 a1); +bool8 unref_sub_8125F4C(struct UnkSaveSection *a1); +u8 unref_sub_8125FA0(void); +u8 unref_sub_8125FF0(u8 *data, u16 size); +u8 unref_sub_8126068(u8 sector, u8 *data, u32 size); +u8 unref_sub_8126080(u8 sector, u8 *data); + +#endif // GUARD_SAVE_H diff --git a/include/save_failed_screen.h b/include/save_failed_screen.h new file mode 100644 index 000000000..5a097fb3f --- /dev/null +++ b/include/save_failed_screen.h @@ -0,0 +1,6 @@ +#ifndef GUARD_SAVE_FAILED_SCREEN_H +#define GUARD_SAVE_FAILED_SCREEN_H + +void DoSaveFailedScreen(u8); + +#endif // GUARD_SAVE_FAILED_SCREEN_H diff --git a/include/save_menu_util.h b/include/save_menu_util.h new file mode 100644 index 000000000..560a39d89 --- /dev/null +++ b/include/save_menu_util.h @@ -0,0 +1,16 @@ +#ifndef GUARD_SAVE_MENU_UTIL_H +#define GUARD_SAVE_MENU_UTIL_H + +void HandleDrawSaveWindowInfo(s16 left, s16 top); +void sub_80946C8(u16 left, u16 top); +u8 sub_809473C(void); +void PrintSavePlayerName(s16 x, s16 y); +void PrintSaveMapName(s16 x, s16 y); +void PrintSaveBadges(s16 x, s16 y); +void PrintSavePokedexCount(s16 x, s16 y); +void PrintSavePlayTime(s16 x, s16 y); +u8 GetBadgeCount(void); +u16 GetPokedexSeenCount(void); +void FormatPlayTime(char *playtime, u16 hours, u16 minutes, bool16 colon); + +#endif // GUARD_SAVE_MENU_UTIL_H diff --git a/include/script.h b/include/script.h index 9b165bed2..a4c7dd575 100644 --- a/include/script.h +++ b/include/script.h @@ -39,7 +39,7 @@ void ScriptContext1_Init(void); bool8 ScriptContext2_RunScript(void); void ScriptContext1_SetupScript(u8 *ptr); void ScriptContext1_Stop(void); -void EnableBothScriptContexts(); +void EnableBothScriptContexts(void); void ScriptContext2_RunNewScript(u8 *ptr); u8 *mapheader_get_tagged_pointer(u8 tag); void mapheader_run_script_by_tag(u8 tag); diff --git a/include/siirtc.h b/include/siirtc.h index 5864f95b8..de4fd634d 100644 --- a/include/siirtc.h +++ b/include/siirtc.h @@ -39,10 +39,10 @@ struct SiiRtcInfo u8 alarmMinute; }; -void SiiRtcUnprotect(); -void SiiRtcProtect(); -u8 SiiRtcProbe(); -bool8 SiiRtcReset(); +void SiiRtcUnprotect(void); +void SiiRtcProtect(void); +u8 SiiRtcProbe(void); +bool8 SiiRtcReset(void); bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc); bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc); bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc); diff --git a/include/species.h b/include/species.h index 5802f782d..e91d9050a 100644 --- a/include/species.h +++ b/include/species.h @@ -388,5 +388,6 @@ #define SPECIES_JIRACHI 0x199 #define SPECIES_DEOXYS 0x19a #define SPECIES_CHIMECHO 0x19b +#define SPECIES_EGG 0x19c #endif // GUARD_SPECIES_H diff --git a/include/sprite.h b/include/sprite.h index 2da099d59..13d94e9f3 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -130,13 +130,13 @@ struct SpriteTemplate struct Sprite { - struct OamData oam; - union AnimCmd **anims; - struct SpriteFrameImage *images; - union AffineAnimCmd **affineAnims; - struct SpriteTemplate *template; - struct SubspriteTable *subspriteTables; - void (*callback)(struct Sprite *); + /*0x00*/ struct OamData oam; + /*0x08*/ union AnimCmd **anims; + /*0x0C*/ struct SpriteFrameImage *images; + /*0x10*/ union AffineAnimCmd **affineAnims; + /*0x14*/ const struct SpriteTemplate *template; + /*0x18*/ struct SubspriteTable *subspriteTables; + /*0x1C*/ void (*callback)(struct Sprite *); /*0x20*/ struct Coords16 pos1; /*0x24*/ struct Coords16 pos2; @@ -179,10 +179,10 @@ struct Sprite /*0x40*/ u16 sheetTileStart; - u8 subspriteTableNum:6; - u8 subspriteMode:2; + /*0x42*/ u8 subspriteTableNum:6; + u8 subspriteMode:2; - u8 subpriority; + /*0x43*/ u8 subpriority; }; extern s16 gSpriteCoordOffsetX; @@ -193,8 +193,8 @@ extern struct Sprite gSprites[]; void ResetSpriteData(void); void AnimateSprites(void); void BuildOamBuffer(void); -u8 CreateSprite(struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority); -u8 CreateSpriteAtEnd(struct SpriteTemplate *template, u16 x, u16 y, u8 subpriority); +u8 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority); +u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, u16 x, u16 y, u8 subpriority); u8 CreateInvisibleSprite(void (*callback)(struct Sprite *)); u8 CreateSpriteAndAnimate(struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority); void DestroySprite(struct Sprite *sprite); @@ -236,8 +236,8 @@ u16 GetSpriteTileTagByTileStart(u16 start); void RequestSpriteSheetCopy(struct SpriteSheet *sheet); u16 LoadSpriteSheetDeferred(struct SpriteSheet *sheet); void FreeAllSpritePalettes(void); -u8 LoadSpritePalette(struct SpritePalette *palette); -void LoadSpritePalettes(struct SpritePalette *palettes); +u8 LoadSpritePalette(const struct SpritePalette *palette); +void LoadSpritePalettes(const struct SpritePalette *palettes); u8 AllocSpritePalette(u16 tag); u8 IndexOfSpritePaletteTag(u16 tag); u16 GetSpritePaletteTagByPaletteNum(u8 paletteNum); @@ -245,5 +245,8 @@ void FreeSpritePaletteByTag(u16 tag); void SetSubspriteTables(struct Sprite *sprite, struct SubspriteTable *subspriteTables); bool8 AddSpriteToOamBuffer(struct Sprite *object, u8 *oamIndex); bool8 AddSubspritesToOamBuffer(struct Sprite *sprite, struct OamData *destOam, u8 *oamIndex); +void CopyToSprites(u8 *src); +void CopyFromSprites(u8 *dest); +u8 SpriteTileAllocBitmapOp(u16 bit, u8 op); #endif // GUARD_SPRITE_H diff --git a/include/start_menu.h b/include/start_menu.h new file mode 100644 index 000000000..5169b3bf0 --- /dev/null +++ b/include/start_menu.h @@ -0,0 +1,11 @@ +#ifndef GUARD_STARTER_CHOOSE_H +#define GUARD_STARTER_CHOOSE_H + +//Public functions +void CreateStartMenuTask(void (*func)(u8)); +void sub_80712B4(u8 taskId); +void sub_8071310(void); +void InitSaveDialog(void); +void sub_8071B28(void); + +#endif // GUARD_STARTER_CHOOSE_H diff --git a/include/starter_choose.h b/include/starter_choose.h new file mode 100644 index 000000000..4a7e0514c --- /dev/null +++ b/include/starter_choose.h @@ -0,0 +1,13 @@ +#ifndef GUARD_STARTER_CHOOSE_H +#define GUARD_STARTER_CHOOSE_H + +#include "sprite.h" + +u16 GetStarterPokemon(u16); +void CB2_ChooseStarter(void); +void nullsub_72(struct Sprite *sprite); +void sub_810A62C(struct Sprite *sprite); +void sub_810A68C(struct Sprite *sprite); +void StarterPokemonSpriteAnimCallback(struct Sprite *sprite); + +#endif // GUARD_STARTER_CHOOSE_H diff --git a/include/string_util.h b/include/string_util.h index fd7d39045..c20965380 100644 --- a/include/string_util.h +++ b/include/string_util.h @@ -1,8 +1,6 @@ #ifndef GUARD_STRING_UTIL_H #define GUARD_STRING_UTIL_H -#include "global.h" - enum StringConvertMode { STR_CONV_MODE_LEFT_ALIGN, diff --git a/include/task.h b/include/task.h index a536bcab5..d2b2302cf 100644 --- a/include/task.h +++ b/include/task.h @@ -15,15 +15,15 @@ struct Task extern struct Task gTasks[]; -void ResetTasks(); +void ResetTasks(void); u8 CreateTask(TaskFunc func, u8 priority); void DestroyTask(u8 taskId); -void RunTasks(); +void RunTasks(void); void TaskDummy(u8 taskId); void SetTaskFuncWithFollowupFunc(u8 taskId, TaskFunc func, TaskFunc followupFunc); void SwitchTaskToFollowupFunc(u8 taskId); bool8 FuncIsActiveTask(TaskFunc func); u8 FindTaskIdByFunc(TaskFunc func); -u8 GetTaskCount(); +u8 GetTaskCount(void); #endif // GUARD_TASK_H diff --git a/include/text.h b/include/text.h index d79611f85..99d346a23 100644 --- a/include/text.h +++ b/include/text.h @@ -1,14 +1,14 @@ #ifndef GUARD_TEXT_H #define GUARD_TEXT_H -#include "global.h" - #define CHAR_SPACE 0x00 #define CHAR_QUESTION_MARK 0xAC #define CHAR_HYPHEN 0xAE +#define CHAR_CURRENCY 0xB7 #define CHAR_COLON 0xF0 #define EXT_CTRL_CODE_BEGIN 0xFC // extended control code #define PLACEHOLDER_BEGIN 0xFD // string placeholder +#define CHAR_NEWLINE 0xFE #define EOS 0xFF // end of string struct WindowConfig @@ -37,7 +37,7 @@ struct Window { u8 textMode; u8 fontNum; - u8 charset; + u8 language; u8 foregroundColor; u8 backgroundColor; u8 shadowColor; @@ -88,8 +88,8 @@ extern const struct WindowConfig gWindowConfig_81E6D54; extern const struct WindowConfig gWindowConfig_81E6D70; extern const struct WindowConfig gWindowConfig_81E6D8C; extern const struct WindowConfig gWindowConfig_81E6DA8; -extern const struct WindowConfig gWindowConfig_81E6DC4; -extern const struct WindowConfig gWindowConfig_81E6DE0; +extern const struct WindowConfig WindowConfig_TrainerCard_Back_Values; +extern const struct WindowConfig WindowConfig_TrainerCard_Back_Labels; extern const struct WindowConfig gWindowConfig_81E6DFC; extern const struct WindowConfig gWindowConfig_81E6E18; extern const struct WindowConfig gWindowConfig_81E6E34; @@ -139,7 +139,7 @@ void SetUpWindowConfig(const struct WindowConfig *winConfig); u16 InitWindowTileData(struct Window *win, u16 startOffset); u32 MultistepInitWindowTileData(struct Window *win, u16 startOffset); bool32 MultistepLoadFont(void); -void InitWindowFromConfig(struct Window *win, struct WindowConfig *winConfig); +void InitWindowFromConfig(struct Window *win, const struct WindowConfig *winConfig); void InitWindow(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top); void sub_8002E4C(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u16 top, u32 a6); void sub_8002E90(struct Window *win, const u8 *text); diff --git a/include/text_window.h b/include/text_window.h index f68db005a..6df3f7d33 100644 --- a/include/text_window.h +++ b/include/text_window.h @@ -1,15 +1,21 @@ #ifndef GUARD_TEXT_WINDOW_H #define GUARD_TEXT_WINDOW_H -#include "global.h" +#include "text.h" -u16 SetTextWindowBaseTileNum(u16); -void LoadTextWindowGraphics(struct Window *); -void LoadTextWindowGraphics_OverridePalSlot(struct Window *, u8); -void LoadTextWindowGraphics_OverrideFrameType(struct Window *, u8); +struct FrameGraphics +{ + u8 *tiles; + u16 *palette; +}; + +u16 SetTextWindowBaseTileNum(u16 baseTileNum); +void LoadTextWindowGraphics(struct Window *win); +void LoadTextWindowGraphics_OverridePalSlot(struct Window *win, u8 palSlot); +void LoadTextWindowGraphics_OverrideFrameType(struct Window *win, u8 frameType); void DrawTextWindow(struct Window *win, u8 left, u8 top, u8 right, u8 bottom); const struct FrameGraphics *GetTextWindowFrameGraphics(u8 frameType); -u16 SetMessageBoxBaseTileNum(u16); +u16 SetMessageBoxBaseTileNum(u16 baseTileNum); void unref_sub_80651DC(struct Window *, u8 *); void DisplayMessageBox(struct Window *); void DrawStandardMessageBox(struct Window *win); diff --git a/include/tileset_anim.h b/include/tileset_anim.h new file mode 100644 index 000000000..7556721d8 --- /dev/null +++ b/include/tileset_anim.h @@ -0,0 +1,30 @@ +#ifndef GUARD_TITLE_SCREEN_H +#define GUARD_TITLE_SCREEN_H + +void sub_8072E74(void); +void cur_mapheader_run_tileset_funcs_after_some_cpuset(void); +void sub_8072ED0(void); +void sub_8072EDC(void); +void TilesetCB_General(void); +void TilesetCB_Building(void); +void TilesetCB_Petalburg(void); +void TilesetCB_Rustboro(void); +void TilesetCB_Dewford(void); +void TilesetCB_Slateport(void); +void TilesetCB_Mauville(void); +void TilesetCB_Lavaridge(void); +void TilesetCB_Fallarbor(void); +void TilesetCB_Fortree(void); +void TilesetCB_Lilycove(void); +void TilesetCB_Mossdeep(void); +void TilesetCB_EverGrande(void); +void TilesetCB_Pacifidlog(void); +void TilesetCB_Sootopolis(void); +void TilesetCB_Underwater(void); +void TilesetCB_SootopolisGym(void); +void TilesetCB_Cave(void); +void TilesetCB_EliteFour(void); +void TilesetCB_MauvilleGym(void); +void TilesetCB_BikeShop(void); + +#endif // GUARD_TITLE_SCREEN_H diff --git a/include/title_screen.h b/include/title_screen.h new file mode 100644 index 000000000..304ec0540 --- /dev/null +++ b/include/title_screen.h @@ -0,0 +1,13 @@ +#ifndef GUARD_TITLE_SCREEN_H +#define GUARD_TITLE_SCREEN_H + +#include "sprite.h" + +void SpriteCallback_VersionBannerLeft(struct Sprite *sprite); +void SpriteCallback_VersionBannerRight(struct Sprite *sprite); +void SpriteCallback_PressStartCopyrightBanner(struct Sprite *sprite); +void SpriteCallback_PokemonLogoShine(struct Sprite *sprite); + +void CB2_InitTitleScreen(void); + +#endif // GUARD_TITLE_SCREEN_H diff --git a/include/trainer_card.h b/include/trainer_card.h new file mode 100644 index 000000000..7269c0b20 --- /dev/null +++ b/include/trainer_card.h @@ -0,0 +1,52 @@ +#ifndef GUARD_TRAINER_CARD_H +#define GUARD_TRAINER_CARD_H + +struct TrainerCard { + /*0x00*/ u8 gender; + /*0x01*/ u8 stars; + /*0x02*/ bool8 hasPokedex; + /*0x03*/ bool8 var_3; + /*0x04*/ bool8 var_4; + /*0x05*/ u8 var_5; + /*0x06*/ u16 firstHallOfFameA; + /*0x08*/ u16 firstHallOfFameB; + /*0x0A*/ u16 firstHallOfFameC; + /*0x0C*/ u16 pokedexSeen; + /*0x0E*/ u16 trainerId; + /*0x10*/ u16 playTimeHours; + /*0x12*/ u16 playTimeMinutes; + /*0x14*/ u16 linkBattleWins; + /*0x16*/ u16 linkBattleLosses; + /*0x18*/ u16 battleTowerWins; + /*0x1A*/ u16 battleTowerLosses; + /*0x1C*/ u16 contestsWithFriends; + /*0x1E*/ u16 pokeblocksWithFriends; + /*0x20*/ u16 pokemonTrades; + /*0x22*/ u16 var_22; + /*0x24*/ u32 money; + /*0x28*/ u16 var_28[4]; + /*0x30*/ u8 playerName[8]; +}; + +void sub_8093110(void (*)(void)); +void sub_8093130(u8, void (*)(void)); +void sub_8093390(struct TrainerCard *); +u8 sub_80934C4(u8 id); + +// gUnknown_083B5EBC:: @ 83B5EBC +bool8 sub_8093864(); +bool8 sub_80938A8(); +bool8 sub_80938CC(); +bool8 sub_8093918(); +bool8 sub_8093938(); +bool8 sub_8093954(); +bool8 sub_8093980(); + +// gUnknown_083B5ED8:: @ 83B5ED8 +bool8 sub_8093AA0(); +bool8 sub_8093AF0(); +bool8 sub_8093C0C(struct TrainerCard *trainerCard); +bool8 sub_8093C38(); +bool8 sub_8093D50(void); + +#endif // GUARD_TRAINER_CARD_H diff --git a/include/trainer_see.h b/include/trainer_see.h new file mode 100644 index 000000000..e4d1fe270 --- /dev/null +++ b/include/trainer_see.h @@ -0,0 +1,34 @@ +#ifndef GUARD_TRAINER_SEE_H +#define GUARD_TRAINER_SEE_H + +#include "task.h" + +bool8 CheckTrainers(void); +bool8 CheckTrainer(u8); +u8 TrainerCanApproachPlayer(struct MapObject *); +bool8 IsTrainerInRangeSouth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y); +bool8 IsTrainerInRangeNorth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y); +bool8 IsTrainerInRangeWest(struct MapObject *trainerObj, s16 vision, s16 x, s16 y); +bool8 IsTrainerInRangeEast(struct MapObject *trainerObj, s16 vision, s16 x, s16 y); +bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *, u8, u8); +void sub_80842C8(struct MapObject *, u8); +void sub_80842FC(void (*func)(u8)); +void RunTrainerSeeFuncList(u8); +u8 sub_8084394(void); +s8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj); +s8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj); +s8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj); +s8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj); +s8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj); +s8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj); +s8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj); +s8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj); +s8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj); +s8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj); +s8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj); +void sub_80846E4(u8 taskId); +void sub_8084794(u32 var); +void sub_80847C8(void); +void sub_80847D8(u8); + +#endif // GUARD_TRAINER_SEE_H diff --git a/include/truck_scene.h b/include/truck_scene.h new file mode 100644 index 000000000..f55a4ced7 --- /dev/null +++ b/include/truck_scene.h @@ -0,0 +1,13 @@ +#ifndef GUARD_TRUCK_SCENE_H +#define GUARD_TRUCK_SCENE_H + +s32 GetTruckCameraBobbingY(int a1); +s32 GetTruckBoxMovement(int a1); +void Task_Truck1(u8 taskId); +void Task_Truck2(u8 taskId); +void Task_Truck3(u8 taskId); +void Task_HandleTruckSequence(u8 taskId); +void ExecuteTruckSequence(void); +void EndTruckSequence(void); + +#endif // GUARD_TRUCK_SCENE_H diff --git a/include/var.h b/include/var.h deleted file mode 100644 index c76b8c411..000000000 --- a/include/var.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef GUARD_VAR_H -#define GUARD_VAR_H - -#include "vars.h" - -u16 *GetVarPointer(u16 id); -u16 VarGet(u16 id); -bool8 VarSet(u16 id, u16 value); -u8 VarGetFieldObjectGraphicsId(u8 id); - -#endif // GUARD_VAR_H diff --git a/include/vars.h b/include/vars.h index db6f097b7..4661bbd52 100644 --- a/include/vars.h +++ b/include/vars.h @@ -1,6 +1,24 @@ #ifndef GUARD_VARS_H #define GUARD_VARS_H -#define VAR_REPEL_STEP_COUNT 0x4021 +#define VAR_RECYCLE_GOODS 0x4020 +#define VAR_REPEL_STEP_COUNT 0x4021 + +#define VAR_FIRST_POKE 0x4023 +#define VAR_MIRAGE_RND_H 0x4024 +#define VAR_MIRAGE_RND_L 0x4025 + +#define VAR_RESET_RTC_ENABLE 0x402C + +#define VAR_DAYS 0x4040 + +#define VAR_POKELOT_PRIZE 0x4045 +#define VAR_NATIONAL_DEX 0x4046 +#define VAR_SHROOMISH_SIZE_RECORD 0x4047 + +#define VAR_POKELOT_RND1 0x404B +#define VAR_POKELOT_RND2 0x404C + +#define VAR_BARBOACH_SIZE_RECORD 0x404F #endif // GUARD_VARS_H diff --git a/include/wallclock.h b/include/wallclock.h new file mode 100644 index 000000000..c869e3941 --- /dev/null +++ b/include/wallclock.h @@ -0,0 +1,14 @@ +#ifndef GUARD_WALLCLOCK_H +#define GUARD_WALLCLOCK_H + +#include "sprite.h" + +void CB2_StartWallClock(void); +void CB2_ViewWallClock(void); + +void sub_810B05C(struct Sprite *sprite); +void sub_810B0F4(struct Sprite *sprite); +void sub_810B18C(struct Sprite *sprite); +void sub_810B230(struct Sprite *sprite); + +#endif // GUARD_WALLCLOCK_H diff --git a/include/weather.h b/include/weather.h new file mode 100644 index 000000000..af07c970d --- /dev/null +++ b/include/weather.h @@ -0,0 +1,43 @@ +#ifndef GUARD_WEATHER_H +#define GUARD_WEATHER_H + +void sub_807C828(void); +void DoWeatherEffect(u8 effect); +void sub_807C988(u8 effect); +void sub_807C9B4(u8 effect); +void sub_807C9E4(u8); +void sub_807CA34(u8); +void sub_807CAE8(void); +void nullsub_38(void); +u32 sub_807CB0C(void); +void sub_807CB10(void); +void sub_807CC24(void); +void sub_807CCAC(void); +u8 sub_807CDC4(void); +u8 sub_807CE24(void); +u8 sub_807CE7C(void); +void nullsub_39(void); + +// ASM +void sub_807CEBC(u8, u8, s8); +void sub_807D1BC(u8, u8, u8, u8, u16); +void sub_807D304(int, u8, u16); +void sub_807D424(u8, u16); +// ... +void fade_screen(u8, u8); +// ... +void sub_807D78C(u8 tag); +void sub_807D874(u8); +// ... +void sub_807DB64(u8, u8); +// ... +void PlayRainSoundEffect(void); +// ... +void SetSav1Weather(u32); +u8 GetSav1Weather(void); +void sub_80806E4(void); +// ... +void DoCurrentWeather(void); +void sub_8080750(); + +#endif // GUARD_WEATHER_H diff --git a/include/wild_encounter.h b/include/wild_encounter.h new file mode 100644 index 000000000..33b7df7b9 --- /dev/null +++ b/include/wild_encounter.h @@ -0,0 +1,14 @@ +#ifndef GUARD_WILD_ENCOUNTER_H +#define GUARD_WILD_ENCOUNTER_H + +void DisableWildEncounters(bool8 disabled); +bool8 StandardWildEncounter(u16 a, u16 b); +void RockSmashWildEncounter(void); +bool8 SweetScentWildEncounter(void); +bool8 GetFishingWildMonListHeader(void); +void FishingWildEncounter(u8 rod); +u16 GetLocalWildMon(bool8 *isWaterMon); +u16 GetMirageIslandMon(void); +bool8 UpdateRepelCounter(void); + +#endif // GUARD_WILD_ENCOUNTER_H |