From 7948c4008d36ad32ccd49614cce32052505dd5f1 Mon Sep 17 00:00:00 2001 From: Jendrik Date: Mon, 14 Apr 2025 10:17:08 +0200 Subject: [PATCH 1/5] add compatibility with clangd for better editing with VSCode --- .clangd | 93 +++++++++++++++++++ include/AgbRfu_LinkManager.h | 2 + include/apprentice.h | 27 ++++++ include/bard_music.h | 6 ++ include/battle.h | 2 +- include/battle_controllers.h | 2 + include/battle_message.h | 2 + include/battle_pyramid.h | 10 ++ include/battle_tv.h | 2 + include/data.h | 4 + include/event_object_movement.h | 53 +++++++++++ include/field_specials.h | 2 +- include/field_weather.h | 2 +- include/fieldmap.h | 2 +- include/gba/flash_internal.h | 2 + include/gba/io_reg.h | 2 +- include/gba/m4a_internal.h | 2 +- include/gba/multiboot.h | 2 + include/gba/syscall.h | 3 + include/global.h | 17 ++++ include/librfu.h | 5 + include/main.h | 3 +- include/menu_specialized.h | 4 +- include/pokenav_region_map.h | 12 +++ include/region_map.h | 9 ++ include/strings.h | 2 + include/union_room_player_avatar.h | 2 + src/apprentice.c | 27 +----- src/bard_music.c | 6 -- src/battle_anim_effects_1.c | 7 ++ src/battle_message.c | 2 +- src/battle_pyramid.c | 11 --- src/battle_script_commands.c | 4 +- src/battle_transition.c | 4 + src/berry_blender.c | 4 +- src/data.c | 4 - .../battle_frontier_trainer_mons.h | 5 + .../battle_frontier_trainers.h | 2 + src/data/battle_frontier/trainer_hill.h | 4 + src/data/decoration/icon.h | 2 + .../field_effect_object_template_pointers.h | 2 +- src/data/field_effects/field_effect_objects.h | 8 ++ src/data/graphics/intro_scene.h | 2 +- src/data/graphics/mail.h | 48 +++++----- src/data/object_events/base_oam.h | 5 + .../berry_tree_graphics_tables.h | 7 ++ .../movement_action_func_tables.h | 4 + src/data/object_events/object_event_anims.h | 5 + .../object_events/object_event_graphics.h | 5 + .../object_event_graphics_info.h | 12 +++ .../object_events/object_event_pic_tables.h | 7 ++ .../object_events/object_event_subsprites.h | 5 + src/data/pokemon/level_up_learnset_pointers.h | 2 + src/data/pokemon/level_up_learnsets.h | 5 + src/data/pokemon/pokedex_entries.h | 3 + src/data/pokemon/pokedex_text.h | 5 + src/data/pokemon_graphics/front_pic_anims.h | 9 +- src/data/pokemon_graphics/unused_anims.h | 5 + src/data/region_map/city_map_entries.h | 6 ++ src/data/region_map/city_map_tilemaps.h | 5 + src/event_object_movement.c | 58 +----------- src/field_door.c | 2 +- src/field_effect.c | 2 +- src/field_special_scene.c | 2 +- src/field_specials.c | 2 +- src/field_weather.c | 2 +- src/fieldmap.c | 2 +- src/hall_of_fame.c | 2 +- src/lilycove_lady.c | 2 - src/list_menu.c | 10 +- src/m4a.c | 4 + src/m4a_tables.c | 4 +- src/main.c | 2 +- src/main_menu.c | 2 +- src/menu_specialized.c | 4 +- src/mirage_tower.c | 4 +- src/overworld.c | 4 +- src/player_pc.c | 12 +-- src/pokedex.c | 21 ++--- src/pokemon_storage_system.c | 2 +- src/pokenav_region_map.c | 10 +- src/record_mixing.c | 10 +- src/region_map.c | 9 -- src/roulette.c | 2 +- src/scrcmd.c | 4 +- src/secret_base.c | 14 +-- src/slot_machine.c | 3 +- src/union_room_chat.c | 2 +- src/util.c | 12 +-- 89 files changed, 487 insertions(+), 228 deletions(-) create mode 100644 .clangd create mode 100644 include/pokenav_region_map.h diff --git a/.clangd b/.clangd new file mode 100644 index 000000000000..860a8843b32c --- /dev/null +++ b/.clangd @@ -0,0 +1,93 @@ +Diagnostics: + ClangTidy: + FastCheckFilter: None +--- +If: + PathMatch: (src|include)/.*.[ch] +Diagnostics: + UnusedIncludes: None + MissingIncludes: None +CompileFlags: + Add: + - "--target=arm" + - "-mcpu=arm7tdmi" + - "-mthumb" + - "-mabi=apcs-gnu" + - "-mtune=arm7tdmi" + - "-march=armv4t" + - "-Iinclude" + - "-I../include" + - "-I../../include" + - "-DCLANGD=1" + - "-DMODERN=1" + - "--verbose" + - "-isysroot../tools/agbcc/include" + - "-isystem../tools/agbcc/include" + - "-isystem../../tools/agbcc/include" + - "-isystem../../../tools/agbcc/include" + - "-resource-dir=../tools/agbcc/include" + - "-Wno-gnu-alignof-expression" + - "-Wno-gnu-folding-constant" + - "-Wno-single-bit-bitfield-constant-conversion" + - "-Wno-trigraphs" +--- +If: + PathMatch: + - (src|include)/[^/]+.[ch] + - (src|include)/data/.*.[ch] +Diagnostics: + UnusedIncludes: None + MissingIncludes: None +CompileFlags: + Add: + - "-includeglobal.h" +--- +If: + PathMatch: ".*\\.h$" +CompileFlags: + Add: + - "-xc-header" +--- +If: + PathMatch: src/data/.*.h +CompileFlags: + Add: + - "-iquote../../../include" + - "-include../../../include/trainer_hill.h" # needs explicit path because there's another file called trainer_hill.h in src/data/battle_frontier + - "-include./description.h" + - "-include./tiles.h" + - "-includeapprentice.h" + - "-includebard_music.h" + - "-includebattle_pyramid.h" + - "-includebattle_tower.h" + - "-includeconstants/abilities.h" + - "-includeconstants/battle_frontier_mons.h" + - "-includeconstants/battle_frontier.h" + - "-includeconstants/battle_pyramid.h" + - "-includeconstants/battle_tent_mons.h" + - "-includeconstants/battle_tent_trainers.h" + - "-includeconstants/decorations.h" + - "-includeconstants/easy_chat.h" + - "-includeconstants/event_object_movement.h" + - "-includeconstants/event_objects.h" + - "-includeconstants/field_effects.h" + - "-includeconstants/item_effects.h" + - "-includeconstants/items.h" + - "-includeconstants/mauville_old_man.h" + - "-includeconstants/metatile_labels.h" + - "-includeconstants/moves.h" + - "-includeconstants/party_menu.h" + - "-includeconstants/region_map_sections.h" + - "-includeconstants/songs.h" + - "-includeconstants/tms_hms.h" + - "-includeconstants/trainers.h" + - "-includedata.h" + - "-includedecoration.h" + - "-includeeasy_chat.h" + - "-includeevent_object_movement.h" + - "-includefield_effect_helpers.h" + - "-includefield_effect.h" + - "-includefieldmap.h" + - "-includegraphics.h" + - "-includeregion_map.h" + - "-includestrings.h" diff --git a/include/AgbRfu_LinkManager.h b/include/AgbRfu_LinkManager.h index 3b38b85fc9fa..bf693e7c854c 100644 --- a/include/AgbRfu_LinkManager.h +++ b/include/AgbRfu_LinkManager.h @@ -1,6 +1,8 @@ #ifndef GUARD_LINKMANAGER_H #define GUARD_LINKMANAGER_H +#include "librfu.h" + //----------------------------------------------------------------- // Constant definition //----------------------------------------------------------------- diff --git a/include/apprentice.h b/include/apprentice.h index 582d41435e6e..7241d2671bda 100644 --- a/include/apprentice.h +++ b/include/apprentice.h @@ -22,4 +22,31 @@ void ResetAllApprenticeData(void); void CallApprenticeFunction(void); const u8 *GetApprenticeNameInLanguage(u32 apprenticeId, s32 language); +static void Script_GivenApprenticeLvlMode(void); +static void Script_SetApprenticeLvlMode(void); +static void Script_SetApprenticeId(void); +static void ShuffleApprenticeSpecies(void); +static void Script_SetRandomQuestionData(void); +static void IncrementQuestionsAnswered(void); +static void IsFinalQuestion(void); +static void Script_CreateApprenticeMenu(void); +static void Script_PrintApprenticeMessage(void); +static void Script_ResetPlayerApprentice(void); +static void GetShouldCheckApprenticeGone(void); +static void ApprenticeGetQuestion(void); +static void GetNumApprenticePartyMonsAssigned(void); +static void SetApprenticePartyMon(void); +static void InitQuestionData(void); +static void FreeQuestionData(void); +static void ApprenticeBufferString(void); +static void SetApprenticeMonMove(void); +static void SetLeadApprenticeMon(void); +static void Script_ApprenticeOpenBagMenu(void); +static void TrySetApprenticeHeldItem(void); +static void SaveApprentice(void); +static void SetSavedApprenticeTrainerGfxId(void); +static void SetPlayerApprenticeTrainerGfxId(void); +static void GetShouldApprenticeLeave(void); +static void ShiftSavedApprentices(void); + #endif // GUARD_APPRENTICE_H diff --git a/include/bard_music.h b/include/bard_music.h index 6dcf966f67c7..9e12828ccb8f 100644 --- a/include/bard_music.h +++ b/include/bard_music.h @@ -1,6 +1,12 @@ #ifndef GUARD_BARD_MUSIC_H #define GUARD_BARD_MUSIC_H +// Indicates that the previous sound should be held. +#define PREV_BARD_SOUND {.songId = NUM_PHONEME_SONGS} + +// Invalid sound, indicates the end of the sounds for the word. +#define NULL_BARD_SOUND {.songId = PHONEME_ID_NONE} + // The maximum number of BardSoundTemplates/BardSounds there can be for each easy chat word. #define MAX_BARD_SOUNDS_PER_WORD 6 diff --git a/include/battle.h b/include/battle.h index 7979101ecbaf..094ef80362fd 100644 --- a/include/battle.h +++ b/include/battle.h @@ -475,7 +475,7 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER #define GET_STAT_BUFF_ID(n) ((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8 #define GET_STAT_BUFF_VALUE2(n) ((n & 0xF0)) #define GET_STAT_BUFF_VALUE(n) (((n >> 4) & 7)) // 0x10, 0x20, 0x40 -#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit +#define STAT_BUFF_NEGATIVE (0x80) // 0x80, the sign bit #define SET_STAT_BUFF_VALUE(n) ((((n) << 4) & 0xF0)) diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 6e295a759024..e06f51a2b2c3 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_CONTROLLERS_H #define GUARD_BATTLE_CONTROLLERS_H +#include "battle.h" + enum { REQUEST_ALL_BATTLE, REQUEST_SPECIES_BATTLE, diff --git a/include/battle_message.h b/include/battle_message.h index d62c260049d0..2a95b81fc28a 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_MESSAGE_H #define GUARD_BATTLE_MESSAGE_H +#include "constants/battle.h" + // This buffer can hold many different things. Some of the things it can hold // that have explicit sizes are listed below to ensure it can contain them. #define TEXT_BUFF_ARRAY_COUNT max(16, \ diff --git a/include/battle_pyramid.h b/include/battle_pyramid.h index 62320358b6c4..756af0453729 100644 --- a/include/battle_pyramid.h +++ b/include/battle_pyramid.h @@ -1,6 +1,16 @@ #ifndef GUARD_BATTLE_PYRAMID_H #define GUARD_BATTLE_PYRAMID_H +// Const rom data. +#define ABILITY_RANDOM 2 // For wild mons data. + +struct PyramidWildMon { + u16 species; + u8 lvl; + u8 abilityNum; + u16 moves[MAX_MON_MOVES]; +}; + void CallBattlePyramidFunction(void); u16 LocalIdToPyramidTrainerId(u8 localId); bool8 GetBattlePyramidTrainerFlag(u8 eventId); diff --git a/include/battle_tv.h b/include/battle_tv.h index 72466d73b8ae..62eb10f97c76 100644 --- a/include/battle_tv.h +++ b/include/battle_tv.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_TV_H #define GUARD_BATTLE_TV_H +#include "battle.h" + void BattleTv_SetDataBasedOnString(u16 stringId); void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruct *disableStructPtr); void BattleTv_SetDataBasedOnAnimation(u8 animationId); diff --git a/include/data.h b/include/data.h index 558b1dfff395..622f6c65b4c5 100644 --- a/include/data.h +++ b/include/data.h @@ -3,6 +3,10 @@ #include "constants/moves.h" +#define SPECIES_SPRITE(species, sprite) [SPECIES_##species] = {sprite, MON_PIC_SIZE, SPECIES_##species} +#define SPECIES_PAL(species, pal) [SPECIES_##species] = {pal, SPECIES_##species} +#define SPECIES_SHINY_PAL(species, pal) [SPECIES_##species] = {pal, SPECIES_##species + SPECIES_SHINY_TAG} + #define SPECIES_SHINY_TAG 500 #define MAX_TRAINER_ITEMS 4 diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 2a273b79914c..6eb07a6f1af4 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -2,6 +2,59 @@ #define GUARD_EVENT_OBJECT_MOVEMENT_H #include "constants/event_object_movement.h" +#include "sprite.h" + +#define OBJ_EVENT_PAL_TAG_BRENDAN 0x1100 +#define OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION 0x1101 +#define OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION 0x1102 +#define OBJ_EVENT_PAL_TAG_NPC_1 0x1103 +#define OBJ_EVENT_PAL_TAG_NPC_2 0x1104 +#define OBJ_EVENT_PAL_TAG_NPC_3 0x1105 +#define OBJ_EVENT_PAL_TAG_NPC_4 0x1106 +#define OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION 0x1107 +#define OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION 0x1108 +#define OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION 0x1109 +#define OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION 0x110A +#define OBJ_EVENT_PAL_TAG_QUINTY_PLUMP 0x110B +#define OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION 0x110C +#define OBJ_EVENT_PAL_TAG_TRUCK 0x110D +#define OBJ_EVENT_PAL_TAG_VIGOROTH 0x110E +#define OBJ_EVENT_PAL_TAG_ZIGZAGOON 0x110F +#define OBJ_EVENT_PAL_TAG_MAY 0x1110 +#define OBJ_EVENT_PAL_TAG_MAY_REFLECTION 0x1111 +#define OBJ_EVENT_PAL_TAG_MOVING_BOX 0x1112 +#define OBJ_EVENT_PAL_TAG_CABLE_CAR 0x1113 +#define OBJ_EVENT_PAL_TAG_SSTIDAL 0x1114 +#define OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER 0x1115 +#define OBJ_EVENT_PAL_TAG_KYOGRE 0x1116 +#define OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION 0x1117 +#define OBJ_EVENT_PAL_TAG_GROUDON 0x1118 +#define OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION 0x1119 +#define OBJ_EVENT_PAL_TAG_UNUSED 0x111A +#define OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW 0x111B +#define OBJ_EVENT_PAL_TAG_POOCHYENA 0x111C +#define OBJ_EVENT_PAL_TAG_RED_LEAF 0x111D +#define OBJ_EVENT_PAL_TAG_DEOXYS 0x111E +#define OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE 0x111F +#define OBJ_EVENT_PAL_TAG_HO_OH 0x1120 +#define OBJ_EVENT_PAL_TAG_LUGIA 0x1121 +#define OBJ_EVENT_PAL_TAG_RS_BRENDAN 0x1122 +#define OBJ_EVENT_PAL_TAG_RS_MAY 0x1123 +#define OBJ_EVENT_PAL_TAG_NONE 0x11FF + +enum { + MOVE_SPEED_NORMAL, // walking + MOVE_SPEED_FAST_1, // running / surfing / sliding (ice tile) + MOVE_SPEED_FAST_2, // water current / acro bike + MOVE_SPEED_FASTER, // mach bike's max speed + MOVE_SPEED_FASTEST, +}; + +enum { + JUMP_DISTANCE_IN_PLACE, + JUMP_DISTANCE_NORMAL, + JUMP_DISTANCE_FAR, +}; // Palette slots for overworld NPCs. // The same standard set of palettes for overworld objects are normally always loaded at the same diff --git a/include/field_specials.h b/include/field_specials.h index faf71e9c0877..e83c689ee060 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -18,7 +18,7 @@ bool32 ShouldDoScottBattleFrontierCall(void); bool32 ShouldDoRoxanneCall(void); bool32 ShouldDoRivalRayquazaCall(void); bool32 CountSSTidalStep(u16 delta); -u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y); +u8 GetSSTidalLocation(u8 *mapGroup, u8 *mapNum, s16 *x, s16 *y); void ShowScrollableMultichoice(void); void FrontierGamblerSetWonOrLost(bool8 won); u8 TryGainNewFanFromCounter(u8 incrementId); diff --git a/include/field_weather.h b/include/field_weather.h index 8ce0cc9e5052..d0c634212fe9 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -133,7 +133,7 @@ struct Weather s16 droughtState; u8 droughtUnused[9]; s8 loadDroughtPalsIndex; - u8 loadDroughtPalsOffset; + s8 loadDroughtPalsOffset; }; // field_weather.c diff --git a/include/fieldmap.h b/include/fieldmap.h index 47072bd1be08..e65400162a88 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -27,7 +27,7 @@ u32 MapGridGetMetatileIdAt(int, int); u32 MapGridGetMetatileBehaviorAt(int, int); void MapGridSetMetatileIdAt(int, int, u16); void MapGridSetMetatileEntryAt(int, int, u16); -void GetCameraCoords(u16 *, u16 *); +void GetCameraCoords(s16 *, s16 *); u8 MapGridGetCollisionAt(int, int); int GetMapBorderIdAt(int x, int y); bool32 CanCameraMoveInDirection(int direction); diff --git a/include/gba/flash_internal.h b/include/gba/flash_internal.h index ba84546aaf4d..5b6b073d1c2f 100644 --- a/include/gba/flash_internal.h +++ b/include/gba/flash_internal.h @@ -1,6 +1,8 @@ #ifndef GUARD_GBA_FLASH_INTERNAL_H #define GUARD_GBA_FLASH_INTERNAL_H +#include "types.h" + #define FLASH_BASE ((u8 *)0xE000000) #define FLASH_WRITE(addr, data) ((*(vu8 *)(FLASH_BASE + (addr))) = (data)) diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 53021185e3cc..913f277cd998 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -482,7 +482,7 @@ #define REG_SIODATA32 (*(vu32 *)REG_ADDR_SIODATA32) #define REG_SIOMLT_SEND (*(vu16 *)REG_ADDR_SIOMLT_SEND) #define REG_SIOMLT_RECV (*(vu64 *)REG_ADDR_SIOMLT_RECV) -#define REG_SIOMULTI(n) (*(vu16 *)(REG_ADDR_SIOMULTI0 + (n) * 2)) +#define REG_SIOMULTI(n) (*(vu16 *)(uintptr_t)(REG_ADDR_SIOMULTI0 + (n) * 2)) #define REG_SIOMULTI0 (*(vu16 *)REG_ADDR_SIOMULTI0) #define REG_SIOMULTI1 (*(vu16 *)REG_ADDR_SIOMULTI1) #define REG_SIOMULTI2 (*(vu16 *)REG_ADDR_SIOMULTI2) diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index fc8205efd992..06c5cb96642f 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -402,7 +402,7 @@ extern const struct ToneData voicegroup000; extern char gNumMusicPlayers[]; extern char gMaxLines[]; -#define NUM_MUSIC_PLAYERS ((u16)gNumMusicPlayers) +#define NUM_MUSIC_PLAYERS ((u16)(uintptr_t)gNumMusicPlayers) #define MAX_LINES ((u32)gMaxLines) u32 umul3232H32(u32 multiplier, u32 multiplicand); diff --git a/include/gba/multiboot.h b/include/gba/multiboot.h index 64a860284318..5ad90b727ca7 100644 --- a/include/gba/multiboot.h +++ b/include/gba/multiboot.h @@ -1,6 +1,8 @@ #ifndef GUARD_GBA_MULTIBOOT_H #define GUARD_GBA_MULTIBOOT_H +#include "types.h" + #define MULTIBOOT_NCHILD 3 // Maximum number of slaves #define MULTIBOOT_HEADER_SIZE 0xc0 // Header size #define MULTIBOOT_SEND_SIZE_MIN 0x100 // Minimum transmission size diff --git a/include/gba/syscall.h b/include/gba/syscall.h index c922084d5fd2..86013aed2dbe 100644 --- a/include/gba/syscall.h +++ b/include/gba/syscall.h @@ -1,6 +1,9 @@ #ifndef GUARD_GBA_SYSCALL_H #define GUARD_GBA_SYSCALL_H +#include "types.h" +#include "multiboot.h" + #define RESET_EWRAM 0x01 #define RESET_IWRAM 0x02 #define RESET_PALETTE 0x04 diff --git a/include/global.h b/include/global.h index 62da1165c724..f59bf0a22d2e 100644 --- a/include/global.h +++ b/include/global.h @@ -35,6 +35,16 @@ #define INCBIN_S8 INCBIN #define INCBIN_S16 INCBIN #define INCBIN_S32 INCBIN +#elif defined(CLANGD) +#define _(x) {} +#define __(x) {} +#define INCBIN(...) {} +#define INCBIN_U8 INCBIN +#define INCBIN_U16 INCBIN +#define INCBIN_U32 INCBIN +#define INCBIN_S8 INCBIN +#define INCBIN_S16 INCBIN +#define INCBIN_S32 INCBIN #endif // IDE support #define ARRAY_COUNT(array) (size_t)(sizeof(array) / sizeof((array)[0])) @@ -149,7 +159,14 @@ // This produces an error at compile-time if expr is zero. // It looks like file.c:line: size of array `id' is negative +#ifdef CLANGD +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu-folding-constant" +#define STATIC_ASSERT(expr, id) typedef char id[(expr) ? 1 : -1]; +#pragma clang diagnostic pop +#else #define STATIC_ASSERT(expr, id) typedef char id[(expr) ? 1 : -1]; +#endif struct Coords8 { diff --git a/include/librfu.h b/include/librfu.h index 6b0bd97c713e..2b2a28fed45b 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -4,6 +4,10 @@ #include "global.h" #include "main.h" +#ifdef CLANGD +#pragma clang diagnostic ignored "-Wdeprecated-non-prototype" +#endif + #define LIBRFU_VERSION 1026 /* TODOs: @@ -316,6 +320,7 @@ struct STWIStatus u8 recoveryCount; u8 unk_16; u8 unk_17; + // The callback can take 2 or 3 arguments. void (*callbackM)(); void (*callbackS)(u16); void (*callbackID)(void); diff --git a/include/main.h b/include/main.h index 5ccb20df88b6..1466f3c1ee1d 100644 --- a/include/main.h +++ b/include/main.h @@ -1,6 +1,7 @@ #ifndef GUARD_MAIN_H #define GUARD_MAIN_H +#include typedef void (*MainCallback)(void); typedef void (*IntrCallback)(void); typedef void (*IntrFunc)(void); @@ -31,7 +32,7 @@ struct Main /*0x034*/ bool16 watchedKeysPressed; // whether one of the watched keys was pressed /*0x036*/ u16 watchedKeysMask; // bit mask for watched keys - /*0x038*/ struct OamData oamBuffer[128]; + /*0x038*/ struct OamData ALIGNED(4) oamBuffer[128]; /*0x438*/ u8 state; diff --git a/include/menu_specialized.h b/include/menu_specialized.h index 152afb59ac9e..0d4f45f8f2de 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -133,8 +133,8 @@ u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices); void InitMoveRelearnerWindows(bool8 useContestWindow); // Level up window -void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr); -void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr); +void DrawLevelUpWindowPg1(u16 windowId, s16 *statsBefore, s16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr); +void DrawLevelUpWindowPg2(u16 windowId, s16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr); void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats); #endif // GUARD_MENU_SPECIALIZED_H diff --git a/include/pokenav_region_map.h b/include/pokenav_region_map.h new file mode 100644 index 000000000000..85f0a05b31b8 --- /dev/null +++ b/include/pokenav_region_map.h @@ -0,0 +1,12 @@ +#ifndef POKENAV_REGION_MAP_H +#define POKENAV_REGION_MAP_H + +#define NUM_CITY_MAPS 22 + +struct CityMapEntry { + u16 mapSecId; + u16 index; + const u32 *tilemap; +}; + +#endif \ No newline at end of file diff --git a/include/region_map.h b/include/region_map.h index 9f0b110a658f..e23f92d11094 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -6,6 +6,15 @@ // Exported type declarations #define MAP_NAME_LENGTH 16 +#define MAP_WIDTH 28 +#define MAP_HEIGHT 15 +#define MAPCURSOR_X_MIN 1 +#define MAPCURSOR_Y_MIN 2 +#define MAPCURSOR_X_MAX (MAPCURSOR_X_MIN + MAP_WIDTH - 1) +#define MAPCURSOR_Y_MAX (MAPCURSOR_Y_MIN + MAP_HEIGHT - 1) + +#define FLYDESTICON_RED_OUTLINE 6 + enum { MAP_INPUT_NONE, diff --git a/include/strings.h b/include/strings.h index 3215f70c8846..744c1181dfb7 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1,6 +1,8 @@ #ifndef GUARD_STRINGS_H #define GUARD_STRINGS_H +#include "gba/types.h" + // Placeholders extern const u8 gText_ExpandedPlaceholder_Empty[]; extern const u8 gText_ExpandedPlaceholder_Kun[]; diff --git a/include/union_room_player_avatar.h b/include/union_room_player_avatar.h index 508545a0eb87..f03820ee4061 100644 --- a/include/union_room_player_avatar.h +++ b/include/union_room_player_avatar.h @@ -1,6 +1,8 @@ #ifndef GUARD_UNION_ROOM_PLAYER_AVATAR_H #define GUARD_UNION_ROOM_PLAYER_AVATAR_H +#include "union_room.h" + u8 InitUnionRoomPlayerObjects(struct UnionRoomObject *players); void DestroyUnionRoomPlayerObjects(void); void CreateUnionRoomPlayerSprites(u8 *spriteIds, s32 leaderId); diff --git a/src/apprentice.c b/src/apprentice.c index 72ab8f24c823..ee8831cf106f 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -87,32 +87,7 @@ static u8 CreateAndShowWindow(u8 left, u8 top, u8 width, u8 height); static void RemoveAndHideWindow(u8 windowId); static void ExecuteFuncAfterButtonPress(void (*func)(void)); -static void Script_GivenApprenticeLvlMode(void); -static void Script_SetApprenticeLvlMode(void); -static void Script_SetApprenticeId(void); -static void ShuffleApprenticeSpecies(void); -static void Script_SetRandomQuestionData(void); -static void IncrementQuestionsAnswered(void); -static void IsFinalQuestion(void); -static void Script_CreateApprenticeMenu(void); -static void Script_PrintApprenticeMessage(void); -static void Script_ResetPlayerApprentice(void); -static void GetShouldCheckApprenticeGone(void); -static void ApprenticeGetQuestion(void); -static void GetNumApprenticePartyMonsAssigned(void); -static void SetApprenticePartyMon(void); -static void InitQuestionData(void); -static void FreeQuestionData(void); -static void ApprenticeBufferString(void); -static void SetApprenticeMonMove(void); -static void SetLeadApprenticeMon(void); -static void Script_ApprenticeOpenBagMenu(void); -static void TrySetApprenticeHeldItem(void); -static void SaveApprentice(void); -static void SetSavedApprenticeTrainerGfxId(void); -static void SetPlayerApprenticeTrainerGfxId(void); -static void GetShouldApprenticeLeave(void); -static void ShiftSavedApprentices(void); + #include "data/battle_frontier/apprentice.h" diff --git a/src/bard_music.c b/src/bard_music.c index 3335e2428f9e..5f60fbbbdd88 100644 --- a/src/bard_music.c +++ b/src/bard_music.c @@ -3,12 +3,6 @@ #include "easy_chat.h" #include "constants/songs.h" -// Indicates that the previous sound should be held. -#define PREV_BARD_SOUND { .songId = NUM_PHONEME_SONGS } - -// Invalid sound, indicates the end of the sounds for the word. -#define NULL_BARD_SOUND { .songId = PHONEME_ID_NONE } - #include "data/bard_music/pokemon.h" #include "data/bard_music/moves.h" #include "data/bard_music/trainer.h" diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index ee532f4134e2..791e066ef0e2 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -4452,7 +4452,14 @@ static void AnimBowMon_Step1_Callback(struct Sprite *sprite) { sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; PrepareBattlerSpriteForRotScale(sprite->data[3], ST_OAM_OBJ_NORMAL); +#ifdef CLANGD +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wconstant-conversion" +#endif sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : 0xFFFFFD00; +#ifdef CLANGD +#pragma clang diagnostic pop +#endif sprite->data[5] = 0; } diff --git a/src/battle_message.c b/src/battle_message.c index d539bc540dcc..cf7c483d5799 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -2250,7 +2250,7 @@ void BufferStringBattle(u16 stringID) u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src) { - BattleStringExpandPlaceholders(src, gDisplayedStringBattle); + return BattleStringExpandPlaceholders(src, gDisplayedStringBattle); } static const u8 *TryGetStatusString(u8 *src) diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index b4bb3caccaa6..79b4fd02f09c 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -42,14 +42,6 @@ extern const struct MapLayout *const gMapLayouts[]; -struct PyramidWildMon -{ - u16 species; - u8 lvl; - u8 abilityNum; - u16 moves[MAX_MON_MOVES]; -}; - struct PyramidFloorTemplate { u8 numItems; @@ -98,9 +90,6 @@ static bool8 SetPyramidObjectPositionsNearSquare(u8, u8); static bool8 TrySetPyramidObjectEventPositionInSquare(u8, u8 *, u8, u8); static bool8 TrySetPyramidObjectEventPositionAtCoords(bool8, u8, u8, u8 *, u8, u8); -// Const rom data. -#define ABILITY_RANDOM 2 // For wild mons data. - #include "data/battle_frontier/battle_pyramid_level_50_wild_mons.h" #include "data/battle_frontier/battle_pyramid_open_level_wild_mons.h" diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 96654791407e..8c7f7687f33a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2669,7 +2669,7 @@ void SetMoveEffect(bool8 primary, u8 certain) case MOVE_EFFECT_SP_DEF_MINUS_1: case MOVE_EFFECT_ACC_MINUS_1: case MOVE_EFFECT_EVS_MINUS_1: - if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE, + if (ChangeStatBuffs((s8) (SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE), gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_MINUS_1 + 1, affectsUser, 0)) { @@ -2711,7 +2711,7 @@ void SetMoveEffect(bool8 primary, u8 certain) case MOVE_EFFECT_SP_DEF_MINUS_2: case MOVE_EFFECT_ACC_MINUS_2: case MOVE_EFFECT_EVS_MINUS_2: - if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE, + if (ChangeStatBuffs((s8) (SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE), gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_MINUS_2 + 1, affectsUser, 0)) { diff --git a/src/battle_transition.c b/src/battle_transition.c index c23578e60817..03782ec96277 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -25,6 +25,10 @@ #include "constants/trainers.h" #include "constants/rgb.h" +#ifdef CLANGD +#pragma clang diagnostic ignored "-Wpointer-sign" +#endif + #define PALTAG_UNUSED_MUGSHOT 0x100A #define B_TRANS_DMA_FLAGS (1 | ((DMA_SRC_INC | DMA_DEST_FIXED | DMA_REPEAT | DMA_16BIT | DMA_START_HBLANK | DMA_ENABLE) << 16)) diff --git a/src/berry_blender.c b/src/berry_blender.c index 5f0e1706077b..7e73c584b7f6 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -174,8 +174,8 @@ struct BerryBlender u16 progressBarValue; u16 maxProgressBarValue; u16 centerScale; - u16 bg_X; - u16 bg_Y; + s16 bg_X; + s16 bg_Y; u8 opponentTaskIds[BLENDER_MAX_PLAYERS - 1]; u8 perfectOpponents; // for debugging, NPCs will always hit Best u16 scores[BLENDER_MAX_PLAYERS][NUM_SCORE_TYPES]; diff --git a/src/data.c b/src/data.c index bde609be1dd3..3bb7b576912a 100644 --- a/src/data.c +++ b/src/data.c @@ -298,10 +298,6 @@ const union AnimCmd *const gAnims_MonPic[MAX_MON_PIC_FRAMES] = sAnim_MonPic_3, }; -#define SPECIES_SPRITE(species, sprite) [SPECIES_##species] = {sprite, MON_PIC_SIZE, SPECIES_##species} -#define SPECIES_PAL(species, pal) [SPECIES_##species] = {pal, SPECIES_##species} -#define SPECIES_SHINY_PAL(species, pal) [SPECIES_##species] = {pal, SPECIES_##species + SPECIES_SHINY_TAG} - #include "data/pokemon_graphics/unused_anims.h" #include "data/pokemon_graphics/front_pic_coordinates.h" #include "data/pokemon_graphics/still_front_pic_table.h" diff --git a/src/data/battle_frontier/battle_frontier_trainer_mons.h b/src/data/battle_frontier/battle_frontier_trainer_mons.h index f0a203d56d90..a774a72c4874 100644 --- a/src/data/battle_frontier/battle_frontier_trainer_mons.h +++ b/src/data/battle_frontier/battle_frontier_trainer_mons.h @@ -1,3 +1,6 @@ +#ifndef BATTLE_FRONTIER_TRAINER_MONS_H +#define BATTLE_FRONTIER_TRAINER_MONS_H + // Also used by early Pkmn Breeder, Collector, and Beauty trainers #define FRONTIER_MONS_YOUNGSTER_LASS_1 \ FRONTIER_MON_SUNKERN, \ @@ -7367,3 +7370,5 @@ const u16 gBattleFrontierTrainerMons_Gretel[] = { FRONTIER_MONS_AROMA_LADY_3 }; + +#endif \ No newline at end of file diff --git a/src/data/battle_frontier/battle_frontier_trainers.h b/src/data/battle_frontier/battle_frontier_trainers.h index 1cae890c25ae..8821b47194db 100644 --- a/src/data/battle_frontier/battle_frontier_trainers.h +++ b/src/data/battle_frontier/battle_frontier_trainers.h @@ -1,3 +1,5 @@ +#include "battle_frontier_trainer_mons.h" + const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COUNT] = { [FRONTIER_TRAINER_BRADY] = { diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h index c13e6a8c9db7..8e1ec673756d 100644 --- a/src/data/battle_frontier/trainer_hill.h +++ b/src/data/battle_frontier/trainer_hill.h @@ -1,3 +1,7 @@ +#if CLANGD +#pragma clang diagnostic ignored "-Wbitfield-constant-conversion" +#endif + // NOTE: Each of these macros turn data into one byte. Therefore ranges for all arguments is 0-15 // See struct TrainerHillFloorMap for more info about each #define COORDS_XY(x,y) ((y<<4)|(x)) diff --git a/src/data/decoration/icon.h b/src/data/decoration/icon.h index 03a0e06695bd..19b883ce8d2e 100644 --- a/src/data/decoration/icon.h +++ b/src/data/decoration/icon.h @@ -1,3 +1,5 @@ +#include + const u32 *const gDecorIconTable[][2] = { [DECOR_NONE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, diff --git a/src/data/field_effects/field_effect_object_template_pointers.h b/src/data/field_effects/field_effect_object_template_pointers.h index 64a3c3283b00..a57206ea2722 100755 --- a/src/data/field_effects/field_effect_object_template_pointers.h +++ b/src/data/field_effects/field_effect_object_template_pointers.h @@ -74,4 +74,4 @@ const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = { [FLDEFFOBJ_BUBBLES] = &gFieldEffectObjectTemplate_Bubbles, [FLDEFFOBJ_SMALL_SPARKLE] = &gFieldEffectObjectTemplate_SmallSparkle, [FLDEFFOBJ_RAYQUAZA] = &gFieldEffectObjectTemplate_Rayquaza, -}; +}; \ No newline at end of file diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h index d19adf6f0b71..e3c4709c67b6 100755 --- a/src/data/field_effects/field_effect_objects.h +++ b/src/data/field_effects/field_effect_objects.h @@ -1,3 +1,9 @@ +#ifndef FIELD_EFFECT_OBJECTS_H +#define FIELD_EFFECT_OBJECTS_H + +#include "../object_events/object_event_graphics.h" +#include "../object_events/base_oam.h" + const struct SpritePalette gSpritePalette_GeneralFieldEffect0 = {gFieldEffectObjectPalette0, FLDEFF_PAL_TAG_GENERAL_0}; const struct SpritePalette gSpritePalette_GeneralFieldEffect1 = {gFieldEffectObjectPalette1, FLDEFF_PAL_TAG_GENERAL_1}; @@ -1287,3 +1293,5 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = { }; static const struct SpritePalette sSpritePalette_Unused = {gObjectEventPal_Npc3, FLDEFF_PAL_TAG_UNKNOWN}; + +#endif \ No newline at end of file diff --git a/src/data/graphics/intro_scene.h b/src/data/graphics/intro_scene.h index cb7706c9a3df..5d6fad672869 100644 --- a/src/data/graphics/intro_scene.h +++ b/src/data/graphics/intro_scene.h @@ -1,6 +1,6 @@ const u16 gIntroGameFreakTextFade_Pal[] = INCBIN_U16("graphics/intro/scene_1/text.gbapal"); // game freak text blue fade const u16 gIntroPlayer_Pal[] = INCBIN_U16("graphics/intro/scene_2/player.gbapal"); -const u16 gIntro3Bg_Pal[] = INCBIN_U16("graphics/intro/scene_3/bg.gbapal"); +const u8 gIntro3Bg_Pal[] = INCBIN_U8("graphics/intro/scene_3/bg.gbapal"); const u16 gIntroVolbeat_Pal[] = INCBIN_U16("graphics/intro/scene_2/volbeat.gbapal"); const u16 gIntroTorchic_Pal[] = INCBIN_U16("graphics/intro/scene_2/torchic.gbapal"); const u16 gIntroManectric_Pal[] = INCBIN_U16("graphics/intro/scene_2/manectric.gbapal"); diff --git a/src/data/graphics/mail.h b/src/data/graphics/mail.h index 05e65be1c1da..4431648401f9 100644 --- a/src/data/graphics/mail.h +++ b/src/data/graphics/mail.h @@ -11,28 +11,28 @@ const u16 gMailPalette_Dream[] = INCBIN_U16("graphics/mail/dream/palette.gbapal" const u16 gMailPalette_Fab[] = INCBIN_U16("graphics/mail/fab/palette.gbapal"); const u16 gMailPalette_Retro[] = INCBIN_U16("graphics/mail/retro/palette.gbapal"); -const u32 gMailTiles_Orange[] = INCBIN_U32("graphics/mail/orange/tiles.4bpp.lz"); -const u32 gMailTiles_Harbor[] = INCBIN_U32("graphics/mail/harbor/tiles.4bpp.lz"); -const u32 gMailTiles_Glitter[] = INCBIN_U32("graphics/mail/glitter/tiles.4bpp.lz"); -const u32 gMailTiles_Mech[] = INCBIN_U32("graphics/mail/mech/tiles.4bpp.lz"); -const u32 gMailTiles_Wood[] = INCBIN_U32("graphics/mail/wood/tiles.4bpp.lz"); -const u32 gMailTiles_Wave[] = INCBIN_U32("graphics/mail/wave/tiles.4bpp.lz"); -const u32 gMailTiles_Bead[] = INCBIN_U32("graphics/mail/bead/tiles.4bpp.lz"); -const u32 gMailTiles_Shadow[] = INCBIN_U32("graphics/mail/shadow/tiles.4bpp.lz"); -const u32 gMailTiles_Tropic[] = INCBIN_U32("graphics/mail/tropic/tiles.4bpp.lz"); -const u32 gMailTiles_Dream[] = INCBIN_U32("graphics/mail/dream/tiles.4bpp.lz"); -const u32 gMailTiles_Fab[] = INCBIN_U32("graphics/mail/fab/tiles.4bpp.lz"); -const u32 gMailTiles_Retro[] = INCBIN_U32("graphics/mail/retro/tiles.4bpp.lz"); +const u8 gMailTiles_Orange[] = INCBIN_U8("graphics/mail/orange/tiles.4bpp.lz"); +const u8 gMailTiles_Harbor[] = INCBIN_U8("graphics/mail/harbor/tiles.4bpp.lz"); +const u8 gMailTiles_Glitter[] = INCBIN_U8("graphics/mail/glitter/tiles.4bpp.lz"); +const u8 gMailTiles_Mech[] = INCBIN_U8("graphics/mail/mech/tiles.4bpp.lz"); +const u8 gMailTiles_Wood[] = INCBIN_U8("graphics/mail/wood/tiles.4bpp.lz"); +const u8 gMailTiles_Wave[] = INCBIN_U8("graphics/mail/wave/tiles.4bpp.lz"); +const u8 gMailTiles_Bead[] = INCBIN_U8("graphics/mail/bead/tiles.4bpp.lz"); +const u8 gMailTiles_Shadow[] = INCBIN_U8("graphics/mail/shadow/tiles.4bpp.lz"); +const u8 gMailTiles_Tropic[] = INCBIN_U8("graphics/mail/tropic/tiles.4bpp.lz"); +const u8 gMailTiles_Dream[] = INCBIN_U8("graphics/mail/dream/tiles.4bpp.lz"); +const u8 gMailTiles_Fab[] = INCBIN_U8("graphics/mail/fab/tiles.4bpp.lz"); +const u8 gMailTiles_Retro[] = INCBIN_U8("graphics/mail/retro/tiles.4bpp.lz"); -const u32 gMailTilemap_Orange[] = INCBIN_U32("graphics/mail/orange/map.bin.lz"); -const u32 gMailTilemap_Harbor[] = INCBIN_U32("graphics/mail/harbor/map.bin.lz"); -const u32 gMailTilemap_Glitter[] = INCBIN_U32("graphics/mail/glitter/map.bin.lz"); -const u32 gMailTilemap_Mech[] = INCBIN_U32("graphics/mail/mech/map.bin.lz"); -const u32 gMailTilemap_Wood[] = INCBIN_U32("graphics/mail/wood/map.bin.lz"); -const u32 gMailTilemap_Wave[] = INCBIN_U32("graphics/mail/wave/map.bin.lz"); -const u32 gMailTilemap_Bead[] = INCBIN_U32("graphics/mail/bead/map.bin.lz"); -const u32 gMailTilemap_Shadow[] = INCBIN_U32("graphics/mail/shadow/map.bin.lz"); -const u32 gMailTilemap_Tropic[] = INCBIN_U32("graphics/mail/tropic/map.bin.lz"); -const u32 gMailTilemap_Dream[] = INCBIN_U32("graphics/mail/dream/map.bin.lz"); -const u32 gMailTilemap_Fab[] = INCBIN_U32("graphics/mail/fab/map.bin.lz"); -const u32 gMailTilemap_Retro[] = INCBIN_U32("graphics/mail/retro/map.bin.lz"); +const u8 gMailTilemap_Orange[] = INCBIN_U8("graphics/mail/orange/map.bin.lz"); +const u8 gMailTilemap_Harbor[] = INCBIN_U8("graphics/mail/harbor/map.bin.lz"); +const u8 gMailTilemap_Glitter[] = INCBIN_U8("graphics/mail/glitter/map.bin.lz"); +const u8 gMailTilemap_Mech[] = INCBIN_U8("graphics/mail/mech/map.bin.lz"); +const u8 gMailTilemap_Wood[] = INCBIN_U8("graphics/mail/wood/map.bin.lz"); +const u8 gMailTilemap_Wave[] = INCBIN_U8("graphics/mail/wave/map.bin.lz"); +const u8 gMailTilemap_Bead[] = INCBIN_U8("graphics/mail/bead/map.bin.lz"); +const u8 gMailTilemap_Shadow[] = INCBIN_U8("graphics/mail/shadow/map.bin.lz"); +const u8 gMailTilemap_Tropic[] = INCBIN_U8("graphics/mail/tropic/map.bin.lz"); +const u8 gMailTilemap_Dream[] = INCBIN_U8("graphics/mail/dream/map.bin.lz"); +const u8 gMailTilemap_Fab[] = INCBIN_U8("graphics/mail/fab/map.bin.lz"); +const u8 gMailTilemap_Retro[] = INCBIN_U8("graphics/mail/retro/map.bin.lz"); diff --git a/src/data/object_events/base_oam.h b/src/data/object_events/base_oam.h index f74feca32f91..014198d77c59 100755 --- a/src/data/object_events/base_oam.h +++ b/src/data/object_events/base_oam.h @@ -1,3 +1,6 @@ +#ifndef OBJECT_EVENTS_BASE_OAM_H +#define OBJECT_EVENTS_BASE_OAM_H + const struct OamData gObjectEventBaseOam_8x8 = { .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), @@ -45,3 +48,5 @@ const struct OamData gObjectEventBaseOam_64x64 = { .size = SPRITE_SIZE(64x64), .priority = 2 }; + +#endif \ No newline at end of file diff --git a/src/data/object_events/berry_tree_graphics_tables.h b/src/data/object_events/berry_tree_graphics_tables.h index fe41bda3b107..3a1d276c2d86 100755 --- a/src/data/object_events/berry_tree_graphics_tables.h +++ b/src/data/object_events/berry_tree_graphics_tables.h @@ -1,3 +1,8 @@ +#ifndef OBJECT_EVENTS_BERRY_TREE_GRAPHICS_TABLES_H +#define OBJECT_EVENTS_BERRY_TREE_GRAPHICS_TABLES_H + +#include "object_event_graphics.h" + static const struct SpriteFrameImage sPicTable_PechaBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), @@ -563,3 +568,5 @@ const u8 *const gBerryTreeObjectEventGraphicsIdTablePointers[] = { [ITEM_UNUSED_BERRY_2 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, [ITEM_UNUSED_BERRY_3 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, }; + +#endif \ No newline at end of file diff --git a/src/data/object_events/movement_action_func_tables.h b/src/data/object_events/movement_action_func_tables.h index 2e1b6b3b31a8..c44289c9fb24 100755 --- a/src/data/object_events/movement_action_func_tables.h +++ b/src/data/object_events/movement_action_func_tables.h @@ -1,3 +1,7 @@ +#if CLANGD +#pragma clang diagnostic ignored "-Wtentative-definition-array" +#endif + u8 MovementAction_FaceDown_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_FaceDown_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_PauseSpriteAnim(struct ObjectEvent *, struct Sprite *); diff --git a/src/data/object_events/object_event_anims.h b/src/data/object_events/object_event_anims.h index f96e52de5357..b3a33b4cc047 100755 --- a/src/data/object_events/object_event_anims.h +++ b/src/data/object_events/object_event_anims.h @@ -1,3 +1,6 @@ +#ifndef OBJECT_EVENTS_ANIMS_H +#define OBJECT_EVENTS_ANIMS_H + static const union AnimCmd sAnim_StayStill[] = { ANIMCMD_FRAME(0, 8), @@ -1175,3 +1178,5 @@ static const struct StepAnimTable sStepAnimTables[] = { }, {}, }; + +#endif \ No newline at end of file diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index 6ee56cc78e1c..92317d5243bf 100755 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -1,3 +1,6 @@ +#ifndef OBJECT_EVENT_GRAPHICS_H +#define OBJECT_EVENT_GRAPHICS_H + const u32 gObjectEventPic_BrendanNormal[] = INCBIN_U32("graphics/object_events/pics/people/brendan/walking.4bpp"); const u32 gObjectEventPic_BrendanRunning[] = INCBIN_U32("graphics/object_events/pics/people/brendan/running.4bpp"); const u16 gObjectEventPal_Brendan[] = INCBIN_U16("graphics/object_events/palettes/brendan.gbapal"); @@ -360,3 +363,5 @@ const u32 gObjectEventPic_Lugia[] = INCBIN_U32("graphics/object_events/pics/poke const u16 gObjectEventPal_Lugia[] = INCBIN_U16("graphics/object_events/palettes/lugia.gbapal"); const u32 gObjectEventPic_HoOh[] = INCBIN_U32("graphics/object_events/pics/pokemon/ho_oh.4bpp"); const u16 gObjectEventPal_HoOh[] = INCBIN_U16("graphics/object_events/palettes/ho_oh.gbapal"); + +#endif \ No newline at end of file diff --git a/src/data/object_events/object_event_graphics_info.h b/src/data/object_events/object_event_graphics_info.h index 146bb87306b1..91140f3c886d 100755 --- a/src/data/object_events/object_event_graphics_info.h +++ b/src/data/object_events/object_event_graphics_info.h @@ -1,3 +1,15 @@ +#if CLANGD +#include "berry_tree_graphics_tables.h" +#endif + +#include "object_event_pic_tables.h" +#include "object_event_anims.h" +#include "object_event_subsprites.h" +#include "base_oam.h" +#include "event_object_movement.h" + +static const struct SpriteFrameImage sPicTable_PechaBerryTree[]; + const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanNormal = { .tileTag = TAG_NONE, .paletteTag = OBJ_EVENT_PAL_TAG_BRENDAN, diff --git a/src/data/object_events/object_event_pic_tables.h b/src/data/object_events/object_event_pic_tables.h index 1b8c9c727a2d..731856379a8b 100755 --- a/src/data/object_events/object_event_pic_tables.h +++ b/src/data/object_events/object_event_pic_tables.h @@ -1,3 +1,8 @@ +#ifndef OBJECT_EVENT_PIC_TABLES_H +#define OBJECT_EVENT_PIC_TABLES_H + +#include "object_event_graphics.h" + static const struct SpriteFrameImage sPicTable_BrendanNormal[] = { overworld_frame(gObjectEventPic_BrendanNormal, 2, 4, 0), overworld_frame(gObjectEventPic_BrendanNormal, 2, 4, 1), @@ -2172,3 +2177,5 @@ static const struct SpriteFrameImage sPicTable_RubySapphireMay[] = { overworld_frame(gObjectEventPic_RubySapphireMayNormal, 2, 4, 7), overworld_frame(gObjectEventPic_RubySapphireMayNormal, 2, 4, 8), }; + +#endif \ No newline at end of file diff --git a/src/data/object_events/object_event_subsprites.h b/src/data/object_events/object_event_subsprites.h index 808491992739..c57a515478e6 100755 --- a/src/data/object_events/object_event_subsprites.h +++ b/src/data/object_events/object_event_subsprites.h @@ -1,3 +1,6 @@ +#ifndef OBJECT_EVENT_SUBSPRITES_H +#define OBJECT_EVENT_SUBSPRITES_H + static const struct Subsprite sOamTable_16x16_0[] = { { .x = -8, @@ -1528,3 +1531,5 @@ static const struct SubspriteTable sOamTables_88x32[] = { {ARRAY_COUNT(sOamTable_88x32_3), sOamTable_88x32_3}, {ARRAY_COUNT(sOamTable_88x32_3), sOamTable_88x32_3} }; + +#endif \ No newline at end of file diff --git a/src/data/pokemon/level_up_learnset_pointers.h b/src/data/pokemon/level_up_learnset_pointers.h index 661458ce383e..24819a7792bb 100644 --- a/src/data/pokemon/level_up_learnset_pointers.h +++ b/src/data/pokemon/level_up_learnset_pointers.h @@ -1,3 +1,5 @@ +#include "level_up_learnsets.h" + const u16 *const gLevelUpLearnsets[NUM_SPECIES] = { [SPECIES_NONE] = sBulbasaurLevelUpLearnset, diff --git a/src/data/pokemon/level_up_learnsets.h b/src/data/pokemon/level_up_learnsets.h index 212b969a70e0..8d89b01a9596 100644 --- a/src/data/pokemon/level_up_learnsets.h +++ b/src/data/pokemon/level_up_learnsets.h @@ -1,3 +1,6 @@ +#ifndef POKEMON_LEVEL_UP_LEARNSETS_H +#define POKEMON_LEVEL_UP_LEARNSETS_H + #define LEVEL_UP_MOVE(lvl, move) ((lvl << 9) | move) static const u16 sBulbasaurLevelUpLearnset[] = { @@ -5615,3 +5618,5 @@ static const u16 sChimechoLevelUpLearnset[] = { LEVEL_UP_MOVE(46, MOVE_PSYCHIC), LEVEL_UP_END }; + +#endif \ No newline at end of file diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 8a15a18567fc..493859c5017c 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -1,3 +1,6 @@ +#include "pokedex_text.h" +#include "pokedex.h" + const struct PokedexEntry gPokedexEntries[] = { [NATIONAL_DEX_NONE] = diff --git a/src/data/pokemon/pokedex_text.h b/src/data/pokemon/pokedex_text.h index ec4a831f86de..e1bb016577a9 100644 --- a/src/data/pokemon/pokedex_text.h +++ b/src/data/pokemon/pokedex_text.h @@ -1,3 +1,6 @@ +#ifndef POKEMON_POKEDEX_TEXT_H +#define POKEMON_POKEDEX_TEXT_H + const u8 gDummyPokedexText[] = _( "This is a newly discovered POKéMON.\n" "It is currently under investigation.\n" @@ -2319,3 +2322,5 @@ const u8 gDeoxysPokedexText[] = _( "extraterrestrial virus exposed to a laser\n" "beam. Its body is configured for superior\n" "agility and speed."); + +#endif \ No newline at end of file diff --git a/src/data/pokemon_graphics/front_pic_anims.h b/src/data/pokemon_graphics/front_pic_anims.h index 68ceddafad26..262c81ded1e3 100644 --- a/src/data/pokemon_graphics/front_pic_anims.h +++ b/src/data/pokemon_graphics/front_pic_anims.h @@ -1,4 +1,9 @@ -static const union AnimCmd sAnim_None_1[] = +#if CLANGD +#pragma clang diagnostic ignored "-Wtentative-definition-array" +#endif +static const union AnimCmd sAnim_GeneralFrame0[]; + +static const union AnimCmd sAnim_None_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4822,7 +4827,7 @@ static const union AnimCmd *const sAnims_##name[] = \ sAnim_##name##_2, \ } -SINGLE_ANIMATION(None); + SINGLE_ANIMATION(None); SINGLE_ANIMATION(Bulbasaur); SINGLE_ANIMATION(Ivysaur); SINGLE_ANIMATION(Venusaur); diff --git a/src/data/pokemon_graphics/unused_anims.h b/src/data/pokemon_graphics/unused_anims.h index 3d0c283dcaf2..18e617c50d8c 100644 --- a/src/data/pokemon_graphics/unused_anims.h +++ b/src/data/pokemon_graphics/unused_anims.h @@ -1,3 +1,8 @@ +#if CLANGD +#pragma clang diagnostic ignored "-Wtentative-definition-array" +#endif +static const union AnimCmd sAnim_GeneralFrame0[]; + // unused and unkown static const union AnimCmd sUnusedAnim_Blaziken_1[] = { diff --git a/src/data/region_map/city_map_entries.h b/src/data/region_map/city_map_entries.h index 8ff45305931e..dc75feeab69c 100644 --- a/src/data/region_map/city_map_entries.h +++ b/src/data/region_map/city_map_entries.h @@ -1,3 +1,9 @@ +#include "pokenav_region_map.h" + +#if CLANGD +#include "city_map_tilemaps.h" +#endif + static const struct CityMapEntry sPokenavCityMaps[NUM_CITY_MAPS] = { { diff --git a/src/data/region_map/city_map_tilemaps.h b/src/data/region_map/city_map_tilemaps.h index 11a48c15dc41..e105ca7ca9a8 100644 --- a/src/data/region_map/city_map_tilemaps.h +++ b/src/data/region_map/city_map_tilemaps.h @@ -1,3 +1,6 @@ +#ifndef REGION_MAP_CITY_TILEMAPS_H +#define REGION_MAP_CITY_TILEMAPS_H + const u32 gPokenavCityMap_Lavaridge_0[] = INCBIN_U32("graphics/pokenav/region_map/city_maps/lavaridge_0.bin.lz"); const u32 gPokenavCityMap_Fallarbor_0[] = INCBIN_U32("graphics/pokenav/region_map/city_maps/fallarbor_0.bin.lz"); const u32 gPokenavCityMap_Fortree_0[] = INCBIN_U32("graphics/pokenav/region_map/city_maps/fortree_0.bin.lz"); @@ -20,3 +23,5 @@ const u32 gPokenavCityMap_Verdanturf_0[] = INCBIN_U32("graphics/pokenav/region_m const u32 gPokenavCityMap_Mossdeep_1[] = INCBIN_U32("graphics/pokenav/region_map/city_maps/mossdeep_1.bin.lz"); const u32 gPokenavCityMap_Mossdeep_0[] = INCBIN_U32("graphics/pokenav/region_map/city_maps/mossdeep_0.bin.lz"); const u32 gPokenavCityMap_Petalburg_0[] = INCBIN_U32("graphics/pokenav/region_map/city_maps/petalburg_0.bin.lz"); + +#endif \ No newline at end of file diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 3f8594945ee2..773b091afa6c 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -32,20 +32,6 @@ // this file was known as evobjmv.c in Game Freak's original source -enum { - MOVE_SPEED_NORMAL, // walking - MOVE_SPEED_FAST_1, // running / surfing / sliding (ice tile) - MOVE_SPEED_FAST_2, // water current / acro bike - MOVE_SPEED_FASTER, // mach bike's max speed - MOVE_SPEED_FASTEST, -}; - -enum { - JUMP_DISTANCE_IN_PLACE, - JUMP_DISTANCE_NORMAL, - JUMP_DISTANCE_FAR, -}; - // Sprite data used throughout #define sObjEventId data[0] #define sTypeFuncId data[1] // Index into corresponding gMovementTypeFuncs_* table @@ -421,44 +407,6 @@ const u8 gInitialMovementTypeFacingDirections[] = { [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT] = DIR_EAST, }; -#define OBJ_EVENT_PAL_TAG_BRENDAN 0x1100 -#define OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION 0x1101 -#define OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION 0x1102 -#define OBJ_EVENT_PAL_TAG_NPC_1 0x1103 -#define OBJ_EVENT_PAL_TAG_NPC_2 0x1104 -#define OBJ_EVENT_PAL_TAG_NPC_3 0x1105 -#define OBJ_EVENT_PAL_TAG_NPC_4 0x1106 -#define OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION 0x1107 -#define OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION 0x1108 -#define OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION 0x1109 -#define OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION 0x110A -#define OBJ_EVENT_PAL_TAG_QUINTY_PLUMP 0x110B -#define OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION 0x110C -#define OBJ_EVENT_PAL_TAG_TRUCK 0x110D -#define OBJ_EVENT_PAL_TAG_VIGOROTH 0x110E -#define OBJ_EVENT_PAL_TAG_ZIGZAGOON 0x110F -#define OBJ_EVENT_PAL_TAG_MAY 0x1110 -#define OBJ_EVENT_PAL_TAG_MAY_REFLECTION 0x1111 -#define OBJ_EVENT_PAL_TAG_MOVING_BOX 0x1112 -#define OBJ_EVENT_PAL_TAG_CABLE_CAR 0x1113 -#define OBJ_EVENT_PAL_TAG_SSTIDAL 0x1114 -#define OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER 0x1115 -#define OBJ_EVENT_PAL_TAG_KYOGRE 0x1116 -#define OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION 0x1117 -#define OBJ_EVENT_PAL_TAG_GROUDON 0x1118 -#define OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION 0x1119 -#define OBJ_EVENT_PAL_TAG_UNUSED 0x111A -#define OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW 0x111B -#define OBJ_EVENT_PAL_TAG_POOCHYENA 0x111C -#define OBJ_EVENT_PAL_TAG_RED_LEAF 0x111D -#define OBJ_EVENT_PAL_TAG_DEOXYS 0x111E -#define OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE 0x111F -#define OBJ_EVENT_PAL_TAG_HO_OH 0x1120 -#define OBJ_EVENT_PAL_TAG_LUGIA 0x1121 -#define OBJ_EVENT_PAL_TAG_RS_BRENDAN 0x1122 -#define OBJ_EVENT_PAL_TAG_RS_MAY 0x1123 -#define OBJ_EVENT_PAL_TAG_NONE 0x11FF - #include "data/object_events/object_event_graphics_info_pointers.h" #include "data/field_effects/field_effect_object_template_pointers.h" #include "data/object_events/object_event_pic_tables.h" @@ -8888,7 +8836,7 @@ static void CreateLevitateMovementTask(struct ObjectEvent *objectEvent) u8 taskId = CreateTask(ApplyLevitateMovement, 0xFF); struct Task *task = &gTasks[taskId]; - StoreWordInTwoHalfwords(&task->data[0], (u32)objectEvent); + StoreWordInTwoHalfwords((u16*)&task->data[0], (u32)objectEvent); objectEvent->warpArrowSpriteId = taskId; task->data[3] = 0xFFFF; } @@ -8899,7 +8847,7 @@ static void ApplyLevitateMovement(u8 taskId) struct Sprite *sprite; struct Task *task = &gTasks[taskId]; - LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // load the map object pointer. + LoadWordFromTwoHalfwords((u16*)&task->data[0], (u32 *)&objectEvent); // load the map object pointer. sprite = &gSprites[objectEvent->spriteId]; if(!(task->data[2] & 3)) @@ -8916,7 +8864,7 @@ static void DestroyLevitateMovementTask(u8 taskId) struct ObjectEvent *objectEvent; struct Task *task = &gTasks[taskId]; - LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // unused objectEvent + LoadWordFromTwoHalfwords((u16*)&task->data[0], (u32 *)&objectEvent); // unused objectEvent DestroyTask(taskId); } diff --git a/src/field_door.c b/src/field_door.c index 908a65a453ea..ae67fae9c42a 100644 --- a/src/field_door.c +++ b/src/field_door.c @@ -412,7 +412,7 @@ static void Task_AnimateDoor(u8 taskId) struct DoorAnimFrame *frames = (struct DoorAnimFrame *)(tFramesHi << 16 | tFramesLo); struct DoorGraphics *gfx = (struct DoorGraphics *)(tGfxHi << 16 | tGfxLo); - if (AnimateDoorFrame(gfx, frames, data) == FALSE) + if (AnimateDoorFrame(gfx, frames, (s16*)data) == FALSE) DestroyTask(taskId); } diff --git a/src/field_effect.c b/src/field_effect.c index 5dcc4b3c080e..a3a77ee9a270 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2615,7 +2615,7 @@ static void FieldMoveShowMonOutdoorsEffect_Init(struct Task *task) task->data[11] = REG_WININ; task->data[12] = REG_WINOUT; StoreWordInTwoHalfwords((u16*) &task->data[13], (u32)gMain.vblankCallback); - task->tWinHoriz = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1); + task->tWinHoriz = (s16) WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1); task->tWinVert = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1); task->tWinIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; task->tWinOut = WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; diff --git a/src/field_special_scene.c b/src/field_special_scene.c index a2b3d6366fa7..826257959549 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -280,7 +280,7 @@ void EndTruckSequence(u8 taskId) bool8 TrySetPortholeWarpDestination(void) { - s8 mapGroup, mapNum; + u8 mapGroup, mapNum; s16 x, y; if (GetSSTidalLocation(&mapGroup, &mapNum, &x, &y) != SS_TIDAL_LOCATION_CURRENTS) diff --git a/src/field_specials.c b/src/field_specials.c index 43d07356aa0b..a1b250c7abc1 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -293,7 +293,7 @@ bool32 CountSSTidalStep(u16 delta) return TRUE; } -u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y) +u8 GetSSTidalLocation(u8 *mapGroup, u8 *mapNum, s16 *x, s16 *y) { u16 *varCruiseStepCount = GetVarPointer(VAR_CRUISE_STEP_COUNT); switch (*GetVarPointer(VAR_SS_TIDAL_STATE)) diff --git a/src/field_weather.c b/src/field_weather.c index bc86bcdc7d7b..3b20ed0487f9 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -864,7 +864,7 @@ void LoadCustomWeatherSpritePalette(const u16 *palette) UpdateSpritePaletteWithWeather(gWeatherPtr->weatherPicSpritePalIndex); } -static void LoadDroughtWeatherPalette(u8 *palsIndex, u8 *palsOffset) +static void LoadDroughtWeatherPalette(s8 *palsIndex, s8 *palsOffset) { *palsIndex = 0x20; *palsOffset = 0x20; diff --git a/src/fieldmap.c b/src/fieldmap.c index 8c0e416f4576..5591c270c8c0 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -805,7 +805,7 @@ static void UNUSED SetCameraCoords(u16 x, u16 y) gSaveBlock1Ptr->pos.y = y; } -void GetCameraCoords(u16 *x, u16 *y) +void GetCameraCoords(s16 *x, s16 *y) { *x = gSaveBlock1Ptr->pos.x; *y = gSaveBlock1Ptr->pos.y; diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 91850ec72e69..f100c13bd53d 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -1478,7 +1478,7 @@ static void UpdateDomeConfetti(struct ConfettiUtil *util) static void Task_DoDomeConfetti(u8 taskId) { u32 id = 0; - u16 *data = gTasks[taskId].data; + u16 *data = (u16*) gTasks[taskId].data; switch (tState) { diff --git a/src/lilycove_lady.c b/src/lilycove_lady.c index e7a5862f074b..e38eeefd2780 100644 --- a/src/lilycove_lady.c +++ b/src/lilycove_lady.c @@ -34,8 +34,6 @@ static EWRAM_DATA struct LilycoveLadyFavor *sFavorLadyPtr = NULL; static EWRAM_DATA struct LilycoveLadyQuiz *sQuizLadyPtr = NULL; static EWRAM_DATA struct LilycoveLadyContest *sContestLadyPtr = NULL; -extern EWRAM_DATA u16 gSpecialVar_ItemId; - u8 GetLilycoveLadyId(void) { return gSaveBlock1Ptr->lilycoveLady.id; diff --git a/src/list_menu.c b/src/list_menu.c index 91e34cd1b2ab..44521253e798 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -1261,17 +1261,17 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st s32 i, j, id = 0; subsprites[id] = sSubsprite_RedOutline1; - subsprites[id].x = 136; - subsprites[id].y = 136; + subsprites[id].x = (s8) 136; + subsprites[id].y = (s8) 136; id++; subsprites[id] = sSubsprite_RedOutline2; subsprites[id].x = rowWidth + 128; - subsprites[id].y = 136; + subsprites[id].y = (s8) 136; id++; subsprites[id] = sSubsprite_RedOutline7; - subsprites[id].x = 136; + subsprites[id].x = (s8) 136; subsprites[id].y = rowHeight + 128; id++; @@ -1301,7 +1301,7 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st for (j = 8; j < rowHeight - 8; j += 8) { subsprites[id] = sSubsprite_RedOutline4; - subsprites[id].x = 136; + subsprites[id].x = (s8) 136; subsprites[id].y = j - 120; id++; diff --git a/src/m4a.c b/src/m4a.c index 9caedd34a061..a10f35951e3f 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -1,6 +1,10 @@ #include #include "gba/m4a_internal.h" +#ifdef CLANGD +#pragma clang diagnostic ignored "-Wdeprecated-non-prototype" +#endif + extern const u8 gCgb3Vol[]; #define BSS_CODE __attribute__((section(".bss.code"))) diff --git a/src/m4a_tables.c b/src/m4a_tables.c index 4d012cea2820..0b64b873358e 100644 --- a/src/m4a_tables.c +++ b/src/m4a_tables.c @@ -1,5 +1,7 @@ #include "gba/m4a_internal.h" +#undef MOD // modulo macro from global.h + // Some of these functions have different signatures, so we need to make this // an array of void pointers or a struct. It's simpler to just make it an array // for now. @@ -243,7 +245,7 @@ const u8 gClockTable[] = #define BENDR 0xc1 #define LFOS 0xc2 #define LFODL 0xc3 -#define MOD 0xc4 +#define MOD 0xc4 #define MODT 0xc5 #define TUNE 0xc8 diff --git a/src/main.c b/src/main.c index 29c026624dfe..69fced66b177 100644 --- a/src/main.c +++ b/src/main.c @@ -61,7 +61,7 @@ static u16 sUnusedVar; // Never read COMMON_DATA u16 gKeyRepeatStartDelay = 0; COMMON_DATA bool8 gLinkTransferringData = 0; -COMMON_DATA struct Main gMain = {0}; +COMMON_DATA struct Main ALIGNED(8) gMain = {0}; COMMON_DATA u16 gKeyRepeatContinueDelay = 0; COMMON_DATA bool8 gSoftResetDisabled = 0; COMMON_DATA IntrFunc gIntrTable[INTR_COUNT] = {0}; diff --git a/src/main_menu.c b/src/main_menu.c index 10b34728b364..2d47e84b1675 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -237,7 +237,7 @@ static void SpriteCB_MovePlayerDownWhileShrinking(struct Sprite *); static void Task_NewGameBirchSpeech_WaitForPlayerShrink(u8); static void Task_NewGameBirchSpeech_FadePlayerToWhite(u8); static void Task_NewGameBirchSpeech_Cleanup(u8); -static void SpriteCB_Null(); +static void SpriteCB_Null(struct Sprite*); static void Task_NewGameBirchSpeech_ReturnFromNamingScreenShowTextbox(u8); static void MainMenu_FormatSavegamePlayer(void); static void MainMenu_FormatSavegamePokedex(void); diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 1272277aa550..7b876cd32941 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -1510,7 +1510,7 @@ static const u8 *const sLvlUpStatStrings[NUM_STATS] = gText_Speed }; -void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr) +void DrawLevelUpWindowPg1(u16 windowId, s16 *statsBefore, s16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr) { u16 i, x; s16 statsDiff[NUM_STATS]; @@ -1565,7 +1565,7 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bg } } -void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr) +void DrawLevelUpWindowPg2(u16 windowId, s16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr) { u16 i, numDigits, x; s16 stats[NUM_STATS]; diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 10871b5853d7..227692829dea 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -164,10 +164,10 @@ const struct PulseBlendSettings gMirageTowerPulseBlendSettings = { .numColors = 15, .delay = 5, .numFadeCycles = -1, - .maxBlendCoeff = 11, + .maxBlendCoeff = -5, .fadeType = 1, .restorePaletteOnUnload = FALSE, - .unk7_7 = 1, + .unk7_7 = -1, }; static const union AnimCmd sAnim_CeilingCrumbleSmall[] = diff --git a/src/overworld.c b/src/overworld.c index 355c776a268e..cff2e9f9178c 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -131,7 +131,7 @@ static void UpdateAllLinkPlayers(u16 *, s32); static u8 FlipVerticalAndClearForced(u8, u8); static u8 LinkPlayerGetCollision(u8, u8, s16, s16); static void CreateLinkPlayerSprite(u8, u8); -static void GetLinkPlayerCoords(u8, u16 *, u16 *); +static void GetLinkPlayerCoords(u8, s16 *, s16 *); static u8 GetLinkPlayerFacingDirection(u8); static u8 GetLinkPlayerElevation(u8); static u8 GetLinkPlayerIdAt(s16, s16); @@ -2995,7 +2995,7 @@ static u8 GetSpriteForLinkedPlayer(u8 linkPlayerId) return objEvent->spriteId; } -static void GetLinkPlayerCoords(u8 linkPlayerId, u16 *x, u16 *y) +static void GetLinkPlayerCoords(u8 linkPlayerId, s16 *x, s16 *y) { u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId; struct ObjectEvent *objEvent = &gObjectEvents[objEventId]; diff --git a/src/player_pc.c b/src/player_pc.c index 81170a86c920..81da5b88cf73 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -392,7 +392,7 @@ void PlayerPC(void) static void InitPlayerPCMenu(u8 taskId) { - u16 *data; + s16 *data; struct WindowTemplate windowTemplate; data = gTasks[taskId].data; @@ -412,7 +412,7 @@ static void InitPlayerPCMenu(u8 taskId) static void PlayerPCProcessMenuInput(u8 taskId) { - u16 *data; + s16 *data; s8 inputOptionId; data = gTasks[taskId].data; @@ -507,7 +507,7 @@ static void PlayerPC_TurnOff(u8 taskId) static void InitItemStorageMenu(u8 taskId, u8 var) { - u16 *data; + s16 *data; struct WindowTemplate windowTemplate; data = gTasks[taskId].data; @@ -625,7 +625,7 @@ static void ItemStorage_Toss(u8 taskId) static void ItemStorage_Enter(u8 taskId, bool8 toss) { - u16 *data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; tInTossMenu = toss; ItemStorage_EraseMainMenu(taskId); @@ -658,7 +658,7 @@ static void SetPlayerPCListCount(u8 taskId) static void ItemStorage_EraseMainMenu(u8 taskId) { - u16 *data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; ClearStdWindowAndFrameToTransparent(tWindowId, FALSE); ClearWindowTilemap(tWindowId); RemoveWindow(tWindowId); @@ -704,7 +704,7 @@ static void Mailbox_DrawMailboxMenu(u8 taskId) static void Mailbox_ProcessInput(u8 taskId) { - u16 *data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { diff --git a/src/pokedex.c b/src/pokedex.c index 030020df8913..b92911064817 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -850,7 +850,6 @@ static const u8 sText_TenDashes[] = _("----------"); ALIGNED(4) static const u8 sExpandedPlaceholder_PokedexDescription[] = _(""); -#include "data/pokemon/pokedex_text.h" #include "data/pokemon/pokedex_entries.h" static const u16 sSizeScreenSilhouette_Pal[] = INCBIN_U16("graphics/pokedex/size_silhouette.gbapal"); @@ -5137,11 +5136,11 @@ static void Task_SelectSearchMenuItem(u8 taskId) { u8 menuItem; u16 *cursorPos; - u16 *scrollOffset; + s16 *scrollOffset; // should also DrawOrEraseSearchParameterBox(FALSE); menuItem = gTasks[taskId].tMenuItem; - cursorPos = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; + cursorPos = (u16*) &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; gTasks[taskId].tCursorPos = *cursorPos; gTasks[taskId].tScrollOffset = *scrollOffset; @@ -5164,8 +5163,8 @@ static void Task_HandleSearchParameterInput(u8 taskId) menuItem = gTasks[taskId].tMenuItem; texts = sSearchOptions[menuItem].texts; - cursorPos = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; - scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + cursorPos = (u16*) &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; + scrollOffset = (u16*) &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; maxOption = sSearchOptions[menuItem].numOptions - 1; if (JOY_NEW(A_BUTTON)) { @@ -5475,8 +5474,8 @@ static void DrawOrEraseSearchParameterBox(bool8 erase) static void PrintSearchParameterText(u8 taskId) { const struct SearchOptionText *texts = sSearchOptions[gTasks[taskId].tMenuItem].texts; - const u16 *cursorPos = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataCursorPos]; - const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataScrollOffset]; + const u16 *cursorPos = (u16*) &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataCursorPos]; + const u16 *scrollOffset = (u16*) &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataScrollOffset]; u16 i; u16 j; @@ -5490,8 +5489,8 @@ static void PrintSearchParameterText(u8 taskId) static u8 GetSearchModeSelection(u8 taskId, u8 option) { - const u16 *cursorPos = &gTasks[taskId].data[sSearchOptions[option].taskDataCursorPos]; - const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[option].taskDataScrollOffset]; + const s16 *cursorPos = &gTasks[taskId].data[sSearchOptions[option].taskDataCursorPos]; + const s16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[option].taskDataScrollOffset]; u16 id = *cursorPos + *scrollOffset; switch (option) @@ -5562,7 +5561,7 @@ static void SetDefaultSearchModeAndOrder(u8 taskId) static bool8 SearchParamCantScrollUp(u8 taskId) { u8 menuItem = gTasks[taskId].tMenuItem; - const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + const u16 *scrollOffset = (u16*) &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; u16 lastOption = sSearchOptions[menuItem].numOptions - 1; if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset != 0) @@ -5574,7 +5573,7 @@ static bool8 SearchParamCantScrollUp(u8 taskId) static bool8 SearchParamCantScrollDown(u8 taskId) { u8 menuItem = gTasks[taskId].tMenuItem; - const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + const u16 *scrollOffset = (u16*) &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; u16 lastOption = sSearchOptions[menuItem].numOptions - 1; if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset < lastOption - MAX_SEARCH_PARAM_CURSOR_POS) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index b9caa364b147..bcbe983bee99 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -9453,7 +9453,7 @@ u32 GetBoxMonLevelAt(u8 boxId, u8 boxPosition) #ifdef BUGFIX else #endif - lvl = 0; + lvl = 0; // NOLINT(readability-misleading-indentation) return lvl; } diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index f81ff4296639..97d5fdf75680 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -13,6 +13,7 @@ #include "task.h" #include "text_window.h" #include "window.h" +#include "pokenav_region_map.h" #include "constants/rgb.h" #include "constants/songs.h" #include "constants/region_map_sections.h" @@ -20,8 +21,6 @@ #define GFXTAG_CITY_ZOOM 6 #define PALTAG_CITY_ZOOM 11 -#define NUM_CITY_MAPS 22 - struct Pokenav_RegionMapMenu { u8 unused[12]; @@ -39,13 +38,6 @@ struct Pokenav_RegionMapGfx u8 cityZoomPics[NUM_CITY_MAPS][200]; }; -struct CityMapEntry -{ - u16 mapSecId; - u16 index; - const u32 *tilemap; -}; - static u32 HandleRegionMapInput(struct Pokenav_RegionMapMenu *); static u32 HandleRegionMapInputZoomDisabled(struct Pokenav_RegionMapMenu *); static u32 GetExitRegionMapMenuId(struct Pokenav_RegionMapMenu *); diff --git a/src/record_mixing.c b/src/record_mixing.c index c5d915a9dbcc..cd314e4ea430 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -108,8 +108,8 @@ static void Task_MixingRecordsRecv(u8); static void Task_SendPacket(u8); static void Task_CopyReceiveBuffer(u8); static void Task_SendPacket_SwitchToReceive(u8); -static void *LoadPtrFromTaskData(const u16 *); -static void StorePtrInTaskData(void *, u16 *); +static void *LoadPtrFromTaskData(const s16 *); +static void StorePtrInTaskData(void *, s16 *); static u8 GetMultiplayerId_(void); static void *GetPlayerRecvBuffer(u8); static void ReceiveOldManData(OldMan *, size_t, u8); @@ -580,12 +580,12 @@ static void Task_SendPacket_SwitchToReceive(u8 taskId) sReadyToReceive = TRUE; } -static void *LoadPtrFromTaskData(const u16 *asShort) +static void *LoadPtrFromTaskData(const s16 *asShort) { - return (void *)(asShort[0] | (asShort[1] << 16)); + return (void *)((u16)asShort[0] | ((u16)asShort[1] << 16)); } -static void StorePtrInTaskData(void *records, u16 *asShort) +static void StorePtrInTaskData(void *records, s16 *asShort) { asShort[0] = (u32)records; asShort[1] = ((u32)records >> 16); diff --git a/src/region_map.c b/src/region_map.c index 8fa53a0e7b98..fc1cc568bff6 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -38,15 +38,6 @@ * */ -#define MAP_WIDTH 28 -#define MAP_HEIGHT 15 -#define MAPCURSOR_X_MIN 1 -#define MAPCURSOR_Y_MIN 2 -#define MAPCURSOR_X_MAX (MAPCURSOR_X_MIN + MAP_WIDTH - 1) -#define MAPCURSOR_Y_MAX (MAPCURSOR_Y_MIN + MAP_HEIGHT - 1) - -#define FLYDESTICON_RED_OUTLINE 6 - enum { TAG_CURSOR, TAG_PLAYER_ICON, diff --git a/src/roulette.c b/src/roulette.c index f4e6012a8dcd..456323ddf71e 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -40,7 +40,7 @@ #define NUM_ROULETTE_SLOTS (NUM_BOARD_COLORS * NUM_BOARD_POKES) // The degree change between each slot on the roulette wheel -#define DEGREES_PER_SLOT (360 / NUM_ROULETTE_SLOTS) +#define DEGREES_PER_SLOT ((u16)(360 / NUM_ROULETTE_SLOTS)) // Where in the slot the ball will drop when landing #define SLOT_MIDPOINT (DEGREES_PER_SLOT / 2 - 1) diff --git a/src/scrcmd.c b/src/scrcmd.c index 218be539f56c..d78d17ad911f 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -782,8 +782,8 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); - u16 x; - u16 y; + s16 x; + s16 y; PlayerGetDestCoords(&x, &y); if (mapGroup == MAP_GROUP(UNDEFINED) && mapNum == MAP_NUM(UNDEFINED)) diff --git a/src/secret_base.c b/src/secret_base.c index 9509cd0fc5c2..c45b25a8404f 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -298,7 +298,7 @@ void GetSecretBaseTypeInFrontOfPlayer(void) gSpecialVar_0x8007 = GetSecretBaseTypeInFrontOfPlayer_(); } -static void FindMetatileIdMapCoords(s16 *x, s16 *y, u16 metatileId) +static void FindMetatileIdMapCoords(u16 *x, u16 *y, u16 metatileId) { s16 i, j; const struct MapLayout *mapLayout = gMapHeader.mapLayout; @@ -474,7 +474,7 @@ static void EnterNewlyCreatedSecretBase_StartFadeIn(void) LockPlayerFieldControls(); HideMapNamePopUpWindow(); - FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC); + FindMetatileIdMapCoords((u16 *)&x, (u16 *)&y, METATILE_SecretBase_PC); x += MAP_OFFSET; y += MAP_OFFSET; MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | MAPGRID_COLLISION_MASK); @@ -987,14 +987,14 @@ static void FinalizeRegistryMenu(u8 taskId) static void AddRegistryMenuScrollArrows(u8 taskId) { s16 *data = gTasks[taskId].data; - tArrowTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 188, 12, 148, tNumBases - tMaxShownItems, TAG_SCROLL_ARROW, TAG_SCROLL_ARROW, &tScrollOffset); + tArrowTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 188, 12, 148, tNumBases - tMaxShownItems, TAG_SCROLL_ARROW, TAG_SCROLL_ARROW, (u16*)&tScrollOffset); } static void HandleRegistryMenuInput(u8 taskId) { s16 *data = gTasks[taskId].data; s32 input = ListMenu_ProcessInput(tListTaskId); - ListMenuGetScrollAndRow(tListTaskId, &tScrollOffset, &tSelectedRow); + ListMenuGetScrollAndRow(tListTaskId, (u16 *)&tScrollOffset, (u16 *)&tSelectedRow); switch (input) { @@ -1076,10 +1076,10 @@ void DeleteRegistry_Yes_Callback(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrame(0, FALSE); - DestroyListMenuTask(tListTaskId, &tScrollOffset, &tSelectedRow); + DestroyListMenuTask(tListTaskId, (u16 *)&tScrollOffset, (u16 *)&tSelectedRow); gSaveBlock1Ptr->secretBases[tSelectedBaseId].registryStatus = UNREGISTERED; BuildRegistryMenuItems(taskId); - SetCursorWithinListBounds(&tScrollOffset, &tSelectedRow, tMaxShownItems, tNumBases); + SetCursorWithinListBounds((u16 *)&tScrollOffset, (u16 *)&tSelectedRow, tMaxShownItems, tNumBases); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; } @@ -1093,7 +1093,7 @@ static void DeleteRegistry_No(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrame(0, FALSE); - DestroyListMenuTask(tListTaskId, &tScrollOffset, &tSelectedRow); + DestroyListMenuTask(tListTaskId, (u16 *)&tScrollOffset, (u16*)&tSelectedRow); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; } diff --git a/src/slot_machine.c b/src/slot_machine.c index 217767fc9e98..999f1e9bca39 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -1116,7 +1116,8 @@ static void PlaySlotMachine_Internal(u8 machineId, MainCallback exitCallback) { struct Task *task = &gTasks[CreateTask(SlotMachineDummyTask, 0xFF)]; task->tMachineId = machineId; - StoreWordInTwoHalfwords(&task->tExitCallback, (intptr_t)exitCallback); + StoreWordInTwoHalfwords((u16 *)&task->tExitCallback, + (intptr_t)exitCallback); } // Extracts and assigns machineId and exit callback from task. diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 993e36de524a..6504eaaa2dad 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -1953,7 +1953,7 @@ static u8 *GetLimitedMessageStartPtr(void) for (i = 0; i < numChars; i++) { if (*str == CHAR_EXTRA_SYMBOL) - *str++; + str++; str++; } diff --git a/src/util.c b/src/util.c index 09381fcaf317..833106fd5a13 100644 --- a/src/util.c +++ b/src/util.c @@ -124,16 +124,12 @@ u8 CreateInvisibleSpriteWithCallback(void (*callback)(struct Sprite *)) return sprite; } -void StoreWordInTwoHalfwords(u16 *h, u32 w) -{ - h[0] = (u16)(w); - h[1] = (u16)(w >> 16); +void StoreWordInTwoHalfwords(u16 *h, u32 w) { + h[0] = (u16)(w); + h[1] = (u16)(w >> 16); } -void LoadWordFromTwoHalfwords(u16 *h, u32 *w) -{ - *w = h[0] | (s16)h[1] << 16; -} +void LoadWordFromTwoHalfwords(u16 *h, u32 *w) { *w = h[0] | (s16)h[1] << 16; } void SetBgAffineStruct(struct BgAffineSrcData *src, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha) { From 70a320a3e97a9bc4340332dace93ece9d70f3a34 Mon Sep 17 00:00:00 2001 From: Jendrik Date: Mon, 21 Apr 2025 15:15:23 +0200 Subject: [PATCH 2/5] undo accidential formatting and clean up unused code --- include/main.h | 1 - src/battle_anim_effects_1.c | 9 +-------- src/battle_script_commands.c | 4 ++-- src/data/pokemon_graphics/front_pic_anims.h | 2 +- src/field_effect.c | 2 +- src/hall_of_fame.c | 2 +- src/list_menu.c | 10 +++++----- src/m4a_tables.c | 2 +- src/pokedex.c | 16 ++++++++-------- src/pokemon_storage_system.c | 2 +- 10 files changed, 21 insertions(+), 29 deletions(-) diff --git a/include/main.h b/include/main.h index 1466f3c1ee1d..6380770e855c 100644 --- a/include/main.h +++ b/include/main.h @@ -1,7 +1,6 @@ #ifndef GUARD_MAIN_H #define GUARD_MAIN_H -#include typedef void (*MainCallback)(void); typedef void (*IntrCallback)(void); typedef void (*IntrFunc)(void); diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 791e066ef0e2..9060ccd0fdcd 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -4452,14 +4452,7 @@ static void AnimBowMon_Step1_Callback(struct Sprite *sprite) { sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; PrepareBattlerSpriteForRotScale(sprite->data[3], ST_OAM_OBJ_NORMAL); -#ifdef CLANGD -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wconstant-conversion" -#endif - sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : 0xFFFFFD00; -#ifdef CLANGD -#pragma clang diagnostic pop -#endif + sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : -0x300; sprite->data[5] = 0; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8c7f7687f33a..9ba31ec96bab 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2669,7 +2669,7 @@ void SetMoveEffect(bool8 primary, u8 certain) case MOVE_EFFECT_SP_DEF_MINUS_1: case MOVE_EFFECT_ACC_MINUS_1: case MOVE_EFFECT_EVS_MINUS_1: - if (ChangeStatBuffs((s8) (SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE), + if (ChangeStatBuffs((s8)(SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE), gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_MINUS_1 + 1, affectsUser, 0)) { @@ -2711,7 +2711,7 @@ void SetMoveEffect(bool8 primary, u8 certain) case MOVE_EFFECT_SP_DEF_MINUS_2: case MOVE_EFFECT_ACC_MINUS_2: case MOVE_EFFECT_EVS_MINUS_2: - if (ChangeStatBuffs((s8) (SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE), + if (ChangeStatBuffs((s8)(SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE), gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_MINUS_2 + 1, affectsUser, 0)) { diff --git a/src/data/pokemon_graphics/front_pic_anims.h b/src/data/pokemon_graphics/front_pic_anims.h index 262c81ded1e3..2b01a0cfcad4 100644 --- a/src/data/pokemon_graphics/front_pic_anims.h +++ b/src/data/pokemon_graphics/front_pic_anims.h @@ -4827,7 +4827,7 @@ static const union AnimCmd *const sAnims_##name[] = \ sAnim_##name##_2, \ } - SINGLE_ANIMATION(None); +SINGLE_ANIMATION(None); SINGLE_ANIMATION(Bulbasaur); SINGLE_ANIMATION(Ivysaur); SINGLE_ANIMATION(Venusaur); diff --git a/src/field_effect.c b/src/field_effect.c index a3a77ee9a270..e4cc00035e72 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2615,7 +2615,7 @@ static void FieldMoveShowMonOutdoorsEffect_Init(struct Task *task) task->data[11] = REG_WININ; task->data[12] = REG_WINOUT; StoreWordInTwoHalfwords((u16*) &task->data[13], (u32)gMain.vblankCallback); - task->tWinHoriz = (s16) WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1); + task->tWinHoriz = (s16)WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1); task->tWinVert = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1); task->tWinIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; task->tWinOut = WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index f100c13bd53d..ad1bbc816452 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -1478,7 +1478,7 @@ static void UpdateDomeConfetti(struct ConfettiUtil *util) static void Task_DoDomeConfetti(u8 taskId) { u32 id = 0; - u16 *data = (u16*) gTasks[taskId].data; + u16 *data = (u16*)gTasks[taskId].data; switch (tState) { diff --git a/src/list_menu.c b/src/list_menu.c index 44521253e798..aeda3d60d2b3 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -1261,17 +1261,17 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st s32 i, j, id = 0; subsprites[id] = sSubsprite_RedOutline1; - subsprites[id].x = (s8) 136; - subsprites[id].y = (s8) 136; + subsprites[id].x = (s8)136; + subsprites[id].y = (s8)136; id++; subsprites[id] = sSubsprite_RedOutline2; subsprites[id].x = rowWidth + 128; - subsprites[id].y = (s8) 136; + subsprites[id].y = (s8)136; id++; subsprites[id] = sSubsprite_RedOutline7; - subsprites[id].x = (s8) 136; + subsprites[id].x = (s8)136; subsprites[id].y = rowHeight + 128; id++; @@ -1301,7 +1301,7 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st for (j = 8; j < rowHeight - 8; j += 8) { subsprites[id] = sSubsprite_RedOutline4; - subsprites[id].x = (s8) 136; + subsprites[id].x = (s8)136; subsprites[id].y = j - 120; id++; diff --git a/src/m4a_tables.c b/src/m4a_tables.c index 0b64b873358e..735b3aa93ccc 100644 --- a/src/m4a_tables.c +++ b/src/m4a_tables.c @@ -245,7 +245,7 @@ const u8 gClockTable[] = #define BENDR 0xc1 #define LFOS 0xc2 #define LFODL 0xc3 -#define MOD 0xc4 +#define MOD 0xc4 #define MODT 0xc5 #define TUNE 0xc8 diff --git a/src/pokedex.c b/src/pokedex.c index b92911064817..be3172d1054e 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -5136,11 +5136,11 @@ static void Task_SelectSearchMenuItem(u8 taskId) { u8 menuItem; u16 *cursorPos; - s16 *scrollOffset; // should also + s16 *scrollOffset; DrawOrEraseSearchParameterBox(FALSE); menuItem = gTasks[taskId].tMenuItem; - cursorPos = (u16*) &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; + cursorPos = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; gTasks[taskId].tCursorPos = *cursorPos; gTasks[taskId].tScrollOffset = *scrollOffset; @@ -5163,8 +5163,8 @@ static void Task_HandleSearchParameterInput(u8 taskId) menuItem = gTasks[taskId].tMenuItem; texts = sSearchOptions[menuItem].texts; - cursorPos = (u16*) &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; - scrollOffset = (u16*) &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + cursorPos = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; + scrollOffset = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; maxOption = sSearchOptions[menuItem].numOptions - 1; if (JOY_NEW(A_BUTTON)) { @@ -5474,8 +5474,8 @@ static void DrawOrEraseSearchParameterBox(bool8 erase) static void PrintSearchParameterText(u8 taskId) { const struct SearchOptionText *texts = sSearchOptions[gTasks[taskId].tMenuItem].texts; - const u16 *cursorPos = (u16*) &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataCursorPos]; - const u16 *scrollOffset = (u16*) &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataScrollOffset]; + const u16 *cursorPos = (u16*)&gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataCursorPos]; + const u16 *scrollOffset = (u16*)&gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataScrollOffset]; u16 i; u16 j; @@ -5561,7 +5561,7 @@ static void SetDefaultSearchModeAndOrder(u8 taskId) static bool8 SearchParamCantScrollUp(u8 taskId) { u8 menuItem = gTasks[taskId].tMenuItem; - const u16 *scrollOffset = (u16*) &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + const u16 *scrollOffset = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; u16 lastOption = sSearchOptions[menuItem].numOptions - 1; if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset != 0) @@ -5573,7 +5573,7 @@ static bool8 SearchParamCantScrollUp(u8 taskId) static bool8 SearchParamCantScrollDown(u8 taskId) { u8 menuItem = gTasks[taskId].tMenuItem; - const u16 *scrollOffset = (u16*) &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + const u16 *scrollOffset = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; u16 lastOption = sSearchOptions[menuItem].numOptions - 1; if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset < lastOption - MAX_SEARCH_PARAM_CURSOR_POS) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index bcbe983bee99..57ff7008848e 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -9453,7 +9453,7 @@ u32 GetBoxMonLevelAt(u8 boxId, u8 boxPosition) #ifdef BUGFIX else #endif - lvl = 0; // NOLINT(readability-misleading-indentation) + lvl = 0; return lvl; } From ec4b72bdb6b7419ad11a32572bab8217532cadcf Mon Sep 17 00:00:00 2001 From: Jendrik Date: Mon, 21 Apr 2025 15:17:14 +0200 Subject: [PATCH 3/5] revert more formatting changes --- src/util.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/util.c b/src/util.c index 833106fd5a13..09381fcaf317 100644 --- a/src/util.c +++ b/src/util.c @@ -124,12 +124,16 @@ u8 CreateInvisibleSpriteWithCallback(void (*callback)(struct Sprite *)) return sprite; } -void StoreWordInTwoHalfwords(u16 *h, u32 w) { - h[0] = (u16)(w); - h[1] = (u16)(w >> 16); +void StoreWordInTwoHalfwords(u16 *h, u32 w) +{ + h[0] = (u16)(w); + h[1] = (u16)(w >> 16); } -void LoadWordFromTwoHalfwords(u16 *h, u32 *w) { *w = h[0] | (s16)h[1] << 16; } +void LoadWordFromTwoHalfwords(u16 *h, u32 *w) +{ + *w = h[0] | (s16)h[1] << 16; +} void SetBgAffineStruct(struct BgAffineSrcData *src, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha) { From 35f8cec343c99645602e07b4b701cacaddbc728a Mon Sep 17 00:00:00 2001 From: Jendrik Date: Sat, 26 Apr 2025 20:46:03 +0200 Subject: [PATCH 4/5] add clangd config for more files in src/data/ --- .clangd | 45 ++++++- include/contest_effect.h | 45 +++++++ include/data.h | 19 +-- include/pokedex_area_screen.h | 35 ++++++ include/pokemon_storage_system.h | 7 ++ include/trade.h | 50 ++++++++ include/union_room.h | 4 + src/contest_effect.c | 44 ------- src/credits.c | 21 ---- src/data.c | 22 ++-- src/data/credits.h | 22 ++++ src/data/party_menu.h | 125 ++++++++++++++++++++ src/data/pokemon_graphics/front_pic_anims.h | 1 - src/data/pokemon_graphics/unused_anims.h | 1 - src/data/trade.h | 2 + src/data/trainer_graphics/back_pic_tables.h | 3 + src/data/trainers.h | 3 + src/party_menu.c | 114 ------------------ src/pokedex_area_screen.c | 34 ------ src/pokemon_storage_system.c | 7 -- src/trade.c | 51 +------- src/union_room.c | 4 - 22 files changed, 360 insertions(+), 299 deletions(-) diff --git a/.clangd b/.clangd index 860a8843b32c..d3c242ba0bf1 100644 --- a/.clangd +++ b/.clangd @@ -53,35 +53,57 @@ If: CompileFlags: Add: - "-iquote../../../include" - - "-include../../../include/trainer_hill.h" # needs explicit path because there's another file called trainer_hill.h in src/data/battle_frontier - - "-include./description.h" + # these need an explicit path because there are other files with the ssame name + - "-include../../../include/trainer_hill.h" + - "-include../include/apprentice.h" + - "-include../include/battle_anim.h" + - "-include../include/data.h" + - "-include../include/union_room.h" + - "-include../include/wild_encounter.h" + - "-include../text/item_descriptions.h" + - "-include./metatiles.h" - "-include./tiles.h" - - "-includeapprentice.h" - "-includebard_music.h" - "-includebattle_pyramid.h" - "-includebattle_tower.h" + - "-includebattle.h" - "-includeconstants/abilities.h" + - "-includeconstants/apprentice.h" + - "-includeconstants/battle_ai.h" + - "-includeconstants/battle_anim.h" - "-includeconstants/battle_frontier_mons.h" - "-includeconstants/battle_frontier.h" + - "-includeconstants/battle_move_effects.h" - "-includeconstants/battle_pyramid.h" - "-includeconstants/battle_tent_mons.h" - "-includeconstants/battle_tent_trainers.h" + - "-includeconstants/contest.h" - "-includeconstants/decorations.h" - "-includeconstants/easy_chat.h" - "-includeconstants/event_object_movement.h" - "-includeconstants/event_objects.h" - "-includeconstants/field_effects.h" + - "-includeconstants/heal_locations.h" + - "-includeconstants/hold_effects.h" - "-includeconstants/item_effects.h" + - "-includeconstants/item.h" - "-includeconstants/items.h" - "-includeconstants/mauville_old_man.h" - "-includeconstants/metatile_labels.h" - "-includeconstants/moves.h" - "-includeconstants/party_menu.h" - "-includeconstants/region_map_sections.h" + - "-includeconstants/rgb.h" + - "-includeconstants/script_menu.h" - "-includeconstants/songs.h" - "-includeconstants/tms_hms.h" + - "-includeconstants/trade.h" - "-includeconstants/trainers.h" + - "-includeconstants/union_room.h" + - "-includecontest_effect.h" + - "-includecontest.h" - "-includedata.h" + - "-includedata/item.h" - "-includedecoration.h" - "-includeeasy_chat.h" - "-includeevent_object_movement.h" @@ -89,5 +111,22 @@ CompileFlags: - "-includefield_effect.h" - "-includefieldmap.h" - "-includegraphics.h" + - "-includeheal_location.h" + - "-includeitem_use.h" + - "-includeitem.h" + - "-includelink_rfu.h" + - "-includelist_menu.h" + - "-includemenu.h" + - "-includepokedex_area_screen.h" + - "-includepokenav.h" - "-includeregion_map.h" + - "-includesprite.h" - "-includestrings.h" + - "-includetileset_anims.h" + - "-includetilesets.h" +--- +If: + PathMatch: src/data/decoration/(header).h +CompileFlags: + Add: + - "-include./description.h" \ No newline at end of file diff --git a/include/contest_effect.h b/include/contest_effect.h index 0474cb38ccb5..bf14e969f096 100644 --- a/include/contest_effect.h +++ b/include/contest_effect.h @@ -1,6 +1,51 @@ #ifndef GUARD_CONTEST_EFFECT_H #define GUARD_CONTEST_EFFECT_H +static void ContestEffect_HighlyAppealing(void); +static void ContestEffect_UserMoreEasilyStartled(void); +static void ContestEffect_GreatAppealButNoMoreMoves(void); +static void ContestEffect_RepetitionNotBoring(void); +static void ContestEffect_AvoidStartleOnce(void); +static void ContestEffect_AvoidStartle(void); +static void ContestEffect_AvoidStartleSlightly(void); +static void ContestEffect_UserLessEasilyStartled(void); +static void ContestEffect_StartleFrontMon(void); +static void ContestEffect_StartlePrevMons(void); +static void ContestEffect_StartlePrevMon2(void); +static void ContestEffect_StartlePrevMons2(void); +static void ContestEffect_ShiftJudgeAttention(void); +static void ContestEffect_StartleMonWithJudgesAttention(void); +static void ContestEffect_JamsOthersButMissOneTurn(void); +static void ContestEffect_StartleMonsSameTypeAppeal(void); +static void ContestEffect_StartleMonsCoolAppeal(void); +static void ContestEffect_StartleMonsBeautyAppeal(void); +static void ContestEffect_StartleMonsCuteAppeal(void); +static void ContestEffect_StartleMonsSmartAppeal(void); +static void ContestEffect_StartleMonsToughAppeal(void); +static void ContestEffect_MakeFollowingMonNervous(void); +static void ContestEffect_MakeFollowingMonsNervous(void); +static void ContestEffect_WorsenConditionOfPrevMons(void); +static void ContestEffect_BadlyStartlesMonsInGoodCondition(void); +static void ContestEffect_BetterIfFirst(void); +static void ContestEffect_BetterIfLast(void); +static void ContestEffect_AppealAsGoodAsPrevOnes(void); +static void ContestEffect_AppealAsGoodAsPrevOne(void); +static void ContestEffect_BetterWhenLater(void); +static void ContestEffect_QualityDependsOnTiming(void); +static void ContestEffect_BetterIfSameType(void); +static void ContestEffect_BetterIfDiffType(void); +static void ContestEffect_AffectedByPrevAppeal(void); +static void ContestEffect_ImproveConditionPreventNervousness(void); +static void ContestEffect_BetterWithGoodCondition(void); +static void ContestEffect_NextAppealEarlier(void); +static void ContestEffect_NextAppealLater(void); +static void ContestEffect_MakeScramblingTurnOrderEasier(void); +static void ContestEffect_ScrambleNextTurnOrder(void); +static void ContestEffect_ExciteAudienceInAnyContest(void); +static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void); +static void ContestEffect_BetterWhenAudienceExcited(void); +static void ContestEffect_DontExciteAudience(void); + struct ContestMove { u8 effect; diff --git a/include/data.h b/include/data.h index 622f6c65b4c5..96232d82b1bd 100644 --- a/include/data.h +++ b/include/data.h @@ -104,14 +104,14 @@ extern const struct SpriteFrameImage gBattlerPicTable_PlayerLeft[]; extern const struct SpriteFrameImage gBattlerPicTable_OpponentLeft[]; extern const struct SpriteFrameImage gBattlerPicTable_PlayerRight[]; extern const struct SpriteFrameImage gBattlerPicTable_OpponentRight[]; -extern const struct SpriteFrameImage gTrainerBackPicTable_Brendan[]; -extern const struct SpriteFrameImage gTrainerBackPicTable_May[]; -extern const struct SpriteFrameImage gTrainerBackPicTable_Red[]; -extern const struct SpriteFrameImage gTrainerBackPicTable_Leaf[]; -extern const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireBrendan[]; -extern const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireMay[]; -extern const struct SpriteFrameImage gTrainerBackPicTable_Wally[]; -extern const struct SpriteFrameImage gTrainerBackPicTable_Steven[]; +extern const struct SpriteFrameImage gTrainerBackPicTable_Brendan[4]; +extern const struct SpriteFrameImage gTrainerBackPicTable_May[4]; +extern const struct SpriteFrameImage gTrainerBackPicTable_Red[5]; +extern const struct SpriteFrameImage gTrainerBackPicTable_Leaf[5]; +extern const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireBrendan[4]; +extern const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireMay[4]; +extern const struct SpriteFrameImage gTrainerBackPicTable_Wally[4]; +extern const struct SpriteFrameImage gTrainerBackPicTable_Steven[4]; extern const union AffineAnimCmd *const gAffineAnims_BattleSpritePlayerSide[]; extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteOpponentSide[]; @@ -143,4 +143,7 @@ extern const u8 gTrainerClassNames[][13]; extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1]; extern const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1]; +extern const union AnimCmd sAnim_GeneralFrame0[]; +extern const union AnimCmd sAnim_GeneralFrame3[]; + #endif // GUARD_DATA_H diff --git a/include/pokedex_area_screen.h b/include/pokedex_area_screen.h index 86dfaa6c5be4..82237a756917 100755 --- a/include/pokedex_area_screen.h +++ b/include/pokedex_area_screen.h @@ -1,6 +1,41 @@ #ifndef GUARD_POKEDEX_AREA_SCREEN_H #define GUARD_POKEDEX_AREA_SCREEN_H + +// There are two types of indicators for the area screen to show where a Pokémon can occur: +// - Area glows, which highlight any of the maps in MAP_GROUP_TOWNS_AND_ROUTES that have the species. +// These are a tilemap with colored rectangular areas that blends in and out. The positions of the +// rectangles is determined by the positions of the matching MAPSEC values on the region map layout. +// - Area markers, which highlight any of the maps in MAP_GROUP_DUNGEONS or MAP_GROUP_SPECIAL_AREA that +// have the species. These are circular sprites that flash twice. The positions of the sprites is +// determined by the data for the corresponding MAPSEC in gRegionMapEntries. + +// Only maps in the following map groups have their encounters considered for the area screen +#define MAP_GROUP_TOWNS_AND_ROUTES MAP_GROUP(PETALBURG_CITY) +#define MAP_GROUP_DUNGEONS MAP_GROUP(METEOR_FALLS_1F_1R) +#define MAP_GROUP_SPECIAL_AREA MAP_GROUP(SAFARI_ZONE_NORTHWEST) + +#define AREA_SCREEN_WIDTH 32 +#define AREA_SCREEN_HEIGHT 20 + +#define GLOW_FULL 0xFFFF +#define GLOW_EDGE_R (1 << 0) +#define GLOW_EDGE_L (1 << 1) +#define GLOW_EDGE_B (1 << 2) +#define GLOW_EDGE_T (1 << 3) +#define GLOW_CORNER_TL (1 << 4) +#define GLOW_CORNER_BL (1 << 5) +#define GLOW_CORNER_TR (1 << 6) +#define GLOW_CORNER_BR (1 << 7) + +#define GLOW_PALETTE 10 + +#define TAG_AREA_MARKER 2 +#define TAG_AREA_UNKNOWN 3 + +#define MAX_AREA_HIGHLIGHTS 64 // Maximum number of rectangular route highlights +#define MAX_AREA_MARKERS 32 // Maximum number of circular spot highlights + void ShowPokedexAreaScreen(u16, u8 *); #endif // GUARD_POKEDEX_AREA_SCREEN_H diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index eb25c0ff27c1..9f42ea2390ad 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -24,6 +24,13 @@ struct PokemonStorage /*0x83C2*/ u8 boxWallpapers[TOTAL_BOXES_COUNT]; }; +struct Wallpaper +{ + const u32 *tiles; + const u32 *tilemap; + const u16 *palettes; +}; + extern struct PokemonStorage *gPokemonStoragePtr; void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero2, s32 bytesToBuffer); diff --git a/include/trade.h b/include/trade.h index 6b621038fccd..acf1c62196fd 100644 --- a/include/trade.h +++ b/include/trade.h @@ -4,11 +4,61 @@ #include "link_rfu.h" #include "constants/trade.h" +// Indexes for sActionTexts +enum { + TEXT_CANCEL, + TEXT_CHOOSE_MON, + TEXT_SUMMARY, + TEXT_TRADE, + TEXT_CANCEL_TRADE, + TEXT_JP_QUIT, +}; + +// Indexes for sMessages +enum { + MSG_STANDBY, + MSG_CANCELED, + MSG_ONLY_MON1, + MSG_ONLY_MON2, + MSG_WAITING_FOR_FRIEND, + MSG_FRIEND_WANTS_TO_TRADE, + MSG_MON_CANT_BE_TRADED, + MSG_EGG_CANT_BE_TRADED, + MSG_FRIENDS_MON_CANT_BE_TRADED, +}; + +struct InGameTrade { + u8 nickname[POKEMON_NAME_LENGTH + 1]; + u16 species; + u8 ivs[NUM_STATS]; + u8 abilityNum; + u32 otId; + u8 conditions[CONTEST_CATEGORIES_COUNT]; + u32 personality; + u16 heldItem; + u8 mailNum; + u8 otName[TRAINER_NAME_LENGTH + 1]; + u8 otGender; + u8 sheen; + u16 requestedSpecies; +}; + extern struct Mail gTradeMail[PARTY_SIZE]; extern u8 gSelectedTradeMonPositions[2]; extern const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate; +static void Task_DrawSelectionSummary(u8); +static void Task_DrawSelectionTrade(u8); +static void SpriteCB_LinkMonGlow(struct Sprite *); +static void SpriteCB_LinkMonShadow(struct Sprite *); +static void SpriteCB_CableEndSending(struct Sprite *); +static void SpriteCB_CableEndReceiving(struct Sprite *); +static void SpriteCB_GbaScreen(struct Sprite *); +static void SpriteCB_BouncingPokeball(struct Sprite *); +static void SpriteCB_BouncingPokeballDepart(struct Sprite *); +static void SpriteCB_BouncingPokeballDepartEnd(struct Sprite *); +static void SpriteCB_BouncingPokeballArrive(struct Sprite *); s32 GetGameProgressForLinkTrade(void); void CB2_StartCreateTradeMenu(void); void CB2_LinkTrade(void); diff --git a/include/union_room.h b/include/union_room.h index 514a15985027..c62460845ba0 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -158,5 +158,9 @@ void CreateTask_LinkMysteryGiftOverWireless(u32 activity); void CreateTask_SendMysteryGift(u32 activity); u8 CreateTask_ListenToWireless(void); void StartUnionRoomBattle(u16 battleFlags); +static void ItemPrintFunc_PossibleGroupMembers(u8, u32, u8); +static void ListMenuItemPrintFunc_UnionRoomGroups(u8, u32, u8); +static void TradeBoardListMenuItemPrintFunc(u8, u32, u8); +static void ItemPrintFunc_EmptyList(u8, u32, u8); #endif //GUARD_UNION_ROOM_H diff --git a/src/contest_effect.c b/src/contest_effect.c index 92cc5a169c49..66ac8145faca 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -4,50 +4,6 @@ #include "contest.h" #include "contest_effect.h" -static void ContestEffect_HighlyAppealing(void); -static void ContestEffect_UserMoreEasilyStartled(void); -static void ContestEffect_GreatAppealButNoMoreMoves(void); -static void ContestEffect_RepetitionNotBoring(void); -static void ContestEffect_AvoidStartleOnce(void); -static void ContestEffect_AvoidStartle(void); -static void ContestEffect_AvoidStartleSlightly(void); -static void ContestEffect_UserLessEasilyStartled(void); -static void ContestEffect_StartleFrontMon(void); -static void ContestEffect_StartlePrevMons(void); -static void ContestEffect_StartlePrevMon2(void); -static void ContestEffect_StartlePrevMons2(void); -static void ContestEffect_ShiftJudgeAttention(void); -static void ContestEffect_StartleMonWithJudgesAttention(void); -static void ContestEffect_JamsOthersButMissOneTurn(void); -static void ContestEffect_StartleMonsSameTypeAppeal(void); -static void ContestEffect_StartleMonsCoolAppeal(void); -static void ContestEffect_StartleMonsBeautyAppeal(void); -static void ContestEffect_StartleMonsCuteAppeal(void); -static void ContestEffect_StartleMonsSmartAppeal(void); -static void ContestEffect_StartleMonsToughAppeal(void); -static void ContestEffect_MakeFollowingMonNervous(void); -static void ContestEffect_MakeFollowingMonsNervous(void); -static void ContestEffect_WorsenConditionOfPrevMons(void); -static void ContestEffect_BadlyStartlesMonsInGoodCondition(void); -static void ContestEffect_BetterIfFirst(void); -static void ContestEffect_BetterIfLast(void); -static void ContestEffect_AppealAsGoodAsPrevOnes(void); -static void ContestEffect_AppealAsGoodAsPrevOne(void); -static void ContestEffect_BetterWhenLater(void); -static void ContestEffect_QualityDependsOnTiming(void); -static void ContestEffect_BetterIfSameType(void); -static void ContestEffect_BetterIfDiffType(void); -static void ContestEffect_AffectedByPrevAppeal(void); -static void ContestEffect_ImproveConditionPreventNervousness(void); -static void ContestEffect_BetterWithGoodCondition(void); -static void ContestEffect_NextAppealEarlier(void); -static void ContestEffect_NextAppealLater(void); -static void ContestEffect_MakeScramblingTurnOrderEasier(void); -static void ContestEffect_ScrambleNextTurnOrder(void); -static void ContestEffect_ExciteAudienceInAnyContest(void); -static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void); -static void ContestEffect_BetterWhenAudienceExcited(void); -static void ContestEffect_DontExciteAudience(void); static void JamByMoveCategory(u8); static bool8 CanUnnerveContestant(u8); static u8 WasAtLeastOneOpponentJammed(void); diff --git a/src/credits.c b/src/credits.c index c433baf1d140..654332408d92 100644 --- a/src/credits.c +++ b/src/credits.c @@ -59,27 +59,6 @@ enum { #define tPrintedPage data[14] #define tTaskId_UpdatePage data[15] -#define NUM_MON_SLIDES 71 - -struct CreditsData -{ - u16 monToShow[NUM_MON_SLIDES]; // List of Pokémon species ids that will show during the credits - u16 imgCounter; //how many mon images have been shown - u16 nextImgPos; //if the next image spawns left/center/right - u16 currShownMon; //index into monToShow - u16 numMonToShow; //number of Pokémon to show, always NUM_MON_SLIDES after determine function - u16 caughtMonIds[NATIONAL_DEX_COUNT]; //temporary location to hold a condensed array of all caught Pokémon - u16 numCaughtMon; //count of filled spaces in caughtMonIds - u16 unused[7]; -}; - -struct CreditsEntry -{ - u8 unk; // Never read - bool8 isTitle; - const u8 *text; -}; - static EWRAM_DATA s16 UNUSED sUnkVar = 0; // Never read, only set to 0 static EWRAM_DATA u16 sSavedTaskId = 0; EWRAM_DATA bool8 gHasHallOfFameRecords = 0; diff --git a/src/data.c b/src/data.c index 3bb7b576912a..5200c889df09 100644 --- a/src/data.c +++ b/src/data.c @@ -46,7 +46,7 @@ const struct SpriteFrameImage gBattlerPicTable_OpponentRight[] = {BATTLER_OFFSET(15), MON_PIC_SIZE}, }; -const struct SpriteFrameImage gTrainerBackPicTable_Brendan[] = +const struct SpriteFrameImage gTrainerBackPicTable_Brendan[4] = { {gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, {gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, @@ -54,7 +54,7 @@ const struct SpriteFrameImage gTrainerBackPicTable_Brendan[] = {gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, }; -const struct SpriteFrameImage gTrainerBackPicTable_May[] = +const struct SpriteFrameImage gTrainerBackPicTable_May[4] = { {gTrainerBackPic_May + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, {gTrainerBackPic_May + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, @@ -62,7 +62,7 @@ const struct SpriteFrameImage gTrainerBackPicTable_May[] = {gTrainerBackPic_May + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, }; -const struct SpriteFrameImage gTrainerBackPicTable_Red[] = +const struct SpriteFrameImage gTrainerBackPicTable_Red[5] = { {gTrainerBackPic_Red + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, {gTrainerBackPic_Red + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, @@ -71,7 +71,7 @@ const struct SpriteFrameImage gTrainerBackPicTable_Red[] = {gTrainerBackPic_Red + TRAINER_PIC_SIZE * 4, TRAINER_PIC_SIZE}, }; -const struct SpriteFrameImage gTrainerBackPicTable_Leaf[] = +const struct SpriteFrameImage gTrainerBackPicTable_Leaf[5] = { {gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, {gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, @@ -80,7 +80,7 @@ const struct SpriteFrameImage gTrainerBackPicTable_Leaf[] = {gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 4, TRAINER_PIC_SIZE}, }; -const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireBrendan[] = +const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireBrendan[4] = { {gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, {gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, @@ -88,7 +88,7 @@ const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireBrendan[] = {gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, }; -const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireMay[] = +const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireMay[4] = { {gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, {gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, @@ -96,7 +96,7 @@ const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireMay[] = {gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, }; -const struct SpriteFrameImage gTrainerBackPicTable_Wally[] = +const struct SpriteFrameImage gTrainerBackPicTable_Wally[4] = { {gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, {gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, @@ -104,7 +104,7 @@ const struct SpriteFrameImage gTrainerBackPicTable_Wally[] = {gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, }; -const struct SpriteFrameImage gTrainerBackPicTable_Steven[] = +const struct SpriteFrameImage gTrainerBackPicTable_Steven[4] = { {gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, {gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, @@ -112,13 +112,13 @@ const struct SpriteFrameImage gTrainerBackPicTable_Steven[] = {gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, }; -static const union AnimCmd sAnim_GeneralFrame0[] = +const union AnimCmd sAnim_GeneralFrame0[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END, }; -static const union AnimCmd sAnim_GeneralFrame3[] = +const union AnimCmd sAnim_GeneralFrame3[] = { ANIMCMD_FRAME(3, 0), ANIMCMD_END, @@ -317,8 +317,6 @@ const union AnimCmd *const gAnims_MonPic[MAX_MON_PIC_FRAMES] = #include "data/pokemon_graphics/front_pic_table.h" #include "data/pokemon_graphics/unknown_table.h" -#include "data/trainer_parties.h" -#include "data/text/trainer_class_names.h" #include "data/trainers.h" #include "data/text/species_names.h" #include "data/text/move_names.h" diff --git a/src/data/credits.h b/src/data/credits.h index 3b92ae26f78f..4331daee8555 100644 --- a/src/data/credits.h +++ b/src/data/credits.h @@ -60,6 +60,27 @@ enum PAGE_COUNT }; +#define NUM_MON_SLIDES 71 + +struct CreditsData +{ + u16 monToShow[NUM_MON_SLIDES]; // List of Pokémon species ids that will show during the credits + u16 imgCounter; //how many mon images have been shown + u16 nextImgPos; //if the next image spawns left/center/right + u16 currShownMon; //index into monToShow + u16 numMonToShow; //number of Pokémon to show, always NUM_MON_SLIDES after determine function + u16 caughtMonIds[NATIONAL_DEX_COUNT]; //temporary location to hold a condensed array of all caught Pokémon + u16 numCaughtMon; //count of filled spaces in caughtMonIds + u16 unused[7]; +}; + +struct CreditsEntry +{ + u8 unk; // Never read + bool8 isTitle; + const u8 *text; +}; + #define ENTRIES_PER_PAGE 5 static const u8 sCreditsText_EmptyString[] = _(""); @@ -381,6 +402,7 @@ static const struct CreditsEntry sCreditsEntry_NicolaPrattBarlow static const struct CreditsEntry sCreditsEntry_ShellieDow = { 0, FALSE, sCreditsText_ShellieDow}; static const struct CreditsEntry sCreditsEntry_ErikJohnson = { 0, FALSE, sCreditsText_ErikJohnson}; +#undef _ #define _ &sCreditsEntry_EmptyString static const struct CreditsEntry *const sCreditsEntryPointerTable[PAGE_COUNT][ENTRIES_PER_PAGE] = { diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 703e8e406e44..159e43a6292c 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -1,3 +1,128 @@ +#include "constants/characters.h" +#include "constants/trade.h" +#include "window.h" +#include "task.h" +#include "fldeff.h" +#include "fldeff_misc.h" + +struct PartyMenuBoxInfoRects +{ + void (*blitFunc)(u8, u8, u8, u8, u8, bool8); + u8 dimensions[24]; + u8 descTextLeft; + u8 descTextTop; + u8 descTextWidth; + u8 descTextHeight; +}; + +enum { + PARTY_BOX_LEFT_COLUMN, + PARTY_BOX_RIGHT_COLUMN, +}; + +enum { + // Window ids 0-5 are implicitly assigned to each party Pokémon in InitPartyMenuBoxes + WIN_MSG = PARTY_SIZE, +}; + +static void BlitBitmapToPartyWindow_LeftColumn(u8, u8, u8, u8, u8, bool8); +static void BlitBitmapToPartyWindow_RightColumn(u8, u8, u8, u8, u8, bool8); +static void CursorCb_Summary(u8); +static void CursorCb_Switch(u8); +static void CursorCb_Cancel1(u8); +static void CursorCb_Item(u8); +static void CursorCb_Give(u8); +static void CursorCb_TakeItem(u8); +static void CursorCb_Mail(u8); +static void CursorCb_Read(u8); +static void CursorCb_TakeMail(u8); +static void CursorCb_Cancel2(u8); +static void CursorCb_SendMon(u8); +static void CursorCb_Enter(u8); +static void CursorCb_NoEntry(u8); +static void CursorCb_Store(u8); +static void CursorCb_Register(u8); +static void CursorCb_Trade1(u8); +static void CursorCb_Trade2(u8); +static void CursorCb_Toss(u8); +static void CursorCb_FieldMove(u8); + +static bool8 SetUpFieldMove_Surf(void); +static bool8 SetUpFieldMove_Fly(void); +static bool8 SetUpFieldMove_Waterfall(void); +static bool8 SetUpFieldMove_Dive(void); + + +enum { + MENU_SUMMARY, + MENU_SWITCH, + MENU_CANCEL1, + MENU_ITEM, + MENU_GIVE, + MENU_TAKE_ITEM, + MENU_MAIL, + MENU_TAKE_MAIL, + MENU_READ, + MENU_CANCEL2, + MENU_SHIFT, + MENU_SEND_OUT, + MENU_ENTER, + MENU_NO_ENTRY, + MENU_STORE, + MENU_REGISTER, + MENU_TRADE1, + MENU_TRADE2, + MENU_TOSS, + MENU_FIELD_MOVES +}; + +// In CursorCb_FieldMove, field moves <= FIELD_MOVE_WATERFALL are assumed to line up with the badge flags. +// Badge flag names are commented here for people searching for references to remove the badge requirement. +enum { + FIELD_MOVE_CUT, // FLAG_BADGE01_GET + FIELD_MOVE_FLASH, // FLAG_BADGE02_GET + FIELD_MOVE_ROCK_SMASH, // FLAG_BADGE03_GET + FIELD_MOVE_STRENGTH, // FLAG_BADGE04_GET + FIELD_MOVE_SURF, // FLAG_BADGE05_GET + FIELD_MOVE_FLY, // FLAG_BADGE06_GET + FIELD_MOVE_DIVE, // FLAG_BADGE07_GET + FIELD_MOVE_WATERFALL, // FLAG_BADGE08_GET + FIELD_MOVE_TELEPORT, + FIELD_MOVE_DIG, + FIELD_MOVE_SECRET_POWER, + FIELD_MOVE_MILK_DRINK, + FIELD_MOVE_SOFT_BOILED, + FIELD_MOVE_SWEET_SCENT, + FIELD_MOVES_COUNT +}; + + +// IDs for the action lists that appear when a party mon is selected +enum { + ACTIONS_NONE, + ACTIONS_SWITCH, + ACTIONS_SHIFT, + ACTIONS_SEND_OUT, + ACTIONS_ENTER, + ACTIONS_NO_ENTRY, + ACTIONS_STORE, + ACTIONS_SUMMARY_ONLY, + ACTIONS_ITEM, + ACTIONS_MAIL, + ACTIONS_REGISTER, + ACTIONS_TRADE, + ACTIONS_SPIN_TRADE, + ACTIONS_TAKEITEM_TOSS, +}; + +enum { + TAG_POKEBALL = 1200, + TAG_POKEBALL_SMALL, + TAG_STATUS_ICONS, +}; + +#define TAG_HELD_ITEM 55120 + static const struct BgTemplate sPartyMenuBgTemplates[] = { { diff --git a/src/data/pokemon_graphics/front_pic_anims.h b/src/data/pokemon_graphics/front_pic_anims.h index 2b01a0cfcad4..ff8b044a8f06 100644 --- a/src/data/pokemon_graphics/front_pic_anims.h +++ b/src/data/pokemon_graphics/front_pic_anims.h @@ -1,7 +1,6 @@ #if CLANGD #pragma clang diagnostic ignored "-Wtentative-definition-array" #endif -static const union AnimCmd sAnim_GeneralFrame0[]; static const union AnimCmd sAnim_None_1[] = { diff --git a/src/data/pokemon_graphics/unused_anims.h b/src/data/pokemon_graphics/unused_anims.h index 18e617c50d8c..fa80839b1f3c 100644 --- a/src/data/pokemon_graphics/unused_anims.h +++ b/src/data/pokemon_graphics/unused_anims.h @@ -1,7 +1,6 @@ #if CLANGD #pragma clang diagnostic ignored "-Wtentative-definition-array" #endif -static const union AnimCmd sAnim_GeneralFrame0[]; // unused and unkown static const union AnimCmd sUnusedAnim_Blaziken_1[] = diff --git a/src/data/trade.h b/src/data/trade.h index ba49f4b8743c..62a7ec7fc487 100644 --- a/src/data/trade.h +++ b/src/data/trade.h @@ -1,3 +1,5 @@ +#include "../../include/trade.h" + #define GFXTAG_MENU_TEXT 200 // Used as a base tag in CB2_CreateTradeMenu and CB2_ReturnToTradeMenu #define GFXTAG_CURSOR 300 #define GFXTAG_LINK_MON_GLOW 5550 diff --git a/src/data/trainer_graphics/back_pic_tables.h b/src/data/trainer_graphics/back_pic_tables.h index 524d48d480ef..125d024e9cdf 100644 --- a/src/data/trainer_graphics/back_pic_tables.h +++ b/src/data/trainer_graphics/back_pic_tables.h @@ -1,3 +1,6 @@ +#include "data.h" +#include "sprite.h" + const struct MonCoords gTrainerBackPicCoords[] = { [TRAINER_BACK_PIC_BRENDAN] = {.size = 8, .y_offset = 4}, diff --git a/src/data/trainers.h b/src/data/trainers.h index b4c1b0575233..b397258a765a 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -1,3 +1,6 @@ +#include "./trainer_parties.h" +#include "./text/trainer_class_names.h" + const struct Trainer gTrainers[] = { [TRAINER_NONE] = { diff --git a/src/party_menu.c b/src/party_menu.c index cbd469713a93..1f0b4a35b0af 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -73,80 +73,6 @@ #include "constants/rgb.h" #include "constants/songs.h" -enum { - MENU_SUMMARY, - MENU_SWITCH, - MENU_CANCEL1, - MENU_ITEM, - MENU_GIVE, - MENU_TAKE_ITEM, - MENU_MAIL, - MENU_TAKE_MAIL, - MENU_READ, - MENU_CANCEL2, - MENU_SHIFT, - MENU_SEND_OUT, - MENU_ENTER, - MENU_NO_ENTRY, - MENU_STORE, - MENU_REGISTER, - MENU_TRADE1, - MENU_TRADE2, - MENU_TOSS, - MENU_FIELD_MOVES -}; - -// IDs for the action lists that appear when a party mon is selected -enum { - ACTIONS_NONE, - ACTIONS_SWITCH, - ACTIONS_SHIFT, - ACTIONS_SEND_OUT, - ACTIONS_ENTER, - ACTIONS_NO_ENTRY, - ACTIONS_STORE, - ACTIONS_SUMMARY_ONLY, - ACTIONS_ITEM, - ACTIONS_MAIL, - ACTIONS_REGISTER, - ACTIONS_TRADE, - ACTIONS_SPIN_TRADE, - ACTIONS_TAKEITEM_TOSS, -}; - -// In CursorCb_FieldMove, field moves <= FIELD_MOVE_WATERFALL are assumed to line up with the badge flags. -// Badge flag names are commented here for people searching for references to remove the badge requirement. -enum { - FIELD_MOVE_CUT, // FLAG_BADGE01_GET - FIELD_MOVE_FLASH, // FLAG_BADGE02_GET - FIELD_MOVE_ROCK_SMASH, // FLAG_BADGE03_GET - FIELD_MOVE_STRENGTH, // FLAG_BADGE04_GET - FIELD_MOVE_SURF, // FLAG_BADGE05_GET - FIELD_MOVE_FLY, // FLAG_BADGE06_GET - FIELD_MOVE_DIVE, // FLAG_BADGE07_GET - FIELD_MOVE_WATERFALL, // FLAG_BADGE08_GET - FIELD_MOVE_TELEPORT, - FIELD_MOVE_DIG, - FIELD_MOVE_SECRET_POWER, - FIELD_MOVE_MILK_DRINK, - FIELD_MOVE_SOFT_BOILED, - FIELD_MOVE_SWEET_SCENT, - FIELD_MOVES_COUNT -}; - -enum { - PARTY_BOX_LEFT_COLUMN, - PARTY_BOX_RIGHT_COLUMN, -}; - -enum { - TAG_POKEBALL = 1200, - TAG_POKEBALL_SMALL, - TAG_STATUS_ICONS, -}; - -#define TAG_HELD_ITEM 55120 - #define PARTY_PAL_SELECTED (1 << 0) #define PARTY_PAL_FAINTED (1 << 1) #define PARTY_PAL_TO_SWITCH (1 << 2) @@ -168,21 +94,6 @@ enum { CANNOT_LEARN_MOVE_IS_EGG }; -enum { - // Window ids 0-5 are implicitly assigned to each party Pokémon in InitPartyMenuBoxes - WIN_MSG = PARTY_SIZE, -}; - -struct PartyMenuBoxInfoRects -{ - void (*blitFunc)(u8, u8, u8, u8, u8, bool8); - u8 dimensions[24]; - u8 descTextLeft; - u8 descTextTop; - u8 descTextWidth; - u8 descTextHeight; -}; - struct PartyMenuInternal { TaskFunc task; @@ -455,31 +366,6 @@ static void Task_ChooseMonForMoveRelearner(u8); static void CB2_ChooseMonForMoveRelearner(void); static void Task_BattlePyramidChooseMonHeldItems(u8); static void ShiftMoveSlot(struct Pokemon *, u8, u8); -static void BlitBitmapToPartyWindow_LeftColumn(u8, u8, u8, u8, u8, bool8); -static void BlitBitmapToPartyWindow_RightColumn(u8, u8, u8, u8, u8, bool8); -static void CursorCb_Summary(u8); -static void CursorCb_Switch(u8); -static void CursorCb_Cancel1(u8); -static void CursorCb_Item(u8); -static void CursorCb_Give(u8); -static void CursorCb_TakeItem(u8); -static void CursorCb_Mail(u8); -static void CursorCb_Read(u8); -static void CursorCb_TakeMail(u8); -static void CursorCb_Cancel2(u8); -static void CursorCb_SendMon(u8); -static void CursorCb_Enter(u8); -static void CursorCb_NoEntry(u8); -static void CursorCb_Store(u8); -static void CursorCb_Register(u8); -static void CursorCb_Trade1(u8); -static void CursorCb_Trade2(u8); -static void CursorCb_Toss(u8); -static void CursorCb_FieldMove(u8); -static bool8 SetUpFieldMove_Surf(void); -static bool8 SetUpFieldMove_Fly(void); -static bool8 SetUpFieldMove_Waterfall(void); -static bool8 SetUpFieldMove_Dive(void); // static const data #include "data/pokemon/tutor_learnsets.h" diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index f9181a985b6e..1f2c0c2f388c 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -20,40 +20,6 @@ #include "constants/rgb.h" #include "constants/songs.h" -// There are two types of indicators for the area screen to show where a Pokémon can occur: -// - Area glows, which highlight any of the maps in MAP_GROUP_TOWNS_AND_ROUTES that have the species. -// These are a tilemap with colored rectangular areas that blends in and out. The positions of the -// rectangles is determined by the positions of the matching MAPSEC values on the region map layout. -// - Area markers, which highlight any of the maps in MAP_GROUP_DUNGEONS or MAP_GROUP_SPECIAL_AREA that -// have the species. These are circular sprites that flash twice. The positions of the sprites is -// determined by the data for the corresponding MAPSEC in gRegionMapEntries. - -// Only maps in the following map groups have their encounters considered for the area screen -#define MAP_GROUP_TOWNS_AND_ROUTES MAP_GROUP(PETALBURG_CITY) -#define MAP_GROUP_DUNGEONS MAP_GROUP(METEOR_FALLS_1F_1R) -#define MAP_GROUP_SPECIAL_AREA MAP_GROUP(SAFARI_ZONE_NORTHWEST) - -#define AREA_SCREEN_WIDTH 32 -#define AREA_SCREEN_HEIGHT 20 - -#define GLOW_FULL 0xFFFF -#define GLOW_EDGE_R (1 << 0) -#define GLOW_EDGE_L (1 << 1) -#define GLOW_EDGE_B (1 << 2) -#define GLOW_EDGE_T (1 << 3) -#define GLOW_CORNER_TL (1 << 4) -#define GLOW_CORNER_BL (1 << 5) -#define GLOW_CORNER_TR (1 << 6) -#define GLOW_CORNER_BR (1 << 7) - -#define GLOW_PALETTE 10 - -#define TAG_AREA_MARKER 2 -#define TAG_AREA_UNKNOWN 3 - -#define MAX_AREA_HIGHLIGHTS 64 // Maximum number of rectangular route highlights -#define MAX_AREA_MARKERS 32 // Maximum number of circular spot highlights - struct OverworldArea { u8 mapGroup; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 57ff7008848e..7551b9afcc45 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -339,13 +339,6 @@ enum { WIN_ITEM_DESC, }; -struct Wallpaper -{ - const u32 *tiles; - const u32 *tilemap; - const u16 *palettes; -}; - struct StorageMessage { const u8 *text; diff --git a/src/trade.c b/src/trade.c index e07e418d1add..d304abf450df 100644 --- a/src/trade.c +++ b/src/trade.c @@ -74,29 +74,6 @@ enum { CB_IDLE = 100, }; -// Indexes for sActionTexts -enum { - TEXT_CANCEL, - TEXT_CHOOSE_MON, - TEXT_SUMMARY, - TEXT_TRADE, - TEXT_CANCEL_TRADE, - TEXT_JP_QUIT, -}; - -// Indexes for sMessages -enum { - MSG_STANDBY, - MSG_CANCELED, - MSG_ONLY_MON1, - MSG_ONLY_MON2, - MSG_WAITING_FOR_FRIEND, - MSG_FRIEND_WANTS_TO_TRADE, - MSG_MON_CANT_BE_TRADED, - MSG_EGG_CANT_BE_TRADED, - MSG_FRIENDS_MON_CANT_BE_TRADED, -}; - // IDs for QueueAction enum { QUEUE_SEND_DATA, @@ -147,22 +124,6 @@ enum { // Checked to confirm DrawSelectedMonScreen has reached final state #define DRAW_SELECTED_FINISH 5 -struct InGameTrade { - u8 nickname[POKEMON_NAME_LENGTH + 1]; - u16 species; - u8 ivs[NUM_STATS]; - u8 abilityNum; - u32 otId; - u8 conditions[CONTEST_CATEGORIES_COUNT]; - u32 personality; - u16 heldItem; - u8 mailNum; - u8 otName[TRAINER_NAME_LENGTH + 1]; - u8 otGender; - u8 sheen; - u16 requestedSpecies; -}; - static EWRAM_DATA u8 *sMenuTextTileBuffer = NULL; // Bytes 0-2 are used for the player's name text @@ -275,8 +236,6 @@ static void PrintLevelAndGender(u8, u8, u8, u8, u8, u8); static void PrintPartyLevelsAndGenders(u8); static void PrintTradePartnerPartyNicknames(void); static void RedrawPartyWindow(u8); -static void Task_DrawSelectionSummary(u8); -static void Task_DrawSelectionTrade(u8); static void QueueAction(u16, u8); static u32 GetNumQueuedActions(void); static void DoQueuedActions(void); @@ -288,11 +247,7 @@ static void ComputePartyHPBarLevels(u8); static void SetTradePartyHPBarSprites(void); static void SaveTradeGiftRibbons(void); static u32 CanTradeSelectedMon(struct Pokemon *, int, int); -static void SpriteCB_LinkMonGlow(struct Sprite *); -static void SpriteCB_LinkMonShadow(struct Sprite *); -static void SpriteCB_CableEndSending(struct Sprite *); -static void SpriteCB_CableEndReceiving(struct Sprite *); -static void SpriteCB_GbaScreen(struct Sprite *); + static void TradeAnimInit_LoadGfx(void); static void CB2_InGameTrade(void); static void SetTradeSequenceBgGpuRegs(u8); @@ -301,10 +256,6 @@ static void BufferTradeSceneStrings(void); static bool8 DoTradeAnim(void); static bool8 DoTradeAnim_Cable(void); static bool8 DoTradeAnim_Wireless(void); -static void SpriteCB_BouncingPokeball(struct Sprite *); -static void SpriteCB_BouncingPokeballDepart(struct Sprite *); -static void SpriteCB_BouncingPokeballDepartEnd(struct Sprite *); -static void SpriteCB_BouncingPokeballArrive(struct Sprite *); static void BufferInGameTradeMonName(void); static void GetInGameTradeMail(struct Mail *, const struct InGameTrade *); static void CB2_UpdateLinkTrade(void); diff --git a/src/union_room.c b/src/union_room.c index 36bc5ee4c6bc..691c084f2189 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -276,10 +276,6 @@ static bool32 UR_PrintFieldMessage(const u8 *); static s32 GetChatLeaderActionRequestMessage(u8 *, u32, u16 *, struct WirelessLink_URoom *); static void Task_InitUnionRoom(u8 taskId); static bool8 ArePlayersDifferent(struct RfuPlayerData *, const struct RfuPlayerData *); -static void ItemPrintFunc_PossibleGroupMembers(u8, u32, u8); -static void ListMenuItemPrintFunc_UnionRoomGroups(u8, u32, u8); -static void TradeBoardListMenuItemPrintFunc(u8, u32, u8); -static void ItemPrintFunc_EmptyList(u8, u32, u8); #include "data/union_room.h" From 3492c6c38d68f276e80b0820ef2cf6b8a0371eef Mon Sep 17 00:00:00 2001 From: Jendrik Date: Sat, 26 Apr 2025 21:05:14 +0200 Subject: [PATCH 5/5] improve types of level up window stats --- include/battle_anim.h | 22 +++++++++++++++++----- include/menu_specialized.h | 2 +- src/battle_anim.c | 6 +----- src/battle_anim_ground.c | 2 +- src/battle_script_commands.c | 6 +++--- src/menu_specialized.c | 2 +- 6 files changed, 24 insertions(+), 16 deletions(-) diff --git a/include/battle_anim.h b/include/battle_anim.h index ffb63bde61f4..e749a48b51ee 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -2,6 +2,7 @@ #define GUARD_BATTLE_ANIM_H #include "battle.h" +#include "constants/battle.h" #include "constants/battle_anim.h" #include "task.h" @@ -44,11 +45,22 @@ extern s32 gAnimMoveDmg; extern u16 gAnimMovePower; extern u8 gAnimFriendship; extern u16 gWeatherMoveAnim; -extern s16 gBattleAnimArgs[ANIM_ARGS_COUNT]; -extern u8 gAnimMoveTurn; -extern u8 gBattleAnimAttacker; -extern u8 gBattleAnimTarget; -extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT]; +typedef union { + struct { + s16 gBattleAnimArgs[ANIM_ARGS_COUNT]; + u8 gAnimMoveTurn; + u8 gBattleAnimAttacker; + u8 gBattleAnimTarget; + u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT]; + } normal; + s16 gBattleAnimArgsOverflow[(2 * ANIM_ARGS_COUNT + 1 + 1 + 1 + 2 * MAX_BATTLERS_COUNT) / 2]; +} BattleAnimArgsOOBAccess; +extern BattleAnimArgsOOBAccess gBattleAnimArgsOOBAccess; +#define gBattleAnimArgs gBattleAnimArgsOOBAccess.normal.gBattleAnimArgs +#define gAnimMoveTurn gBattleAnimArgsOOBAccess.normal.gAnimMoveTurn +#define gBattleAnimAttacker gBattleAnimArgsOOBAccess.normal.gBattleAnimAttacker +#define gBattleAnimTarget gBattleAnimArgsOOBAccess.normal.gBattleAnimTarget +#define gAnimBattlerSpecies gBattleAnimArgsOOBAccess.normal.gAnimBattlerSpecies extern u8 gAnimCustomPanning; void ClearBattleAnimationVars(void); diff --git a/include/menu_specialized.h b/include/menu_specialized.h index 0d4f45f8f2de..85ca7fb9d14a 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -135,6 +135,6 @@ void InitMoveRelearnerWindows(bool8 useContestWindow); // Level up window void DrawLevelUpWindowPg1(u16 windowId, s16 *statsBefore, s16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr); void DrawLevelUpWindowPg2(u16 windowId, s16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr); -void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats); +void GetMonLevelUpWindowStats(struct Pokemon *mon, s16 *currStats); #endif // GUARD_MENU_SPECIALIZED_H diff --git a/src/battle_anim.c b/src/battle_anim.c index e6e049c37051..013d8ddd1c21 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -102,15 +102,11 @@ EWRAM_DATA u16 gAnimMovePower = 0; EWRAM_DATA static u16 sAnimSpriteIndexArray[ANIM_SPRITE_INDEX_COUNT] = {0}; EWRAM_DATA u8 gAnimFriendship = 0; EWRAM_DATA u16 gWeatherMoveAnim = 0; -EWRAM_DATA s16 gBattleAnimArgs[ANIM_ARGS_COUNT] = {0}; +EWRAM_DATA BattleAnimArgsOOBAccess gBattleAnimArgsOOBAccess = {0}; EWRAM_DATA static u16 sSoundAnimFramesToWait = 0; EWRAM_DATA static u8 sMonAnimTaskIdArray[2] = {0}; -EWRAM_DATA u8 gAnimMoveTurn = 0; EWRAM_DATA static u8 sAnimBackgroundFadeState = 0; EWRAM_DATA static u16 sAnimMoveIndex = 0; // Set but unused. -EWRAM_DATA u8 gBattleAnimAttacker = 0; -EWRAM_DATA u8 gBattleAnimTarget = 0; -EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gAnimCustomPanning = 0; #include "data/battle_anim.h" diff --git a/src/battle_anim_ground.c b/src/battle_anim_ground.c index b3591544ece1..283583eb6f86 100644 --- a/src/battle_anim_ground.c +++ b/src/battle_anim_ground.c @@ -733,7 +733,7 @@ static void SetBattlersXOffsetForShake(struct Task *task) void AnimTask_IsPowerOver99(u8 taskId) { - gBattleAnimArgs[15] = gAnimMovePower > 99; + gBattleAnimArgsOOBAccess.gBattleAnimArgsOverflow[15] = gAnimMovePower > 99; DestroyAnimVisualTask(taskId); } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9ba31ec96bab..afc7d20bd116 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6024,15 +6024,15 @@ static void Cmd_drawlvlupbox(void) static void DrawLevelUpWindow1(void) { - u16 currStats[NUM_STATS]; + s16 currStats[NUM_STATS]; GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats); - DrawLevelUpWindowPg1(B_WIN_LEVEL_UP_BOX, gBattleResources->beforeLvlUp->stats, currStats, TEXT_DYNAMIC_COLOR_5, TEXT_DYNAMIC_COLOR_4, TEXT_DYNAMIC_COLOR_6); + DrawLevelUpWindowPg1(B_WIN_LEVEL_UP_BOX, (s16*)gBattleResources->beforeLvlUp->stats, currStats, TEXT_DYNAMIC_COLOR_5, TEXT_DYNAMIC_COLOR_4, TEXT_DYNAMIC_COLOR_6); } static void DrawLevelUpWindow2(void) { - u16 currStats[NUM_STATS]; + s16 currStats[NUM_STATS]; GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats); DrawLevelUpWindowPg2(B_WIN_LEVEL_UP_BOX, currStats, TEXT_DYNAMIC_COLOR_5, TEXT_DYNAMIC_COLOR_4, TEXT_DYNAMIC_COLOR_6); diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 7b876cd32941..4c916e999e15 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -1615,7 +1615,7 @@ void DrawLevelUpWindowPg2(u16 windowId, s16 *currStats, u8 bgClr, u8 fgClr, u8 s } } -void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats) +void GetMonLevelUpWindowStats(struct Pokemon *mon, s16 *currStats) { currStats[STAT_HP] = GetMonData(mon, MON_DATA_MAX_HP); currStats[STAT_ATK] = GetMonData(mon, MON_DATA_ATK);