summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/asm.h36
-rw-r--r--include/asm.inc.h473
-rw-r--r--include/battle_setup.h77
-rw-r--r--include/berry.h38
-rw-r--r--include/blend_palette.h6
-rw-r--r--include/field_player_avatar.h95
-rw-r--r--include/global.h17
-rw-r--r--include/m4a.h11
-rw-r--r--include/main_menu.h61
-rw-r--r--include/pokedex.h2
-rw-r--r--include/rom4.h208
-rw-r--r--include/trainer_see.h1
-rw-r--r--include/weather.h3
-rw-r--r--src/battle_ai.c10
-rw-r--r--src/battle_setup.c56
-rw-r--r--src/berry.c12
-rw-r--r--src/decompress.c3
-rw-r--r--src/dewford_trend.c13
-rw-r--r--src/diploma.c7
-rw-r--r--src/field_camera.c10
-rw-r--r--src/field_door.c5
-rw-r--r--src/field_effect.c12
-rw-r--r--src/field_player_avatar.c102
-rw-r--r--src/field_poison.c5
-rw-r--r--src/fldeff_emotion.c6
-rw-r--r--src/intro.c34
-rw-r--r--src/link.c5
-rw-r--r--src/main.c9
-rw-r--r--src/main_menu.c17
-rw-r--r--src/map_obj_80643A4.c6
-rw-r--r--src/map_obj_lock.c10
-rw-r--r--src/mori_debug_menu.c6
-rw-r--r--src/new_game.c2
-rw-r--r--src/palette.c4
-rw-r--r--src/pokedex.c2
-rw-r--r--src/pokemon_1.c4
-rw-r--r--src/pokemon_2.c81
-rw-r--r--src/record_mixing.c18
-rw-r--r--src/rom4.c131
-rw-r--r--src/safari_zone.c4
-rw-r--r--src/save.c4
-rw-r--r--src/save_menu_util.c1
-rw-r--r--src/scrcmd.c98
-rw-r--r--src/sound.c3
-rw-r--r--src/start_menu.c21
-rw-r--r--src/starter_choose.c7
-rw-r--r--src/title_screen.c9
-rw-r--r--src/trainer_see.c20
-rw-r--r--src/truck_scene.c4
-rw-r--r--src/wallclock.c4
-rw-r--r--src/weather.c1
-rw-r--r--src/wild_encounter.c9
52 files changed, 1169 insertions, 614 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..fc7093437
--- /dev/null
+++ b/include/asm.inc.h
@@ -0,0 +1,473 @@
+// 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);
+
+// asm/rom_803D1FC.o
+u16 SpeciesToNationalPokedexNum(u16);
+u32 SpeciesToCryId(u32);
+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/rom_8040EB4.o
+void StoreWordInTwoHalfwords(u32, u8 *);
+void LoadWordFromTwoHalfwords(u32, u8 *);
+
+// asm/daycare.o
+u8 daycare_count_pokemon(u32);
+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/rom_804373C.o
+void CreatePokeballSprite(u8 r0, u8 r1, u8 r2, u8 r3, u8 s1, u8 s2, u8 s3, u16 s4);
+
+// asm/load_save.o
+void CheckForFlashMemory(void);
+int sub_80479F8();
+void sub_8047A04();
+void sub_8047A1C(void);
+void sub_8047A34(void);
+void save_serialize_game(void);
+void save_deserialize_game();
+
+// asm/berry_blender.o
+void sub_80516C4(u8, u16);
+
+// asm/metatile_behavior.o
+bool8 MetatileBehavior_IsSandOrDeepSand(char);
+bool8 is_tile_x69_2_warp_door(u8);
+u8 MetatileBehavior_IsDoor(u8);
+bool8 MetatileBehavior_IsLadder(u8);
+u8 sub_8056F08(u8);
+bool8 sub_8056F24(u8);
+u8 MetatileBehavior_IsSurfableWaterOrUnderwater(u8);
+bool8 MetatileBehavior_IsEastArrowWarp(u8);
+bool8 MetatileBehavior_IsWestArrowWarp(u8);
+bool8 MetatileBehavior_IsNorthArrowWarp(u8);
+bool8 MetatileBehavior_IsSouthArrowWarp(u8);
+bool8 MetatileBehavior_IsTallGrass(char);
+bool8 MetatileBehavior_IsLongGrass(char);
+u8 MetatileBehavior_IsBridge(u8);
+u8 sub_8057450(u8);
+u8 MetatileBehavior_IsLandWildEncounter(u8);
+u8 MetatileBehavior_IsWaterWildEncounter(u8);
+bool8 sub_80574C4(char);
+bool8 sub_80574D8(char);
+bool8 sub_8057568(char);
+bool8 sub_805759C(u8);
+bool8 MetatileBehavior_IsSurfableFishableWater(u8);
+
+// 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 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/map_obj_80643A4.o
+bool8 sub_80643A4(struct MapObject *);
+void player_bitmagic(void);
+void sub_8064470(u8);
+void sub_806451C(void);
+void sub_806487C(struct Sprite *sprite, bool8 invisible);
+void sub_8064990(u8, u8);
+
+// asm/rom_8065394.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();
+void sub_8069030(void);
+void sub_806906C(void);
+bool32 IsNationalPokedex(void);
+bool32 IsMysteryGiftAvailable(void);
+int sub_80691DC(void);
+
+// asm/rom_806936C.o
+void overworld_ensure_per_step_coros_running();
+void activate_per_step_callback(u8);
+void wild_encounter_reset_coro_args(void);
+void DoTimeBasedEvents(void);
+
+// asm/reset_rtc_screen.o
+void CB2_InitResetRtcScreen(void);
+
+// asm/rom_806D7F8.o
+bool8 pokemon_has_move(struct Pokemon *, u16);
+
+// asm/rom_8074BAC.o
+u8 battle_side_get_owner(u8);
+u8 battle_get_per_side_status(u8);
+u8 battle_get_side_with_given_state(u8);
+
+// 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 *);
+u8 CreateBirchSprite(u8, u8, u8);
+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);
+void sub_8089A70(void);
+
+// asm/trainer_card.o
+void sub_8093110(void (*)(void));
+void sub_8093130(u8, void (*)(void));
+
+// asm/rom_8094928.o
+void sub_80961D8(void);
+u8 pokemon_ailments_get_primary(u32);
+u8 exec_movement(u8, u8, u8, void *);
+bool8 sub_80A212C(u8, u8, u8);
+void sub_80A2178(void);
+void sub_80A2B18(void);
+void AddMapNamePopUpWindowTask(void);
+void HideMapNamePopUpWindow();
+
+// asm/item_menu.o
+void sub_80A3684(void);
+void sub_80A3714(void);
+void sub_80A53F8(void);
+void sub_80A68CC();
+
+// asm/contest.o
+void sub_80AB1B0(void);
+void sub_80B2D1C(void);
+
+// asm/shop.o
+void CreatePokemartMenu(void *);
+void CreateDecorationShop1Menu(void *);
+void CreateDecorationShop2Menu(void *);
+
+// asm/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/money.o
+bool8 IsEnoughMoney(u32, u32);
+void sub_80B79B8(u32 *, u32);
+void sub_80B79E0(u32 *, u32);
+void sub_80B7BEC(u32, u8, u8);
+void sub_80B7C14(u32, u8, u8);
+void RemoveMoneyLabelObject(u8, u8);
+
+// 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);
+void sub_80BE97C(u8);
+void sub_80BEA50(u16);
+bool8 GetPriceReduction(u8);
+u8 sub_80BF0B8(u32);
+void sub_80BFD44(void *, u32, u8);
+void sub_80C0514(void *, u32, u8);
+
+// asm/contest_link_80C2020.o
+void sub_80C48C8(void);
+void sub_80C4940(void);
+void sub_80C4980(u8);
+
+// asm/script_pokemon_util_80C4BF0.o
+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/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);
+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/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 CopyMapName();
+
+// asm/slot_machine.o
+void PlaySlotMachine(u8, void *);
+
+// asm/contest_painting.o
+void sub_8106630(u32);
+
+// asm/rom6.o
+void sub_810C994(void);
+void sub_810CA6C(s32);
+s16 sub_810CAE4(u8, struct Pokeblock *);
+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);
+
+// asm/mystery_event_script.o
+void sub_8126160(u8);
+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 *);
+
+// asm/player_pc.o
+void NewGameInitPCItems(void);
+
+// asm/rom_813BA94.o
+void sub_813CAF4(u8);
+void intro_reset_and_hide_bgs(void);
+void sub_813CCE8(u8);
+void sub_813CE30(u16, u16, u16, u16);
+u8 sub_813CE88(/*TODO: arg types*/);
+u8 sub_813CFA8(/*TODO: arg types*/);
+void sub_813D084(/*TODO: arg types*/);
+u8 sub_813D584(/*TODO: arg types*/);
+void sub_813D788(struct Sprite *);
+void sub_813D880(struct Sprite *);
+void sub_813D954(/*TODO: arg types*/);
+void sub_813DB9C(struct Sprite *);
+void sub_813DE70(struct Sprite *);
+void sub_813E10C(struct Sprite *);
+void sub_813E210(struct Sprite *);
+void sub_813E7C0(u8);
+void sub_813E930(/*TODO: arg types*/);
+void sub_813EB4C(u8);
+void sub_813EDBC(/*TODO: arg types*/);
+
+// asm/mystery_event_menu.o
+void CB2_InitMysteryEventMenu(void);
+
+// asm/save_failed_screen.o
+void fullscreen_save_activate();
+
+// asm/rom_8148B8C.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*/);
+
+// 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);
diff --git a/include/battle_setup.h b/include/battle_setup.h
index 2c9d1d8c5..b82180f28 100644
--- a/include/battle_setup.h
+++ b/include/battle_setup.h
@@ -1,7 +1,84 @@
#ifndef GUARD_BATTLE_SETUP_H
#define GUARD_BATTLE_SETUP_H
+// task01_battle_start
+// task_add_01_battle_start
void CheckForSafariZoneAndProceed(void);
+void sub_8081A18(void);
void sub_8081A5C(void);
+void sub_8081AA4(void);
+// task_add_01_battle_start_with_music_and_stats
+// sub_8081AFC
+void sub_8081B3C(void);
+// sub_8081B78
+// sub_8081BB8
+// sub_8081BF8
+// sub_8081C50
+void sub_8081C8C(void);
+void sub_8081CEC(void);
+// sub_8081D3C
+// sub_8081E90
+// GetSumOfPartyMonLevel
+// GetSumOfEnemyPartyLevel
+u8 GetWildBattleTransition(void);
+u8 GetTrainerBattleTransition(void);
+// GetBattleTowerBattleTransition
+// sub_8082168
+void sub_8082188(void);
+void sub_80821D8(void);
+void sub_8082228(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 *);
+u8* 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
new file mode 100644
index 000000000..2b2933412
--- /dev/null
+++ b/include/berry.h
@@ -0,0 +1,38 @@
+#ifndef GUARD_BERRY_H
+#define GUARD_BERRY_H
+
+void unref_sub_80B4884(void);
+void sub_80B48A8(u8 *src);
+u32 sub_80B48F8(struct EnigmaBerry *enigmaBerry);
+bool32 sub_80B4940(void);
+struct Berry *GetBerryInfo(u8 berry);
+struct BerryTree *GetBerryTreeInfo(u8 id);
+bool32 FieldObjectInteractionWaterBerryTree(void);
+bool32 IsPlayerFacingPlantedBerryTree(void);
+u8 WaterBerryTree(void);
+void sub_80B4A90(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/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/field_player_avatar.h b/include/field_player_avatar.h
index 0c9e78a2a..9e2e7a489 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -1,17 +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
+// IsPlayerFacingSurfableFishableWater
+// 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);
+// StartFishing
+// Fishing1
+// Fishing2
+// Fishing3
+// Fishing4
+// Fishing5
+// Fishing6
+// Fishing7
+// Fishing8
+// Fishing9
+// Fishing10
+// Fishing11
+// Fishing12
+// Fishing13
+// Fishing14
+// Fishing15
+// Fishing16
#endif
diff --git a/include/global.h b/include/global.h
index 7fbf5755b..79204e082 100644
--- a/include/global.h
+++ b/include/global.h
@@ -294,6 +294,23 @@ struct SaveBlock2
/*0xA8*/ u8 filler_A8[0x7E8];
};
+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;
#endif // GUARD_GLOBAL_H
diff --git a/include/m4a.h b/include/m4a.h
index 85cba5d77..949403885 100644
--- a/include/m4a.h
+++ b/include/m4a.h
@@ -3,11 +3,16 @@
#include "gba/m4a_internal.h"
-void m4aSoundInit(void);
-void m4aSoundMain(void);
-void m4aSongNumStart(u16 n);
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/main_menu.h b/include/main_menu.h
new file mode 100644
index 000000000..87569dc8e
--- /dev/null
+++ b/include/main_menu.h
@@ -0,0 +1,61 @@
+#ifndef GUARD_MAIN_MENU_H
+#define GUARD_MAIN_MENU_H
+
+#include "gba/types.h"
+
+void CB2_MainMenu(void);
+void VBlankCB_MainMenu(void);
+void CB2_InitMainMenu(void);
+void Task_NewGameSpeech1(u8 taskId);
+// Task_NewGameSpeech2
+// Task_NewGameSpeech3
+// Task_NewGameSpeech4
+// Task_NewGameSpeech5
+// Task_NewGameSpeech6
+// Task_NewGameSpeech7
+// Task_NewGameSpeech8
+// Task_NewGameSpeech9
+// Task_NewGameSpeech10
+// Task_NewGameSpeech11
+// Task_NewGameSpeech12
+// Task_NewGameSpeech13
+// Task_NewGameSpeech14
+// Task_NewGameSpeech15
+// Task_NewGameSpeech16
+// Task_NewGameSpeech17
+// Task_NewGameSpeech18
+// Task_NewGameSpeech19
+// Task_NewGameSpeech20
+// Task_NewGameSpeech21
+// Task_NewGameSpeech22
+// Task_NewGameSpeech23
+// Task_NewGameSpeech24
+// Task_NewGameSpeech25
+// Task_NewGameSpeech26
+// Task_NewGameSpeech27
+// Task_NewGameSpeech28
+// Task_NewGameSpeech29
+// Task_NewGameSpeech30
+// Task_NewGameSpeech31
+// Task_NewGameSpeech32
+// Task_NewGameSpeech33
+// CB_ContinueNewGameSpeechPart2
+// nullsub_34
+// sub_800B240
+// CreateAzurillSprite
+// AddBirchSpeechObjects
+// Task_SpriteFadeOut
+// StartSpriteFadeOut
+// Task_SpriteFadeIn
+// StartSpriteFadeIn
+// sub_800B5A8
+// StartBackgroundFadeOut
+// sub_800B654
+// StartBackgroundFadeIn
+// CreateGenderMenu
+// GenderMenuProcessInput
+// CreateNameMenu
+// NameMenuProcessInput
+// SetPresetPlayerName
+
+#endif //GUARD_M4A_H
diff --git a/include/pokedex.h b/include/pokedex.h
index 22ba76fc6..af0ed7102 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -133,11 +133,13 @@ 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);
+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);
diff --git a/include/rom4.h b/include/rom4.h
index 21a866d02..98ec02b5f 100644
--- a/include/rom4.h
+++ b/include/rom4.h
@@ -1,13 +1,221 @@
#ifndef GUARD_ROM4_H
#define GUARD_ROM4_H
+#include "sprite.h"
+
+struct UnkPlayerStruct
+{
+ u8 player_field_0;
+ u8 player_field_1;
+};
+
+// sub_8052F5C
+// flag_var_implications_of_teleport_
+// new_game
+// sub_8053014
+void sub_8053050(void);
+// sub_805308C
+void sub_80530AC(void);
void sav12_xor_increment(u8 index);
+u32 sub_8053108(u8);
+// sav12_xor_set
+// 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
+// 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 sub_8053C44(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 c2_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/trainer_see.h b/include/trainer_see.h
index 281c7b158..e4d1fe270 100644
--- a/include/trainer_see.h
+++ b/include/trainer_see.h
@@ -30,6 +30,5 @@ void sub_80846E4(u8 taskId);
void sub_8084794(u32 var);
void sub_80847C8(void);
void sub_80847D8(u8);
-void sub_80847D8(u8);
#endif // GUARD_TRAINER_SEE_H
diff --git a/include/weather.h b/include/weather.h
index a6ca2262c..a24a6d51f 100644
--- a/include/weather.h
+++ b/include/weather.h
@@ -31,10 +31,13 @@ void sub_807D874(u8);
// ...
void sub_807DB64(u8, u8);
// ...
+void PlayRainSoundEffect(void);
+// ...
void SetSav1Weather(u32);
u8 GetSav1Weather(void);
void sub_80806E4(void);
// ...
void sub_808073C(void);
+void sub_8080750();
#endif // GUARD_WEATHER_H
diff --git a/src/battle_ai.c b/src/battle_ai.c
index 945176b64..a2db200ac 100644
--- a/src/battle_ai.c
+++ b/src/battle_ai.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "battle.h"
+#include "asm.h"
#include "pokemon.h"
#include "rng.h"
@@ -13,11 +14,6 @@ all the way to at least 0x2016800, in addition to extremely hard functions that
as it currently is until someone bothers to document this huge struct.
*/
-extern u8 sub_8015A98(u8, u8, u8);
-extern u8 battle_side_get_owner(u8);
-extern s16 battle_get_per_side_status(u8);
-extern u8 b_first_side(u8, u8, u8);
-
extern u16 gUnknown_020239F8;
extern u8 gUnknown_02024A60;
extern u8 gUnknown_02024C07;
@@ -1248,8 +1244,8 @@ void BattleAICmd_get_ability(void)
if(battle_side_get_owner(var) == 0)
{
//register u8 unk asm("r1") = battle_get_per_side_status(var) & 1;
- s32 unk = battle_get_per_side_status(var) & 1;
-
+ u16 unk = battle_get_per_side_status(var) & 1;
+
if(unk_2016A00.unk20[unk] != 0)
{
((struct UnknownStruct2 *)((u8 *)&unk_2016A00 - 512))->unk8 = unk_2016A00.unk20[unk];
diff --git a/src/battle_setup.c b/src/battle_setup.c
index fd44d2fc6..312dcdbeb 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "battle_setup.h"
+#include "asm.h"
#include "safari_zone.h"
#include "weather.h"
#include "palette.h"
@@ -9,6 +10,7 @@
#include "main.h"
#include "species.h"
#include "songs.h"
+#include "sound.h"
#include "task.h"
#include "string_util.h"
#include "rng.h"
@@ -22,41 +24,6 @@
#define NUM_TRAINER_EYE_TRAINERS 56
#define TRAINER_REMATCH_STEPS 255
-extern void prev_quest_postbuffer_cursor_backup_reset(void);
-extern void overworld_poison_timer_set(void);
-extern void current_map_music_set__default_for_battle(u16);
-extern void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
-extern void c2_exit_to_overworld_2_switch(void);
-extern void npc_set_running_behaviour_etc(struct MapObject *, u8);
-extern u8 npc_running_behaviour_by_direction(u8);
-extern void c2_whiteout(void);
-extern void sub_800E7C4(void);
-extern void sub_8081AA4(void);
-extern void sub_8081A18(void);
-extern void sub_8081C8C(void);
-extern void sub_8081CEC(void);
-extern void sub_8080E44(void);
-extern void sub_80821D8(void);
-extern void sub_8082228(void);
-extern void sub_808260C(void);
-extern void sub_8082CB8(void);
-extern void sub_811AAD8(u8);
-extern u8 *sub_80BCCE8(void);
-extern void sub_811AABC(u8);
-extern u8 sub_811AAE8(void);
-extern u8 GetFieldObjectIdByLocalIdAndMap(u8, u8, u8);
-extern u8 *sub_8082880(void);
-extern u8 sub_803FC58(u16);
-extern bool32 FieldPoisonEffectIsRunning(void);
-extern void player_bitmagic(void);
-extern void sub_80408BC();
-
-u8 GetWildBattleTransition(void);
-u8 GetTrainerBattleTransition(void);
-bool32 battle_exit_is_player_defeat(u32 a1);
-u8 *sub_808281C(void);
-u16 sub_8082C4C(u16 a1);
-
extern u16 gScriptResult;
struct TrainerPartyMember0
@@ -104,19 +71,6 @@ struct TrainerEyeTrainer
u16 mapNum;
};
-extern bool8 MetatileBehavior_IsTallGrass(char);
-extern bool8 MetatileBehavior_IsLongGrass(char);
-extern bool8 MetatileBehavior_IsSandOrDeepSand(char);
-extern bool8 MetatileBehavior_IsSurfableWaterOrUnderwater(char);
-extern bool8 MetatileBehavior_IsBridge(char);
-extern bool8 sub_80574C4(char);
-extern bool8 sub_80574D8(char);
-extern bool8 sub_8057568(char);
-extern u8 sub_8057450(u8);
-extern void PlayNewMapMusic(u16);
-
-extern u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8);
-
extern void (*gUnknown_0300485C)(void);
extern struct Pokemon gEnemyParty[];
@@ -164,8 +118,6 @@ extern u8 gStringVar4[];
extern u8 gBattleTransitionTable_Wild[][2];
extern u8 gBattleTransitionTable_Trainer[][2];
-void sub_8082188(void);
-
void task01_battle_start(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -732,10 +684,10 @@ void TrainerWantsBattle(u8 trainerMapObjId, u8 *trainerScript)
ScriptContext2_Enable();
}
-u8 GetTrainerFlagFromScriptPointer(u8 *data)
+u8* GetTrainerFlagFromScriptPointer(u8 *data)
{
u32 flag = TrainerBattleLoadArg16(data + 2);
- return FlagGet(TRAINER_FLAG_START + flag);
+ return (u8*)FlagGet(TRAINER_FLAG_START + flag);
}
void sub_8082524(void)
diff --git a/src/berry.c b/src/berry.c
index 2d7b50e2b..aee624c33 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -1,4 +1,6 @@
#include "global.h"
+#include "berry.h"
+#include "asm.h"
#include "item.h"
#include "main.h"
#include "text.h"
@@ -7,14 +9,6 @@
#define FIRST_BERRY 0x85 // ITEM_CHERI_BERRY
#define LAST_BERRY 0xaf // ITEM_ENIGMA_BERRY
-extern u8 GetStageByBerryTreeId(u8);
-extern u16 GetStageDurationByBerryType(u8);
-extern void sub_80A68CC();
-extern u8 sub_8060234(u8, u8, u8);
-extern void sub_8060288(u8, u8, u8);
-extern u8 FieldObjectGetBerryTreeId(u8);
-extern u8 *GetFieldObjectScriptPointerForComparison();
-
extern struct Berry gBerries[];
extern u8 BerryTreeScript;
extern struct BerryTree gUnknown_083CD780;
@@ -24,8 +18,6 @@ extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
extern u16 gSpecialVar_0x8006;
-u8 CalcBerryYield(struct BerryTree *tree);
-
void unref_sub_80B4884(void)
{
CpuFill16(0, &gSaveBlock1.enigmaBerry, sizeof(gSaveBlock1.enigmaBerry));
diff --git a/src/decompress.c b/src/decompress.c
index 16c9f39ed..7f8ed9271 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "decompress.h"
#include "species.h"
+#include "asm.h"
#define WRAM 0x02000000
@@ -8,8 +9,6 @@ extern struct SpriteSheet gMonFrontPicTable[];
extern struct SpriteSheet gMonBackPicTable[];
extern void *gUnknown_081FAF4C[];
-extern void DrawSpindaSpots(u16, u32, void *, u8);
-
void sub_800D238(const void *src, void *dest)
{
LZ77UnCompWram(src, dest);
diff --git a/src/dewford_trend.c b/src/dewford_trend.c
index 8d683e072..ae1397852 100644
--- a/src/dewford_trend.c
+++ b/src/dewford_trend.c
@@ -1,23 +1,14 @@
#include "global.h"
+#include "asm.h"
#include "link.h"
#include "rng.h"
#include "flag.h"
-extern u8 GetLinkPlayerCount(void);
-extern u16 sub_80EB72C(u16);
-extern u8 ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16, u16);
-
extern struct EasyChatPair unk_2007800[5];
extern struct EasyChatPair unk_2007900[5];
extern u16 gScriptResult;
extern u16 gSpecialVar_0x8004;
-void sub_80FA740(struct EasyChatPair *);
-void sub_80FA46C(struct EasyChatPair *, u16, u8);
-bool8 sub_80FA670(struct EasyChatPair *, struct EasyChatPair *, u8);
-bool8 IsEasyChatPairEqual(u16 *, u16 *);
-bool8 SB1ContainsWords(u16 *);
-
void sub_80FA17C(void)
{
u16 i;
@@ -394,7 +385,7 @@ void sub_80FA4E4(u8 *a, u32 b)
}
#else
__attribute__((naked))
-void sub_80FA4E4(u8 *a, u32 b)
+void sub_80FA4E4(struct EasyChatPair *a, u32 b, u8 c)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
diff --git a/src/diploma.c b/src/diploma.c
index 4d81ad4b0..8fabe3a2f 100644
--- a/src/diploma.c
+++ b/src/diploma.c
@@ -1,16 +1,15 @@
#include "global.h"
+#include "asm.h"
#include "main.h"
#include "menu.h"
#include "palette.h"
+#include "pokedex.h"
+#include "rom4.h"
#include "sprite.h"
#include "string_util.h"
#include "task.h"
#include "text.h"
-extern void remove_some_task(void);
-extern void sub_80546F0(void);
-extern u16 sub_8090FF4(void);
-
extern u8 gDiplomaTiles[];
extern u8 gDiplomaTilemap[];
extern u8 gDiplomaPalettes[];
diff --git a/src/field_camera.c b/src/field_camera.c
index 1986e33d7..b9a813bdf 100644
--- a/src/field_camera.c
+++ b/src/field_camera.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "field_camera.h"
+#include "asm.h"
+#include "berry.h"
#include "field_player_avatar.h"
#include "asm_fieldmap.h"
#include "sprite.h"
@@ -7,11 +9,6 @@
extern u16 gBGTilemapBuffers[4][0x400];
-
-//ToDo: argument types
-extern void ResetBerryTreeSparkleFlags(void);
-extern void RotatingGatePuzzleCameraUpdate(s16, s16);
-
extern u8 gUnknown_0202E854;
@@ -49,13 +46,10 @@ static void RedrawMapSliceSouth(struct UnknownStruct *a, struct MapData *mapData
static void RedrawMapSliceEast(struct UnknownStruct *a, struct MapData *mapData);
static void RedrawMapSliceWest(struct UnknownStruct *a, struct MapData *mapData);
static s32 MapPosToBgTilemapOffset(struct UnknownStruct *a, s32 x, s32 y);
-void CameraUpdate(void);
static void DrawWholeMapViewInternal(int x, int y, struct MapData *mapData);
static void DrawMetatileAt(struct MapData *mapData, u16, int, int);
static void DrawMetatile(s32 a, u16 *b, u16 c);
-u8 AddCameraObject(u8);
-void UpdateFieldObjectsForCameraUpdate(s16, s16);
static void CameraPanningCB_PanAhead(void);
static void move_tilemap_camera_to_upper_left_corner_(struct UnknownStruct *a)
diff --git a/src/field_door.c b/src/field_door.c
index 8aac6cce3..da57988ca 100644
--- a/src/field_door.c
+++ b/src/field_door.c
@@ -1,9 +1,8 @@
#include "global.h"
+#include "asm.h"
#include "task.h"
#include "field_camera.h"
-extern u8 MetatileBehavior_IsDoor(u8);
-
struct DoorGraphics
{
u16 metatileNum;
@@ -225,7 +224,7 @@ bool8 FieldIsDoorAnimationRunning(void)
return FuncIsActiveTask(Task_AnimateDoor);
}
-u8 sub_8058790(u32 x, u32 y)
+u32 sub_8058790(u32 x, u32 y)
{
if (cur_mapdata_get_door_x2_at(gDoorAnimGraphicsTable, x, y) == 0)
return 8;
diff --git a/src/field_effect.c b/src/field_effect.c
index 480e970ab..fe586fcb6 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -11,18 +11,6 @@ extern u8 *gFieldEffectScriptPointers[];
extern FldEffCmd gFieldEffectScriptFuncs[];
-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);
-
u32 FieldEffectStart(u8 id)
{
u8 *script;
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index be9d07582..a6b53b7a6 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "field_player_avatar.h"
+#include "asm.h"
#include "field_map_obj.h"
#include "rom4.h"
#include "flag.h"
@@ -14,94 +15,6 @@
#include "wild_encounter.h"
#include "asm_fieldmap.h"
-struct UnknownStruct
-{
- 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;
-};
-
-extern u8 SpawnSpecialFieldObject(struct UnknownStruct *);
-extern u8 sub_8126B54(void);
-extern bool8 FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(struct MapObject *);
-extern u8 FieldObjectClearAnimIfSpecialAnimFinished(struct MapObject *);
-extern u8 FieldObjectGetSpecialAnim(struct MapObject *);
-extern bool8 FieldObjectSetSpecialAnim(struct MapObject *, u8);
-extern void FieldObjectClearAnim(struct MapObject *);
-extern s16 sub_80E6034(void);
-extern bool8 MetatileBehavior_IsSurfableFishableWater(u8);
-extern bool8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *);
-extern void sub_806451C(void);
-extern void sub_805B980(struct MapObject *, u8);
-extern void sub_8127ED0(u8, u8);
-extern bool8 is_tile_x69_2_warp_door(u8);
-extern bool8 pokemon_has_move(struct Pokemon *, u8);
-extern u8 GetSimpleGoAnimId(u8);
-extern u8 GetStepInPlaceDelay16AnimId(u8);
-extern u8 sub_806084C(u8);
-extern u8 GetOppositeDirection(u8);
-extern u8 GetFaceDirectionAnimId(u8);
-extern u8 sub_80608D0(u8);
-extern bool8 GetFishingWildMonListHeader(void);
-extern u8 npc_block_way(struct MapObject *, s16, s16, u8);
-extern u8 GetFieldObjectIdByXY(s16, s16);
-extern u8 sub_8056F08(u8);
-extern u8 GetLedgeJumpDirection(s16, s16, u8);
-extern u8 GetFieldObjectIdByXYZ(u16, u16, int);
-extern u32 CheckForRotatingGatePuzzleCollision(u8, s16, s16);
-extern u8 sub_805FDF8(u8);
-extern void sub_80BE97C(u8);
-extern void sub_8127F28(u8, u8, s16);
-extern u8 sub_805FE08(u8);
-extern void FieldObjectClearAnimIfSpecialAnimActive(struct MapObject *);
-extern u8 FieldObjectDirectionToImageAnimId(u8);
-extern u8 sub_805FD98(u8);
-extern u8 sub_805FDE8(u8);
-extern void sub_8053F84(void);
-extern u8 sub_80609D8(u8);
-extern u8 sub_8060A04(u8);
-extern u8 sub_8060A30(u8);
-extern u8 sub_8060A5C(u8);
-extern u8 sub_8060A88(u8);
-extern u8 sub_8060AB4(u8);
-extern u8 sub_8060878(u8);
-extern u8 sub_8060AE0(u8);
-extern u8 sub_8060B0C(u8);
-extern u8 sub_8060B38(u8);
-extern u8 sub_8060B64(u8);
-extern void objid_set_invisible(u8);
-extern void FieldObjectTurn(struct MapObject *, u8);
-extern u8 sub_8128124(u8 id);
-extern u8 sub_80607F4(u8 a);
-extern u8 GetGoSpeed0AnimId(u8 a);
-extern u8 sub_8060744(u8 a);
-extern u8 d2s_08064034(u8 a);
-extern u8 sub_806079C(u8 a);
-extern void FieldObjectForceSetSpecialAnim(struct MapObject *pObject, u8 a);
-extern u8 GetStepInPlaceDelay8AnimId(u8 a);
-extern u8 GetStepInPlaceDelay32AnimId(u8 a);
-extern u8 GetJumpLedgeAnimId(u8 a);
-
-// Bike
-extern void MovePlayerOnBike(u8, u16, u16);
-extern void sub_80E5B38(u16 i, u16 c);
-extern u8 sub_80E5DEC(u8);
-extern bool8 player_should_look_direction_be_enforced_upon_movement(void);
-extern void sub_80E5FCC(int i, int i1);
-extern void sub_80E6010(int i);
-extern void sub_80E6084();
-extern void sub_8126BC4(u8 unk_1B, u8 r6, s16 x, s16 y);
-
extern u8 gOtherText_OhABite[];
extern u8 gOtherText_PokeOnHook[];
extern u8 gOtherText_NotEvenANibble[];
@@ -149,7 +62,6 @@ static u8 GetForcedMovementByMetatileBehavior(void);
static void MovePlayerNotOnBike(u8 a, u16 b);
static u8 CheckMovementInputNotOnBike(u8 a);
static u8 CheckForPlayerAvatarCollision(u8 a);
-u8 CheckForFieldObjectCollision(struct MapObject *a, s16 b, s16 c, u8 d, u8 e);
static u8 sub_8058EF0(s16 a, s16 b, u8 c);
static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c);
static u8 sub_8058F6C(s16 a, s16 b, u8 c);
@@ -159,22 +71,12 @@ static bool8 player_is_anim_in_certain_ranges(void);
static bool8 sub_80592A4(void);
static bool8 PlayerIsAnimActive(void);
static bool8 PlayerCheckIfAnimFinishedOrInactive(void);
-void PlayerGoSpeed0(u8 a);
-void sub_80593C4(u8 a);
-void npc_use_some_d2s(u8 a);
-void sub_805940C(u8 a);
static void PlayerNotOnBikeCollide(u8 a);
-void PlayerFaceDirection(u8 a);
-void PlayerTurnInPlace(u8 a);
-void PlayerJumpLedge(u8 a);
static void PlayCollisionSoundIfNotFacingWarp(u8 a);
-u8 GetPlayerAvatarGraphicsIdByStateId(u8 a);
-void SetPlayerAvatarStateMask(u8 a);
static void sub_8059D60(struct MapObject *a);
static void StartStrengthAnim(u8 a, u8 b);
static void sub_8059F94(void);
static void sub_805A06C(void);
-void sub_805A20C(u8 a);
void sub_80587B4(struct Sprite *sprite)
{
@@ -1093,7 +995,7 @@ void SetPlayerAvatarExtraStateTransition(u8 a, u8 b)
void InitPlayerAvatar(s16 a, s16 b, u8 c, u8 d)
{
- struct UnknownStruct s;
+ struct UnknownStruct_FPA s;
u8 mapObjectId;
struct MapObject *mapObject;
diff --git a/src/field_poison.c b/src/field_poison.c
index a51fe5546..309ec1d71 100644
--- a/src/field_poison.c
+++ b/src/field_poison.c
@@ -1,14 +1,11 @@
#include "global.h"
+#include "asm.h"
#include "field_message_box.h"
#include "pokemon.h"
#include "script.h"
#include "string_util.h"
#include "task.h"
-extern void AdjustFriendship(struct Pokemon *, u8);
-extern u8 pokemon_ailments_get_primary(u32);
-extern void DoFieldPoisonEffect(void);
-
extern struct Pokemon gPlayerParty[6];
extern u16 gScriptResult;
extern u8 fieldPoisonText_PokemonFainted[];
diff --git a/src/fldeff_emotion.c b/src/fldeff_emotion.c
index 81ab135c4..efe4ef683 100644
--- a/src/fldeff_emotion.c
+++ b/src/fldeff_emotion.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "asm.h"
#include "sprite.h"
#include "asm_fieldmap.h"
#include "field_effect.h"
@@ -8,11 +9,6 @@ extern u32 gUnknown_0202FF84[];
extern struct SpriteTemplate gSpriteTemplate_839B510;
extern struct SpriteTemplate gSpriteTemplate_839B528;
-bool8 TryGetFieldObjectIdByLocalIdAndMap(u8, u8, u8, u8 *);
-
-void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3);
-void objc_exclamation_mark_probably(struct Sprite *sprite);
-
u8 FldEff_ExclamationMarkIcon1(void)
{
u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B510, 0, 0, 0x53);
diff --git a/src/intro.c b/src/intro.c
index 3d32cb18e..13e35976e 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "intro.h"
+#include "asm.h"
#include "gba/m4a_internal.h"
#include "m4a.h"
#include "libgncmultiboot.h"
@@ -60,39 +61,6 @@ extern const u8 gIntroCopyright_Gfx[];
extern const u16 gIntroCopyright_Pal[];
extern const u16 gIntroCopyright_Tilemap[];
-// rom_813BA94
-extern void sub_813CAF4(u8);
-extern void intro_reset_and_hide_bgs(void);
-extern void sub_813CCE8(u8);
-extern void sub_813CE30(u16, u16, u16, u16);
-extern u8 sub_813CE88(/*TODO: arg types*/);
-extern u8 sub_813CFA8(/*TODO: arg types*/);
-extern void sub_813D084(/*TODO: arg types*/);
-extern u8 sub_813D584(/*TODO: arg types*/);
-extern void sub_813D788(struct Sprite *);
-extern void sub_813D880(struct Sprite *);
-extern void sub_813D954(/*TODO: arg types*/);
-extern void sub_813DB9C(struct Sprite *);
-extern void sub_813DE70(struct Sprite *);
-extern void sub_813E10C(struct Sprite *);
-extern void sub_813E210(struct Sprite *);
-extern void sub_813E7C0(u8);
-extern void sub_813E930(/*TODO: arg types*/);
-extern void sub_813EB4C(u8);
-extern void sub_813EDBC(/*TODO: arg types*/);
-
-// rom_8148B8C
-extern void load_intro_part2_graphics(/*TODO: arg types*/);
-extern void sub_8148C78(/*TODO: arg types*/);
-extern u8 sub_8148EC0(/*TODO: arg types*/);
-extern void sub_8149020(/*TODO: arg types*/);
-extern u8 intro_create_brendan_sprite(/*TODO: arg types*/);
-extern u8 intro_create_may_sprite(/*TODO: arg types*/);
-extern u8 intro_create_latios_sprite(/*TODO: arg types*/);
-extern u8 intro_create_latias_sprite(/*TODO: arg types*/);
-
-extern void remove_some_task(void);
-
static void MainCB2_EndIntro(void);
static void Task_IntroLoadPart1Graphics(u8);
static void Task_IntroFadeIn(u8);
diff --git a/src/link.c b/src/link.c
index 2208390da..56635def2 100644
--- a/src/link.c
+++ b/src/link.c
@@ -1,10 +1,11 @@
#include "global.h"
+#include "link.h"
+#include "asm.h"
#include "main.h"
#include "task.h"
#include "text.h"
#include "sprite.h"
#include "songs.h"
-#include "link.h"
#include "palette.h"
#include "rng.h"
#include "menu.h"
@@ -30,8 +31,6 @@ struct LinkTestBGInfo
u32 dummy_C;
};
-extern void sub_80516C4(u8, u16);
-
extern u8 unk_2000000[];
extern u8 unk_2004000[];
extern u16 gUnknown_020239F8;
diff --git a/src/main.c b/src/main.c
index 0023925f8..a14663d32 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "main.h"
+#include "asm.h"
#include "play_time.h"
#include "m4a.h"
#include "gba/m4a_internal.h"
@@ -8,6 +9,7 @@
#include "rtc.h"
#include "link.h"
#include "rng.h"
+#include "rom4.h"
#include "sound.h"
#include "intro.h"
@@ -65,13 +67,6 @@ u8 gPcmDmaCounter;
EWRAM_DATA void (*gFlashTimerIntrFunc)(void) = NULL;
-extern void sub_800C35C(void);
-extern void remove_some_task(void);
-extern u32 sub_80558AC(void);
-extern u32 sub_8055910(void);
-extern u32 sub_8055940(void);
-extern void CheckForFlashMemory(void);
-
static void UpdateLinkAndCallCallbacks(void);
static void InitMainCallbacks(void);
static void CallCallbacks(void);
diff --git a/src/main_menu.c b/src/main_menu.c
index eb5867d5d..176d6bd99 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -1,10 +1,13 @@
#include "global.h"
+#include "main_menu.h"
+#include "asm.h"
#include "save_menu_util.h"
#include "option_menu.h"
#include "text.h"
#include "sprite.h"
#include "task.h"
#include "main.h"
+#include "rom4.h"
#include "rtc.h"
#include "songs.h"
#include "palette.h"
@@ -18,16 +21,6 @@
#define BirchSpeechUpdateWindowText() ((u8)MenuUpdateWindowText_OverrideLineLength(24))
-extern void remove_some_task(void);
-extern void CreatePokeballSprite(u8 r0, u8 r1, u8 r2, u8 r3, u8 s1, u8 s2, u8 s3, u16 s4);
-extern bool32 IsMysteryGiftAvailable(void);
-extern void CB2_ContinueSavedGame(void);
-extern void CB2_InitMysteryEventMenu(void);
-extern void DoNamingScreen(u8 r0, struct SaveBlock2 *r1, u16 r2, u16 r3, u8 s0, MainCallback s4);
-extern void CB2_NewGame(void);
-extern u8 CreateBirchSprite(u8, u8, u8);
-extern u8 CreateTrainerSprite_BirchSpeech(u8, u16, u16, u8, void *);
-
extern struct PaletteFadeControl gPaletteFade;
extern u8 gSaveFileDeletedMessage[];
extern u8 gSaveFileCorruptMessage[];
@@ -43,9 +36,6 @@ extern u8 gMainMenuString_Time[];
extern u8 gMainMenuString_Pokedex[];
extern u8 gMainMenuString_Badges[];
-void CB2_MainMenu(void);
-void VBlankCB_MainMenu(void);
-void CB2_InitMainMenu(void);
static void sub_80096FC(void);
static u32 InitMainMenu(bool8 a1);
static void Task_MainMenuCheckSave(u8 taskId);
@@ -65,7 +55,6 @@ static void PrintPlayerName(void);
static void PrintPlayTime(void);
static void PrintPokedexCount(void);
static void PrintBadgeCount(void);
-void Task_NewGameSpeech1(u8);
extern u16 gMainMenuPalette[];
diff --git a/src/map_obj_80643A4.c b/src/map_obj_80643A4.c
index d30fab49c..20c5303c4 100644
--- a/src/map_obj_80643A4.c
+++ b/src/map_obj_80643A4.c
@@ -1,13 +1,9 @@
#include "global.h"
+#include "asm.h"
#include "sprite.h"
#include "asm_fieldmap.h"
#include "field_effect.h"
-extern void SetObjectSubpriorityByZCoord(u8, struct Sprite *, u8);
-extern u8 FieldObjectDirectionToImageAnimId(u8);
-extern void FieldObjectGetLocalIdAndMap(struct MapObject *, u8 *, u8 *, u8 *);
-extern struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8);
-
typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 dir);
extern u32 gUnknown_0202FF84[];
diff --git a/src/map_obj_lock.c b/src/map_obj_lock.c
index bbe08ac37..cc2befa6d 100644
--- a/src/map_obj_lock.c
+++ b/src/map_obj_lock.c
@@ -1,17 +1,9 @@
#include "global.h"
#include "map_obj_lock.h"
+#include "asm.h"
#include "field_player_avatar.h"
#include "task.h"
-extern void player_bitmagic(void);
-extern void sub_80643A4(struct MapObject *);
-extern void sub_8064470(u8);
-extern u8 GetFieldObjectIdByLocalIdAndMap(u8, u8, u8);
-extern u8 FieldObjectClearAnimIfSpecialAnimFinished(void *);
-extern void sub_80A2178(void);
-extern void sub_806451C(void);
-extern u8 FieldObjectFaceOppositeDirection(void *, u8);
-
extern u16 gScriptFacing;
bool8 walkrun_is_standing_still(void)
diff --git a/src/mori_debug_menu.c b/src/mori_debug_menu.c
index 3353ec58e..b8fe92b9a 100644
--- a/src/mori_debug_menu.c
+++ b/src/mori_debug_menu.c
@@ -1,17 +1,13 @@
#include "global.h"
#include "mori_debug_menu.h"
+#include "asm.h"
#include "start_menu.h"
#include "menu.h"
#include "main.h"
#include "string_util.h"
-extern u16 sub_8041870(u16);
-extern void sub_810CA6C(s32);
extern u8 (*gCallback_03004AE8)(void);
-extern u8 daycare_count_pokemon(u32);
-extern u8 daycare_relationship_score_from_savegame(void);
-
struct DebugMenuAction
{
u8 *text;
diff --git a/src/new_game.c b/src/new_game.c
index 97a6c6ee0..c8221fa5d 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "new_game.h"
+#include "asm.h"
+#include "berry.h"
#include "play_time.h"
#include "pokemon_size_record.h"
#include "script.h"
diff --git a/src/palette.c b/src/palette.c
index 53ade0105..bf93a036c 100644
--- a/src/palette.c
+++ b/src/palette.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "palette.h"
+#include "asm.h"
+#include "blend_palette.h"
#include "decompress.h"
enum
@@ -38,8 +40,6 @@ struct PaletteStruct
u8 ps_field_9;
};
-extern void BlendPalette(u16, u16, u8, u16);
-
EWRAM_DATA u16 gPlttBufferUnfaded[0x200] = {0};
EWRAM_DATA u16 gPlttBufferFaded[0x200] = {0};
EWRAM_DATA static struct PaletteStruct sPaletteStructs[0x10] = {0};
diff --git a/src/pokedex.c b/src/pokedex.c
index c7f3b5f5c..8d574ed57 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "pokedex.h"
+#include "asm.h"
#include "gba/m4a_internal.h"
#include "string_util.h"
#include "m4a.h"
@@ -107,7 +108,6 @@ extern u8 gDexText_RegisterComplete[];
extern void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume);
extern bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16);
extern void remove_some_task(void);
-extern bool32 IsNationalPokedex(void);
extern u8 sub_8091E3C(void);
extern void sub_80690C8(void);
extern void sub_805469C(void);
diff --git a/src/pokemon_1.c b/src/pokemon_1.c
index 0c34279f7..3971e08dd 100644
--- a/src/pokemon_1.c
+++ b/src/pokemon_1.c
@@ -1,7 +1,9 @@
#include "global.h"
+#include "asm.h"
#include "text.h"
#include "string_util.h"
#include "pokemon.h"
+#include "rom4.h"
#include "species.h"
#include "main.h"
#include "rng.h"
@@ -13,8 +15,6 @@
//Extracts the lower 16 bits of a 32-bit number
#define LOHALF(n) ((n) & 0xFFFF)
-extern u8 sav1_map_get_name();
-
extern struct Pokemon gPlayerParty[6]; // 0x3004360
extern struct Pokemon gEnemyParty[6]; // 0x30045C0
diff --git a/src/pokemon_2.c b/src/pokemon_2.c
index 78b394b87..aeffb29a0 100644
--- a/src/pokemon_2.c
+++ b/src/pokemon_2.c
@@ -1,7 +1,9 @@
#include "global.h"
+#include "asm.h"
#include "text.h"
#include "string_util.h"
#include "pokemon.h"
+#include "rng.h"
#include "species.h"
#include "main.h"
#include "sprite.h"
@@ -49,11 +51,6 @@ extern u8 gUnknown_0820823C[];
extern u8 gStatStageRatios[][2];
extern u8 gHoldEffectToType[][2];
-extern u8 battle_side_get_owner(u8);
-extern u8 battle_get_side_with_given_state(u8);
-extern u32 battle_get_per_side_status(u8);
-extern u8 sub_8018324(u8, u8, u8, u8, u16);
-
u8 sub_803C348(u8 a1)
{
s32 i;
@@ -87,6 +84,7 @@ u8 sub_803C348(u8 a1)
return retVal;
}
+#ifdef NONMATCHING
u8 sub_803C434(u8 a1)
{
u32 status0 = battle_get_per_side_status(a1);
@@ -111,7 +109,7 @@ u8 sub_803C434(u8 a1)
if (sub_803C348(0) > 1)
{
- u32 r = Random();
+ u16 r = Random();
register u32 val asm("r1") = mask2;
val &= r;
if (!val)
@@ -133,6 +131,77 @@ u8 sub_803C434(u8 a1)
return battle_get_side_with_given_state(status);
}
}
+#else
+__attribute__((naked))
+u8 sub_803C434(u8 a1) {
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ bl battle_get_per_side_status\n\
+ movs r1, 0x1\n\
+ movs r6, 0x1\n\
+ adds r4, r6, 0\n\
+ ands r4, r0\n\
+ eors r4, r1\n\
+ adds r5, r4, 0\n\
+ ldr r0, _0803C45C\n\
+ ldrh r1, [r0]\n\
+ adds r0, r6, 0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0803C460\n\
+ adds r0, r4, 0\n\
+ b _0803C4AA\n\
+ .align 2, 0\n\
+_0803C45C: .4byte gUnknown_020239F8\n\
+_0803C460:\n\
+ movs r0, 0\n\
+ bl sub_803C348\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bls _0803C484\n\
+ bl Random\n\
+ adds r1, r6, 0\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _0803C480\n\
+ movs r0, 0x2\n\
+ eors r0, r4\n\
+ b _0803C4AA\n\
+_0803C480:\n\
+ adds r0, r4, 0\n\
+ b _0803C4AA\n\
+_0803C484:\n\
+ ldr r0, _0803C49C\n\
+ ldrb r1, [r0]\n\
+ ldr r2, _0803C4A0\n\
+ lsls r0, r4, 2\n\
+ adds r0, r2\n\
+ ldr r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _0803C4A4\n\
+ adds r0, r4, 0\n\
+ b _0803C4AA\n\
+ .align 2, 0\n\
+_0803C49C: .4byte gUnknown_02024C0C\n\
+_0803C4A0: .4byte gBitTable\n\
+_0803C4A4:\n\
+ movs r0, 0x2\n\
+ eors r5, r0\n\
+ adds r0, r5, 0\n\
+_0803C4AA:\n\
+ bl battle_get_side_with_given_state\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ pop {r4-r6}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .syntax divided\n");
+}
+#endif
u8 GetMonGender(struct Pokemon *mon)
{
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 1bcd83882..281ab2803 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -1,7 +1,9 @@
#include "global.h"
#include "record_mixing.h"
+#include "asm.h"
#include "link.h"
#include "menu.h"
+#include "rom4.h"
#include "script.h"
#include "songs.h"
#include "sound.h"
@@ -32,22 +34,6 @@ extern bool8 gReceivedRemoteLinkPlayers;
extern u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE];
extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2];
-extern void sub_8083A84(TaskFunc);
-extern void sub_8041324(struct BoxPokemon *, void *);
-extern void sub_80BD674(void *, u32, u8);
-extern void sub_80BFD44(void *, u32, u8);
-extern void sub_80C0514(void *, u32, u8);
-// UB: sub_80FA4E4 declared with 3 arguments instead of 2
-extern void sub_80FA4E4(void *, u32, u8);
-extern u16 sub_8126338(void);
-extern u8 sub_8083664(void);
-extern void sub_80720B0(void);
-extern void CreateRecordMixingSprite(void);
-extern void DestroyRecordMixingSprite(void);
-extern u16 sub_8055588(void);
-extern void sub_80F7F30(void);
-extern void sub_8134AC0(void *);
-
#define BUFFER_CHUNK_SIZE 200
void sub_80B929C(void)
diff --git a/src/rom4.c b/src/rom4.c
index 493f37513..2fdee966c 100644
--- a/src/rom4.c
+++ b/src/rom4.c
@@ -1,5 +1,10 @@
#include "global.h"
#include "rom4.h"
+#include "asm.h"
+#include "asm_fieldmap.h"
+#include "battle_setup.h"
+#include "berry.h"
+#include "field_map_obj.h"
#include "field_player_avatar.h"
#include "menu.h"
#include "weather.h"
@@ -11,6 +16,7 @@
#include "new_game.h"
#include "heal_location.h"
#include "field_message_box.h"
+#include "safari_zone.h"
#include "script.h"
#include "songs.h"
#include "sound.h"
@@ -23,7 +29,6 @@
#include "field_camera.h"
#include "field_effect.h"
#include "wild_encounter.h"
-#include "asm_fieldmap.h"
#ifdef SAPPHIRE
#define LEGENDARY_MUSIC BGM_OOAME // Heavy Rain
@@ -37,37 +42,6 @@ struct UnkTVStruct
u32 tv_field_4;
};
-struct UnkPlayerStruct
-{
- u8 player_field_0;
- u8 player_field_1;
-};
-
-struct UnkInputStruct
-{
- u8 input_field_0;
- u8 input_field_1;
- u8 input_field_2;
- u8 input_field_3;
-};
-
-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;
-};
-
struct LinkPlayerMapObject
{
u8 active;
@@ -140,99 +114,6 @@ extern const struct WarpData gDummyWarpData;
extern s32 gUnknown_0839ACE8;
extern u32 gUnknown_08216694[];
-extern u8 sub_810D32C(void);
-extern void sub_8080B60(void);
-extern void sub_810CC80(void);
-extern void sub_8080AC4(void);
-extern void sub_8080A3C(void);
-extern void atk17_seteffectuser(void);
-extern void sub_80809B0(void);
-extern void sub_8080990(void);
-extern u8 sub_80BBB24(void);
-extern u8 *sub_80682A8(void *, u8, u8);
-extern u8 *sub_8068E24(struct UnkStruct_8054FF8_Substruct *);
-extern u8 ZCoordToPriority(u8);
-
-void sub_8082BD0(u16, u16);
-void player_avatar_init_params_reset(void);
-u8 player_get_direction_lower_nybble(void);
-u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16, u8);
-u8 sub_8053B60(struct UnkPlayerStruct *playerStruct, u8, u16, u8);
-u8 MetatileBehavior_IsSurfableWaterOrUnderwater(u8);
-bool8 sub_8056F24(u8);
-bool8 sub_8056F08(u8);
-bool8 MetatileBehavior_IsDoor(u8);
-bool8 MetatileBehavior_IsSouthArrowWarp(u8);
-bool8 MetatileBehavior_IsNorthArrowWarp(u8);
-bool8 MetatileBehavior_IsWestArrowWarp(u8);
-bool8 MetatileBehavior_IsEastArrowWarp(u8);
-bool8 MetatileBehavior_IsLadder(u8);
-u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void);
-bool32 sub_8053C44(void);
-void sub_8053C98(void);
-void sub_8053F0C(void);
-u8 is_light_level_8_or_9(u8);
-void sub_8054164(void);
-void sub_8055354(void);
-void c2_overworld(void);
-void CB2_LoadMap2(void);
-void c2_80567AC(void);
-void c2_exit_to_overworld_2_link(void);
-void c2_exit_to_overworld_2_local(void);
-void FieldClearVBlankHBlankCallbacks(void);
-void SetFieldVBlankCallback(void);
-void VBlankCB_Field(void);
-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);
-u16 sub_805530C(u16);
-void sub_8055340(u16 *);
-u16 sub_8055390(u32);
-u16 sub_80553E4(u32);
-u16 sub_8055408(u32);
-u16 sub_8055438(u32);
-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);
-void SpawnLinkPlayerMapObject(u8, s16, s16, u8);
-void InitLinkPlayerMapObjectPos(struct MapObject *, s16, s16);
-void sub_80555B0(int, int, struct UnkStruct_8054FF8 *);
-u8 sub_8055AE8(u8);
-void sub_8055B08(u8, u16 *, u16 *);
-u8 sub_8055B30(u8);
-u8 sub_8055B50(u8);
-u8 GetLinkPlayerIdAt(s16, s16);
-void sub_8055BFC(u8, u8);
-u8 npc_something3(u8, u8);
-u8 LinkPlayerDetectCollision(u8, u8, s16, s16);
-void CreateLinkPlayerSprite(u8);
-void SpriteCB_LinkPlayer(struct Sprite *);
void sub_8052F5C(void)
{
diff --git a/src/safari_zone.c b/src/safari_zone.c
index deb8817ec..118797136 100644
--- a/src/safari_zone.c
+++ b/src/safari_zone.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "safari_zone.h"
+#include "asm.h"
#include "field_player_avatar.h"
#include "flag.h"
#include "main.h"
@@ -20,9 +21,6 @@ struct PokeblockFeeder
static void ClearAllPokeblockFeeders(void);
static void DecrementFeederStepCounters(void);
-extern void c2_exit_to_overworld_2_switch(void);
-extern void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
-extern void sub_8080E44(void);
extern u8 gUnknown_02024D26;
diff --git a/src/save.c b/src/save.c
index 6d9ec8b03..80e913794 100644
--- a/src/save.c
+++ b/src/save.c
@@ -1,12 +1,10 @@
#include "global.h"
#include "save.h"
+#include "asm.h"
#include "gba/gba.h"
#include "rom4.h"
#include "gba/flash_internal.h"
-extern u32 sub_8053108(u8);
-extern u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n);
-
extern struct SaveSection unk_2000000;
extern u32 gUnknown_02039284;
diff --git a/src/save_menu_util.c b/src/save_menu_util.c
index c315acda5..ff42d66ea 100644
--- a/src/save_menu_util.c
+++ b/src/save_menu_util.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "save_menu_util.h"
+#include "asm.h"
#include "menu.h"
#include "flag.h"
#include "string_util.h"
diff --git a/src/scrcmd.c b/src/scrcmd.c
index e80777489..8051b0cb0 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -1,4 +1,7 @@
#include "global.h"
+#include "asm.h"
+#include "battle_setup.h"
+#include "berry.h"
#include "field_player_avatar.h"
#include "item.h"
#include "script.h"
@@ -21,101 +24,6 @@
#include "coins.h"
#include "field_effect.h"
-extern void ClearRamScript(void);
-extern void sub_8126160(u8);
-extern u8 IsThereStorageSpaceForDecoration(u8);
-extern s8 sub_81340A8(u8);
-extern u8 sub_8134074(u8);
-extern u8 sub_8133FE4(u8);
-extern void sub_8081594(u8);
-extern void sub_8053CE4(u32);
-extern void DoTimeBasedEvents(void);
-extern void activate_per_step_callback(u8);
-extern void sub_8053D14(u16);
-extern void sub_8080E88(void);
-extern void player_avatar_init_params_reset(void);
-extern void sp13E_warp_to_last_warp(void);
-extern void sub_8080EF0(void);
-extern void sp13F_fall_to_last_warp(void);
-extern void sub_8053720(s16, s16);
-extern void sub_8080F68(void);
-extern void saved_warp2_set_2(s8, s8, s8, s8, s8, s8);
-extern void sub_8053690(s8, s8, s8, s8, s8);
-extern void sub_80536E4(s8, s8, s8, s8, s8);
-extern void sav1_set_battle_music_maybe(u16);
-extern void sub_8053F84(void);
-extern void sub_8053FB0(u16);
-extern u8 exec_movement(u8, u8, u8, void *);
-extern bool8 sub_80A212C(u8, u8, u8);
-extern void RemoveFieldObjectByLocalIdAndMap(u8, u8, u8);
-extern u8 show_sprite(u8, u8, u8);
-extern void sub_805C0F8(u8, u8, u8, s16, s16);
-extern void update_saveblock1_field_object_coords(u8, s16, s16);
-extern void sub_805C78C(u8, u8, u8);
-extern void npc_by_local_id_and_map_set_field_1_bit_x20(u8, u8, u8, u8);
-extern void sub_805BCF0(u8, u8, u8, u8);
-extern void sub_805BD48(u8, u8, u8);
-extern u8 FieldObjectFaceOppositeDirection(void *, u8);
-extern void FieldObjectTurnByLocalIdAndMap(u8, u8, u8, u8);
-extern void update_saveblock1_field_object_movement_behavior(u8, u8);
-extern u8 sub_805B410(u8, u8, s16, s16, u8, u8);
-extern void sub_8064990(u8, u8);
-extern bool32 is_c1_link_related_active(void);
-extern u8 GetFieldObjectIdByLocalIdAndMap(u8, u8, u8);
-extern u8 FieldObjectClearAnimIfSpecialAnimFinished(void *);
-extern void sub_80A2178(void);
-extern void sub_806451C(void);
-extern bool8 yes_no_box(u8, u8);
-extern bool8 sub_80B5054(u8, u8, u8, u8);
-extern bool8 sub_80B50B0(u8, u8, u8, u8, u8);
-extern bool8 sub_80B5578(u8, u8, u8, u8, u8);
-extern bool8 Multichoice(u8, u8, u8, u8);
-extern bool8 sub_80B58C4(u16, u8, u8);
-extern void *picbox_close(void);
-extern void sub_8106630(u32);
-extern void ShowContestWinner(void);
-extern u8 GetLeadMonIndex(void);
-extern u8 sub_80BF0B8(u32);
-extern void sub_80B79B8(u32 *, u32);
-extern void sub_80B79E0(u32 *, u32);
-extern bool8 IsEnoughMoney(u32, u32);
-extern void sub_80B7C14(u32, u8, u8);
-extern void RemoveMoneyLabelObject(u8, u8);
-extern void sub_80B7BEC(u32, u8, u8);
-extern void *TrainerBattleConfigure(u8 *);
-extern void sub_80825E4(void);
-extern u8 *sub_80826E8(void);
-extern u8 *sub_8082700(void);
-extern u8 trainer_flag_check(u16);
-extern void trainer_flag_set(u16);
-extern void trainer_flag_clear(u16);
-extern void ScriptWildBattle(u16, u8, u16);
-extern void sub_8081B3C(void);
-extern void CreatePokemartMenu(void *);
-extern void CreateDecorationShop1Menu(void *);
-extern void CreateDecorationShop2Menu(void *);
-extern void PlaySlotMachine(u8, void *);
-extern void PlantBerryTree(u8, u8, u8, bool8);
-extern bool8 GetPriceReduction(u8);
-extern void sub_80F99CC(void);
-extern void sub_80C48C8(void);
-extern void sub_80C4940(void);
-extern void sub_80C4980(u8);
-extern void sub_8053588(u8);
-extern u16 sub_8058790(u32, u32);
-extern bool8 FieldAnimateDoorOpen(u32, u32);
-extern bool8 FieldAnimateDoorClose(u32, u32);
-extern bool8 FieldIsDoorAnimationRunning(void);
-extern void FieldSetDoorOpened(u32, u32);
-extern void FieldSetDoorClosed(u32, u32);
-extern void ScriptAddElevatorMenuItem(u8, u8, u8, u8);
-extern void ScriptShowElevatorMenu(void);
-extern u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8);
-extern u8 ScriptGiveEgg(u16);
-extern void ScriptSetMonMoveSlot(u8, u16, u8);
-extern bool8 pokemon_has_move(struct Pokemon *, u16);
-extern void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
-
typedef u16 (*SpecialFunc)(void);
typedef void (*NativeFunc)(void);
diff --git a/src/sound.c b/src/sound.c
index 77ad2b9f6..56719aa08 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "sound.h"
+#include "asm.h"
#include "gba/m4a_internal.h"
#include "task.h"
#include "songs.h"
@@ -11,8 +12,6 @@ struct Fanfare
u16 duration;
};
-extern u32 SpeciesToCryId(u32);
-
extern u16 gUnknown_020239F8;
extern struct MusicPlayerInfo *gMPlay_PokemonCry;
extern u8 gPokemonCryBGMDuckingCounter;
diff --git a/src/start_menu.c b/src/start_menu.c
index 3237632a8..3cffae111 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -1,8 +1,10 @@
#include "global.h"
#include "start_menu.h"
+#include "asm.h"
#include "main.h"
#include "menu.h"
#include "palette.h"
+#include "pokedex.h"
#include "script.h"
#include "songs.h"
#include "sound.h"
@@ -19,25 +21,6 @@
#include "map_obj_lock.h"
#include "save_menu_util.h"
-//External functions
-extern void sub_8047A1C(void);
-extern void sub_8047A34(void);
-extern void remove_some_task(void);
-extern void dp12_8087EA4(void);
-extern void sub_8093130(u8, void (*)(void));
-extern void sub_805469C(void);
-extern void SafariZoneRetirePrompt(void);
-extern void sub_8093110(void (*)(void));
-extern void sub_80EBA5C(void);
-extern void sub_80A53F8(void);
-extern void sub_8089A70(void);
-extern void CB2_InitPokedex(void);
-extern u16 GetNationalPokedexCount(u8);
-extern bool32 is_c1_link_related_active();
-extern void player_bitmagic(void);
-extern u8 *sub_8072C44(u8 *, s32, u8, u8);
-extern bool32 is_c1_link_related_active(void);
-
//Menu actions
enum {
MENU_ACTION_POKEDEX,
diff --git a/src/starter_choose.c b/src/starter_choose.c
index 725d481be..f21ddde1c 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -1,8 +1,10 @@
#include "global.h"
#include "starter_choose.h"
+#include "asm.h"
#include "main.h"
#include "menu.h"
#include "palette.h"
+#include "pokedex.h"
#include "songs.h"
#include "sound.h"
#include "string_util.h"
@@ -10,10 +12,6 @@
#include "trig.h"
#include "decompress.h"
-//Functions that need to be put in headers
-void remove_some_task(void);
-u16 SpeciesToNationalPokedexNum(u16);
-
struct MonCoords
{
u8 x, y;
@@ -54,7 +52,6 @@ static void Task_StarterChoose4(u8 taskId);
static void Task_StarterChoose5(u8 taskId);
static void Task_StarterChoose6(u8 taskId);
-extern u8 *GetPokemonCategory(u16);
static void CreateStarterPokemonLabel(u8, u8);
static u8 CreatePokemonFrontSprite(u16, u8, u8);
diff --git a/src/title_screen.c b/src/title_screen.c
index 72833a4e9..6100fbdc5 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -1,5 +1,9 @@
#include "global.h"
#include "title_screen.h"
+#include "asm.h"
+#include "clear_save_data_menu.h"
+#include "m4a.h"
+#include "main_menu.h"
#include "intro.h"
#include "gba/m4a_internal.h"
#include "main.h"
@@ -9,11 +13,6 @@
#include "task.h"
#include "decompress.h"
-extern void m4aSongNumStart(u16);
-extern void CB2_InitMainMenu(void);
-extern void CB2_InitClearSaveDataScreen(void);
-extern void CB2_InitResetRtcScreen(void);
-
extern u8 gReservedSpritePaletteCount;
extern struct MusicPlayerInfo gMPlay_BGM;
extern u8 gUnknown_0202F7E4;
diff --git a/src/trainer_see.c b/src/trainer_see.c
index 6e2292067..ed0b5caf4 100644
--- a/src/trainer_see.c
+++ b/src/trainer_see.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "trainer_see.h"
+#include "asm.h"
+#include "battle_setup.h"
#include "field_player_avatar.h"
#include "field_map_obj.h"
#include "asm_fieldmap.h"
@@ -8,24 +10,6 @@
#include "field_effect.h"
#include "script.h"
-extern u8 * GetFieldObjectScriptPointerByFieldObjectId(u8);
-extern u8 * GetTrainerFlagFromScriptPointer(u8 *);
-extern u8 sub_8060024(struct MapObject *, s16, s16, u8);
-extern u8 npc_block_way(struct MapObject *, s16, s16, u8);
-extern u8 npc_running_behaviour_by_direction(u8);
-extern u8 GetGoSpeed0AnimId(u8);
-extern u8 GetOppositeDirection(u8);
-extern u8 GetFaceDirectionAnimId(u8);
-extern bool8 FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(struct MapObject *);
-extern bool8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *);
-extern bool8 FieldObjectClearAnimIfSpecialAnimFinished(struct MapObject *);
-extern void FieldObjectClearAnim(struct MapObject *);
-extern void TrainerWantsBattle(u8, u8 *);
-extern void FieldObjectSetSpecialAnim(struct MapObject *, u8);
-extern void LoadWordFromTwoHalfwords(u32, u8 *);
-extern void StoreWordInTwoHalfwords(u32, u8 *);
-
-
extern bool8 (*gIsTrainerInRange[])(struct MapObject *, u16, s16, s16);
extern bool8 (*gTrainerSeeFuncList[])(u8, struct Task *, struct MapObject *);
extern bool8 (*gTrainerSeeFuncList2[])(u8, struct Task *, struct MapObject *);
diff --git a/src/truck_scene.c b/src/truck_scene.c
index c8997a643..4e45bd165 100644
--- a/src/truck_scene.c
+++ b/src/truck_scene.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "truck_scene.h"
+#include "asm.h"
#include "palette.h"
#include "task.h"
#include "script.h"
@@ -9,9 +10,6 @@
extern s8 gTruckCamera_HorizontalTable[];
-extern void SetCameraPanning(s16 a1, s16 a2);
-extern void sub_805BD90(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
-
s32 GetTruckCameraBobbingY(int a1)
{
s32 result;
diff --git a/src/wallclock.c b/src/wallclock.c
index e41bf761d..abfc4a12a 100644
--- a/src/wallclock.c
+++ b/src/wallclock.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "wallclock.h"
+#include "asm.h"
#include "decompress.h"
#include "main.h"
#include "menu.h"
@@ -10,9 +11,6 @@
#include "trig.h"
#include "sound.h"
-//Functions that need to be put in headers
-void remove_some_task(void);
-
extern u16 gSpecialVar_0x8004;
extern u16 gMiscClockMale_Pal[];
extern u16 gMiscClockFemale_Pal[];
diff --git a/src/weather.c b/src/weather.c
index 07a8f9f91..90831f014 100644
--- a/src/weather.c
+++ b/src/weather.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "weather.h"
+#include "asm.h"
#include "task.h"
#include "sprite.h"
#include "palette.h"
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index d021189e9..84943b0d5 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "wild_encounter.h"
+#include "asm.h"
#include "field_player_avatar.h"
#include "safari_zone.h"
#include "battle_setup.h"
@@ -34,14 +35,6 @@ struct WildPokemonHeader
struct WildPokemonInfo *fishingMonsInfo;
};
-extern bool8 sub_805759C(u8);
-extern s16 sub_810CAE4(u8, struct Pokeblock *);
-extern u8 MetatileBehavior_IsLandWildEncounter(u8);
-extern u8 sub_81344CC(void);
-extern u8 MetatileBehavior_IsWaterWildEncounter(u8);
-extern u8 MetatileBehavior_IsBridge(u8);
-extern void sub_80BEA50(u16);
-
extern u16 gRoute119WaterTileData[];
extern struct WildPokemonHeader gWildMonHeaders[];
extern struct Pokemon gEnemyParty[6];