summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/asm.h36
-rw-r--r--include/asm.inc.h494
-rw-r--r--include/asm_fieldmap.h23
-rw-r--r--include/battle.h51
-rw-r--r--include/battle_setup.h84
-rw-r--r--include/berry.h85
-rw-r--r--include/berry_tag_screen.h6
-rw-r--r--include/blend_palette.h6
-rw-r--r--include/coins.h12
-rw-r--r--include/config.h25
-rw-r--r--include/decompress.h17
-rw-r--r--include/event_data.h28
-rw-r--r--include/field_camera.h18
-rw-r--r--include/field_effect.h29
-rw-r--r--include/field_map_obj.h11
-rw-r--r--include/field_message_box.h3
-rw-r--r--include/field_player_avatar.h112
-rw-r--r--include/flag.h11
-rw-r--r--include/flags.h55
-rw-r--r--include/gba/m4a_internal.h5
-rw-r--r--include/gba/macro.h2
-rw-r--r--include/gba/syscall.h2
-rw-r--r--include/gba/types.h21
-rw-r--r--include/global.berry.h57
-rw-r--r--include/global.fieldmap.h (renamed from include/fieldmap.h)84
-rw-r--r--include/global.h169
-rw-r--r--include/heal_location.h18
-rw-r--r--include/hold_effects.h72
-rw-r--r--include/intro.h7
-rw-r--r--include/item.h35
-rw-r--r--include/items.h315
-rw-r--r--include/landmark.h6
-rw-r--r--include/libgncmultiboot.h16
-rw-r--r--include/link.h20
-rw-r--r--include/load_save.h17
-rw-r--r--include/lottery_corner.h12
-rw-r--r--include/m4a.h18
-rw-r--r--include/mail.h8
-rw-r--r--include/main.h48
-rw-r--r--include/main_menu.h6
-rw-r--r--include/map_obj_lock.h16
-rw-r--r--include/menu.h22
-rw-r--r--include/menu_cursor.h24
-rw-r--r--include/metatile_behavior.h136
-rw-r--r--include/metatile_behaviors.h173
-rw-r--r--include/money.h17
-rw-r--r--include/mori_debug_menu.h17
-rw-r--r--include/mystery_event_menu.h6
-rw-r--r--include/new_game.h16
-rw-r--r--include/option_menu.h6
-rw-r--r--include/palette.h4
-rw-r--r--include/play_time.h9
-rw-r--r--include/pokedex.h158
-rw-r--r--include/pokemon.h117
-rw-r--r--include/pokemon_size_record.h14
-rw-r--r--include/record_mixing.h34
-rw-r--r--include/rom4.h228
-rw-r--r--include/rtc.h24
-rw-r--r--include/safari_zone.h21
-rw-r--r--include/save.h60
-rw-r--r--include/save_failed_screen.h6
-rw-r--r--include/save_menu_util.h16
-rw-r--r--include/script.h2
-rw-r--r--include/siirtc.h8
-rw-r--r--include/species.h1
-rw-r--r--include/sprite.h31
-rw-r--r--include/start_menu.h11
-rw-r--r--include/starter_choose.h13
-rw-r--r--include/string_util.h2
-rw-r--r--include/task.h6
-rw-r--r--include/text.h12
-rw-r--r--include/text_window.h18
-rw-r--r--include/tileset_anim.h30
-rw-r--r--include/title_screen.h13
-rw-r--r--include/trainer_card.h52
-rw-r--r--include/trainer_see.h34
-rw-r--r--include/truck_scene.h13
-rw-r--r--include/var.h11
-rw-r--r--include/vars.h20
-rw-r--r--include/wallclock.h14
-rw-r--r--include/weather.h43
-rw-r--r--include/wild_encounter.h14
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