diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/battle.h | 102 | ||||
-rw-r--r-- | include/battle_ai.h | 5 | ||||
-rw-r--r-- | include/battle_anim.h | 13 | ||||
-rw-r--r-- | include/battle_party_menu.h | 3 | ||||
-rw-r--r-- | include/decoration.h | 3 | ||||
-rw-r--r-- | include/dewford_trend.h | 3 | ||||
-rwxr-xr-x | include/ewram.h | 258 | ||||
-rw-r--r-- | include/field_map_obj.h | 2 | ||||
-rw-r--r-- | include/field_weather.h | 7 | ||||
-rw-r--r-- | include/gba/defines.h | 9 | ||||
-rw-r--r-- | include/gba/flash_internal.h | 10 | ||||
-rw-r--r-- | include/global.h | 18 | ||||
-rw-r--r-- | include/party_menu.h | 6 | ||||
-rw-r--r-- | include/player_pc.h | 1 | ||||
-rw-r--r-- | include/pokemon.h | 6 | ||||
-rw-r--r-- | include/rom3.h | 8 | ||||
-rw-r--r-- | include/save.h | 2 | ||||
-rw-r--r-- | include/script_pokemon_80F9.h | 2 | ||||
-rw-r--r-- | include/songs.h | 20 | ||||
-rw-r--r-- | include/sprite.h | 2 | ||||
-rw-r--r-- | include/string_util.h | 2 |
21 files changed, 381 insertions, 101 deletions
diff --git a/include/battle.h b/include/battle.h index f973849b7..d576e92f4 100644 --- a/include/battle.h +++ b/include/battle.h @@ -189,9 +189,6 @@ enum BATTLE_TERRAIN_PLAIN, }; -// needed to match the hack that is get_item, thanks cam, someone else clean this up later. -extern u8 unk_2000000[]; - struct Trainer { /*0x00*/ u8 partyFlags; @@ -237,7 +234,11 @@ struct AI_ThinkingStruct /* 0x2016800 */ struct BattleStruct /* 0x2000000 */ { - u8 filler0[0x15DDE]; + /*0x00000*/ u8 unk0; + /*0x00001*/ bool8 unk1; + /*0x00002*/ u8 unk2; + /*0x00003*/ bool8 unk3; + u8 filler4[0x15DDA]; /*0x15DDE*/ u8 unk15DDE; /*0x15DDF*/ u8 unk15DDF; /*0x15DE0*/ u8 filler15DE0[0x220]; @@ -533,6 +534,21 @@ struct BattleResults u8 unk36[10]; // usedBalls? }; +struct Struct2017100 +{ + u32 arr[4]; +}; + +struct Struct2019348 +{ + u16 unk0; + u16 unk2; + u8 unk4; + u32 unk8; + u32 unkC; + u32 unk10; +}; + struct Struct2017800 { u8 invisible:1; @@ -545,25 +561,25 @@ struct Struct2017800 struct Struct2017810 { - u8 unk0_0:1; - u8 unk0_1:1; - u8 unk0_2:1; - u8 unk0_3:1; - u8 unk0_4:1; - u8 unk0_5:1; - u8 unk0_6:1; - u8 unk0_7:1; - u8 unk1_0:1; - u8 unk1_1:5; - u8 unk2; - u8 unk3; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; - u8 unk8; - u8 unk9; - u8 fillerA[2]; + /*0x00*/ u8 unk0_0:1; + /*0x00*/ u8 unk0_1:1; + /*0x00*/ u8 unk0_2:1; + /*0x00*/ u8 unk0_3:1; + /*0x00*/ u8 unk0_4:1; + /*0x00*/ u8 unk0_5:1; + /*0x00*/ u8 unk0_6:1; + /*0x00*/ u8 unk0_7:1; + /*0x01*/ u8 unk1_0:1; + /*0x01*/ u8 unk1_1:5; + /*0x02*/ u8 unk2; + /*0x03*/ u8 unk3; + /*0x04*/ u8 unk4; + /*0x05*/ u8 unk5; + /*0x06*/ u8 unk6; + /*0x07*/ u8 unk7; + /*0x08*/ u8 unk8; + /*0x09*/ u8 unk9; + /*0x0A*/ u8 fillerA[2]; }; struct Struct2017840 @@ -671,20 +687,31 @@ extern struct WishFutureKnock gWishFutureKnock; extern struct AI_ThinkingStruct gAIThinkingSpace; extern struct Struct20238C8 gUnknown_020238C8; -// TODO: move ewram to global.h -extern u8 ewram[]; - -#define BATTLE_STRUCT ((struct BattleStruct *) (ewram + 0x00000)) -#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(ewram + 0x16800)) -#define UNK_2016A00_STRUCT ((struct UnkBattleStruct1 *) (ewram + 0x16A00)) -#define AI_STACK ((struct AI_Stack *) (ewram + 0x16C00)) -#define AI_ARRAY_160CC ((struct SmallItemStruct *) (ewram + 0x160CC)) -#define B_BATTLESCRIPTS_STACK ((struct scriptsStack *) (ewram + 0x17110)) -#define B_FUNCTION_STACK ((struct funcStack *) (ewram + 0x17140)) -#define ewram17800 ((struct Struct2017800 *) (ewram + 0x17800)) -#define ewram17810 ((struct Struct2017810 *) (ewram + 0x17810)) -#define ewram17840 (*(struct Struct2017840 *) (ewram + 0x17840)) -#define ewram17000 ((u32 *) (ewram + 0x17100)) +// used in many battle files, it seems as though Hisashi Sogabe wrote +// some sort of macro to replace the use of actually calling memset. +// Perhaps it was thought calling memset was much slower? + +// The compiler wont allow us to locally declare ptr in this macro; some +// functions that invoke this macro will not match without this egregeous +// assumption about the variable names, so in order to avoid this assumption, +// we opt to pass the variables themselves, even though it is likely that +// Sogabe assumed the variables were named src and dest. Trust me: I tried to +// avoid assuming variable names, but the ROM just will not match without the +// assumptions. Therefore, these macros are bad practice, but I'm putting them +// here anyway. +#define MEMSET_ALT(data, c, size, var, dest) \ +{ \ + dest = (u8 *)data; \ + for(var = 0; var < (u32)size; var++) \ + dest[var] = c; \ +} \ + +#define MEMCPY_ALT(data, dest, size, var, src) \ +{ \ + src = (u8 *)data; \ + for(var = 0; var < (u32)size; var++) \ + dest[var] = src[var]; \ +} \ typedef void (*BattleCmdFunc)(void); @@ -725,7 +752,6 @@ void EmitEffectivenessSound(u8 a, u16 sound); //0x2B void Emitcmd44(u8 a, u16 sound); //0x2C void EmitFaintingCry(u8 a); //0x2D void EmitIntroSlide(u8 a, u8 b); //0x2E -void Emitcmd48(u8 a, u8 *b, u8 c); //0x30 void Emitcmd49(u8 a); //0x31 void EmitSpriteInvisibility(u8 a, u8 b); //0x33 void EmitBattleAnimation(u8 a, u8 b, u16 c); //0x34 diff --git a/include/battle_ai.h b/include/battle_ai.h index 2922da0b3..60ca5d000 100644 --- a/include/battle_ai.h +++ b/include/battle_ai.h @@ -1,11 +1,6 @@ #ifndef GUARD_BATTLEAI_H #define GUARD_BATTLEAI_H -#define AIScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24) -#define AIScriptRead16(ptr) ((ptr)[0] | (ptr)[1] << 8) -#define AIScriptRead8(ptr) ((ptr)[0]) -#define AIScriptReadPtr(ptr) (u8*) AIScriptRead32(ptr) - enum { TARGET, diff --git a/include/battle_anim.h b/include/battle_anim.h index 2386c515c..d807a582a 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -3,20 +3,10 @@ #include "sprite.h" -#define SCRIPT_READ_8(ptr) ((ptr)[0]) -#define SCRIPT_READ_16(ptr) ((ptr)[0] | ((ptr)[1] << 8)) -#define SCRIPT_READ_32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) - #define REG_BGnCNT_BITFIELD(n) (*(struct BGCntrlBitfield *)REG_ADDR_BG##n##CNT) #define REG_BG1CNT_BITFIELD REG_BGnCNT_BITFIELD(1) #define REG_BG2CNT_BITFIELD REG_BGnCNT_BITFIELD(2) -#define EWRAM_14800 ((u16 *)(unk_2000000 + 0x14800)) -#define EWRAM_17800 ((struct UnknownStruct1 *)(unk_2000000 + 0x17800)) -#define EWRAM_17810 ((struct UnknownStruct3 *)(unk_2000000 + 0x17810)) -#define EWRAM_18000 ((u16 *)(unk_2000000 + 0x18000)) -#define EWRAM_19348 (*(u16 *)(unk_2000000 + 0x19348)) - struct BGCntrlBitfield { volatile u16 priority:2; @@ -55,13 +45,12 @@ struct UnknownStruct3 void DoMoveAnim(const u8 *const moveAnims[], u16 b, u8 c); bool8 IsAnimBankSpriteVisible(u8 a); void sub_8076034(u8, u8); -bool8 IsContest(void); +bool8 NotInBattle(void); void battle_anim_clear_some_data(void); void move_anim_8072740(struct Sprite *sprite); void DestroyAnimVisualTask(u8 task); void DestroyAnimVisualTask(u8 task); bool8 IsAnimBankSpriteVisible(u8); -u8 IsContest(); #endif diff --git a/include/battle_party_menu.h b/include/battle_party_menu.h index 200b0c653..d7ad53eed 100644 --- a/include/battle_party_menu.h +++ b/include/battle_party_menu.h @@ -1,9 +1,6 @@ #ifndef GUARD_BATTLE_PARTY_MENU_H #define GUARD_BATTLE_PARTY_MENU_H -extern u8 unk_2000000[]; -#define EWRAM_1609D unk_2000000[0x1609D] - void HandleBattlePartyMenu(u8); bool8 SetUpBattlePartyMenu(void); diff --git a/include/decoration.h b/include/decoration.h index 70abc29bf..8c651f967 100644 --- a/include/decoration.h +++ b/include/decoration.h @@ -204,9 +204,6 @@ struct UnkStruct_803EC860 extern const struct UnkStruct_803EC860 gUnknown_083EC860[]; -extern u8 ewram[]; -#define ewram_1f000 (*(struct DecoPCPointers *)(ewram + 0x1f000)) - struct UnkStruct_02038900 { /*0x000; 0x02038900*/ const struct Decoration *decoration; diff --git a/include/dewford_trend.h b/include/dewford_trend.h index 26075d633..c12d0d740 100644 --- a/include/dewford_trend.h +++ b/include/dewford_trend.h @@ -1,9 +1,6 @@ #ifndef GUARD_DEWFORDTREND_H #define GUARD_DEWFORDTREND_H -#define ARRAY_2007800 ((struct EasyChatPair *)(unk_2000000 + 0x7800)) -#define ARRAY_2007900 ((struct EasyChatPair *)(unk_2000000 + 0x7900)) - void InitDewfordTrend(void); void sub_80FA4E4(void *, u32, u8); void UpdateDewfordTrendPerDay(u16); diff --git a/include/ewram.h b/include/ewram.h new file mode 100755 index 000000000..06ea513a3 --- /dev/null +++ b/include/ewram.h @@ -0,0 +1,258 @@ +#ifndef GUARD_EWRAM_H +#define GUARD_EWRAM_H + +extern u8 gSharedMem[]; +#define ewram_addr 0x02000000 // used in gSharedMem addr hacks + +// Note: we have duplicate ewram labels because its clear some memory +// regions overlap others but have different definitions. Until some +// dupes can be determined to be the same, they will be deliberate +// seperated. +#define eWeatherPaletteData (*(struct WeatherPaletteData *)gSharedMem) +#define BATTLE_STRUCT ((struct BattleStruct *) (gSharedMem + 0x0)) +#define ewram0_2 (*(struct Struct2000000 *)(gSharedMem + 0x0)) +#define namingScreenData (*(struct NamingScreenData *)(gSharedMem + 0x0)) +#define ewramBerryPic (gSharedMem + 0x0) +#define ewram0_3 (*(struct UnknownStruct3 *)(gSharedMem + 0x0)) +#define ewram0_4 (*(struct Unk2000000 *)(gSharedMem + 0x0)) +#define ewram0_5 (*(struct UnkStruct *)(gSharedMem + 0x0)) +#define eMatsudaDebugVar (gSharedMem[0x0]) +#define eBrendanSprite (gSharedMem + 0x0) +#define ewram0_6 (u32)(&gSharedMem[0]) +#define ewram0_7 (&gSharedMem[0]) +#define eSaveSection (struct SaveSection *)(gSharedMem + 0x0) +#define ewram0arr ((u8 (*)[32])gSharedMem) +#define eVoidSharedArr (void *)(ewram_addr + 0x0) +#define eVoidSharedArr2 (u32)(ewram_addr) // ew(ram) +#define ewram0_8 ((struct UnkStruct2000000 *)(gSharedMem + 0x0)) +#define ewram0_9(i) (u8 *)(ewram_addr + (i * 0x20)) +#define ewram0_10 (*(struct UnknownPokenav0*)(gSharedMem + 0)) +#define ewram0_11 (*(struct UnknownPokenav0_1*)(gSharedMem + 0)) +#define ewram4 (*(struct UnknownStruct8 *)(gSharedMem + 0x4)) +#define ewram520 ((struct UnknownStruct7 *)(gSharedMem + 0x00520)) +#define ewram520_2 (u8 *)(ewram_addr + 0x520) +#define eMaySprite (gSharedMem + 0x800) +#define ewram888 (gSharedMem + 0x888) +#define ewramBlankMapName (gSharedMem + 0xA48) +#define ewramA6E (gSharedMem[0xA6E]) +#define ewram01000 (*(struct Unk2001000 *)(gSharedMem + 0x1000)) +#define ewramBerryPicTemp (gSharedMem + 0x1000) +#define EWRAM_1000 (*(struct Struct2001000 *)(gSharedMem + 0x1000)) +#define gUnk20011fa (u8 *)(&gSharedMem[0x11FA]) +#define gUnk2002694 (u8 *)(&gSharedMem[0x2694]) +#define gUnk20026A6 (u8 *)(&gSharedMem[0x26A6]) +#define gUnk20026e4 (u8 *)(&gSharedMem[0x26E4]) +#define ewram4000 (gSharedMem + 0x4000) +#define gUnknown_02007000 (*(ewramStruct_02007000 *)(gSharedMem + 0x7000)) +#define ARRAY_2007800 ((struct EasyChatPair *)(gSharedMem + 0x7800)) +#define ARRAY_2007900 ((struct EasyChatPair *)(gSharedMem + 0x7900)) +#define ewram_2008000 (*(struct PlayerRecords *)(gSharedMem + 0x08000)) +#define ewram8000 (&gSharedMem[0x8000]) +#define ePokedexPalAddr1 (void *)(gSharedMem + 0x8000) +#define ewram8800 (&gSharedMem[0x8800]) +#define ewram9000 (&gSharedMem[0x9000]) +#define ewram9000_hack (void *)(ewram_addr + 0x9000) // TODO: Fix this. +#define ewram9800 (&gSharedMem[0x9800]) +#define ewramA000 (&gSharedMem[0xA000]) +#define ewramA800 (&gSharedMem[0xA800]) +#define ewramB000 (&gSharedMem[0xB000]) +#define ewramB800 (&gSharedMem[0xB800]) +#define TRANSITION_STRUCT (*(struct TransitionData *) (gSharedMem + 0xC000)) +#define ewramC000 (&gSharedMem[0xC000]) +#define ePokedexPalAddr2 (void *)(gSharedMem + 0xC000) +#define ewramC03C (&gSharedMem[0xC03C]) +#define ewramC800 (&gSharedMem[0xC800]) +#define ewramD000 (&gSharedMem[0xD000]) +#define ewramD800 (&gSharedMem[0xD800]) +#define ewramE000 (&gSharedMem[0xE000]) +#define ewramE800 (&gSharedMem[0xE800]) +#define ewramF000 (&gSharedMem[0xF000]) +#define ewramF800 (&gSharedMem[0xF800]) +#define ewram_2010000 (*(struct TradeEwramStruct *)(gSharedMem + 0x10000)) +#define ewram10000 (&gSharedMem[0x10000]) +#define ewram10000_2 (void *)(gSharedMem + 0x10000) // slot machine +#define ePokedexPalAddr3 (void *)(gSharedMem + 0x10000) +#define ewram10800 (&gSharedMem[0x10800]) +#define ewram11000 (&gSharedMem[0x11000]) +#define ewram11800 (&gSharedMem[0x11800]) +#define ewram12000 (&gSharedMem[0x12000]) +#define ewram12800 (&gSharedMem[0x12800]) +#define ewram13000 (&gSharedMem[0x13000]) +#define ewram13800 (&gSharedMem[0x13800]) +#define EWRAM_14000 ((u8 *)(gSharedMem + 0x14000)) +#define ewram14000 (&gSharedMem[0x14000]) +#define ePokedexPalAddr4 (void *)(gSharedMem + 0x14000) +#define ewram14000arr(i, data) (gSharedMem[0x14000 + i + data]) +#define ewram14004arr(i, data) (gSharedMem[0x14004 + i + data]) +#define ewram14008arr(i, data) (gSharedMem[0x14008 + data + i]) +#define ewram14800 (&gSharedMem[0x14800]) +#define EWRAM_14800 ((u16 *)(gSharedMem + 0x14800)) +#define sEvoInfo ((*(struct EvoInfo*)(gSharedMem + 0x14800))) +#define EWRAM_15000 ((u8 *)(gSharedMem + 0x15000)) +#define ewram15000 (&gSharedMem[0x15000]) +#define ewram15000arr(i, data) (gSharedMem[0x15000 + data + i]) +#define ewram15800 (&gSharedMem[0x15800]) +#define ewram15DDE (gSharedMem[0x15DDE]) +#define ewram15DDF (gSharedMem[0x15DDF]) +#define ewram15DE0 ((*(struct ContestEntry*)(gSharedMem + 0x15DE0))) +#define ewram15E00 ((*(struct Unk2015E00*)(gSharedMem + 0x15E00))) +#define ewram16000 (gSharedMem[0x16000]) +#define ewram16000_2 (&gSharedMem[0x16000]) +#define ewram16001 (gSharedMem[0x16001]) +#define ewram16002 (gSharedMem[0x16002]) +#define ewram16003 (gSharedMem[0x16003]) +#define ewram16004arr(i, bank) (gSharedMem[0x16004 + i + bank * 2]) +#define ewram1600C (gSharedMem[0x1600C]) +#define ewram1600E (gSharedMem[0x1600E]) +#define ewram16010arr(bank) (gSharedMem[0x16010 + bank]) +#define ewram1601B (gSharedMem[0x1601B]) +#define eDynamicMoveType (gSharedMem[0x1601C]) +#define eDmgMultiplier (gSharedMem[0x1601F]) +#define ewram16020 ((u8 *)(gSharedMem + 0x16020)) +#define ewram16020arr(i) (gSharedMem[0x16020 + i]) +#define ewram16054 (gSharedMem[0x16054]) +#define ewram16056 (gSharedMem[0x16056]) +#define ewram16058 (gSharedMem[0x16058]) +#define ewram16059 (gSharedMem[0x16059]) +#define ewram16060(bank) (gSharedMem[0x16060 + bank]) +#define BATTLE_PARTY_ID(bank) (gSharedMem[0x16064 + bank]) +#define ewram16064 (&gSharedMem[0x16064]) +#define ewram16064arr(bank) (gSharedMem[0x16064 + bank]) +#define ewram16068arr(i) (gSharedMem[0x16068 + i]) +#define UNK_201606C_ARRAY (gSharedMem + 0x1606C) // lazy define but whatever. +#define ewram1606Carr(i, a) (gSharedMem[0x1606C + i + a * 3]) +#define ewram16078 (gSharedMem[0x16078]) +#define ewram16084 (gSharedMem[0x16084]) +#define ewram16086 (gSharedMem[0x16086]) +#define ewram16087 (gSharedMem[0x16087]) +#define ewram16088 (gSharedMem[0x16088]) +#define ewram16088_2 (*(u8 *)(gSharedMem + 0x16088)) +#define ewram16089 (gSharedMem[0x16089]) +#define ewram16089_2 (*(u8 *)(gSharedMem + 0x16089)) +#define ewram1608Carr(bank) (gSharedMem[0x1608C + bank]) +#define EWRAM_1609D (gSharedMem[0x1609D]) +#define ewram160A1 (gSharedMem[0x160A1]) +#define ewram160A6 (gSharedMem[0x160A6]) +#define ewram160A8 (gSharedMem[0x160A8]) +#define ewram160A9 (gSharedMem[0x160A9]) +#define ewram160AA (gSharedMem[0x160AA]) +#define ewram160AB (gSharedMem[0x160AB]) +#define ewram160AC ((u8 *)(gSharedMem + 0x160AC)) +#define ewram160ACarr(i) (gSharedMem[0x160AC + i]) +#define ewram160ACarr2(i, bank) (gSharedMem[0x160AC + i + bank * 2]) +#define ewram160BC ((u16 *)(gSharedMem + 0x160BC)) // hp +#define ewram160BCarr(bank) (gSharedMem[0x160BC + bank * 2]) +#define ewram160C0 (gSharedMem[0x160C0]) +#define ewram160C2_Flags ((u16 *)(gSharedMem + 0x160C2)) +#define ewram160C4_Callback ((MainCallback *)(gSharedMem + 0x160C4)) +#define ewram160C8 (gSharedMem[0x160C8]) +#define ewram160C8arr(bank) (gSharedMem[0x160C8 + (bank / 2)]) +#define ewram160C9 (gSharedMem[0x160C9]) +#define ewram160CB (gSharedMem[0x160CB]) +#define ewram160CC ((u8 *)(gSharedMem + 0x160CC)) +#define ewram160CCarr(i) (gSharedMem[0x160CC + i]) +#define USED_HELD_ITEM(bank) ((((u16*)(&gSharedMem[0x160CC + bank * 2])))) +#define USED_HELD_ITEMS(bank) (*(u16 *)&gSharedMem[0x160CC + 2 * (bank)]) +#define ewram160D4(bank) (gSharedMem[0x160D4 + (bank / 2) * 2]) +#define ewram160DD (gSharedMem[0x160DD]) +#define ewram160E0(i) (gSharedMem[0x160E0 + i]) +#define ewram160E6 (gSharedMem[0x160E6]) +#define CHOICED_MOVE(bank) (((u16*)(&gSharedMem[0x160E8 + bank * 2]))) +#define ewram160E8 ((u8 *)(gSharedMem + 0x160E8)) +#define ewram160E8arr(i) (gSharedMem[0x160E8 + i]) +#define ewram160E8arr2(i, bank) (gSharedMem[0x160E8 + i + bank * 2]) +#define ewram160F0 ((u8 *)(gSharedMem + 0x160F0)) +#define ewram160F0arr(i) (gSharedMem[0x160F0 + i]) +#define ewram160F8 (gSharedMem[0x160F8]) +#define ewram160F9 (gSharedMem[0x160F9]) +#define eStatHp (gSharedMem[0x160FA]) +#define ewram160FB (gSharedMem[0x160FB]) +#define ewram16100 ((u8 *)(gSharedMem + 0x16100)) +#define ewram16100arr(i) (gSharedMem[0x16100 + i]) +#define ewram16100arr2(i, bank) (gSharedMem[0x16100 + i + bank * 4]) +#define ewram16108 ((u8 *)(gSharedMem + 0x16108)) +#define ewram16108arr(i) (gSharedMem[0x16108 + i]) +#define ewram16110 (gSharedMem[0x16110]) +#define ewram16111 (gSharedMem[0x16111]) +#define ewram16113 (gSharedMem[0x16113]) +#define ewram16400 (gSharedMem + 0x16400) +#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gSharedMem + 0x16800)) +#define UNK_2016A00_STRUCT ((struct UnkBattleStruct1 *) (gSharedMem + 0x16A00)) +#define AI_STACK ((struct AI_Stack *) (gSharedMem + 0x16C00)) +#define AI_ARRAY_160CC(i) (gSharedMem[0x160CC + i * 2]) +#define ewram16800 (&gSharedMem[0x16800]) +#define ewram17000 (&gSharedMem[0x17000]) +#define eLearnMoveStruct (struct LearnMoveStruct *)(gSharedMem + 0x17000) +#define eSecretBaseRecord ((struct SecretBaseRecord *)(gSharedMem + 0x17000)) +#define ewram17002 (&gSharedMem[0x17002]) +#define eFlashFireArr (*(struct Struct2017100 *)(gSharedMem + 0x17100)) +#define B_BATTLESCRIPTS_STACK ((struct scriptsStack *) (gSharedMem + 0x17110)) +#define ewram17130 (gSharedMem[0x17130]) +#define B_FUNCTION_STACK ((struct funcStack *) (gSharedMem + 0x17140)) +#define ewram17160 (gSharedMem[0x17160]) +#define ewram17800 ((struct Struct2017800 *) (gSharedMem + 0x17800)) +#define EWRAM_17800 ((struct UnknownStruct1 *)(gSharedMem + 0x17800)) +#define eTransformStatuses ((struct TransformStatus *)(gSharedMem + 0x17800)) +#define ewram17800_2 (&gSharedMem[0x17800]) +#define ewram17810 ((struct Struct2017810 *) (gSharedMem + 0x17810)) +#define EWRAM_17810 ((struct UnknownStruct3 *)(gSharedMem + 0x17810)) +#define ewram17840 (*(struct Struct2017840 *) (gSharedMem + 0x17840)) +#define ewram17850 ((struct UnknownStruct5 *)(gSharedMem + 0x17850)) +#define ewram_2018000 (*(struct PlayerRecords *)(gSharedMem + 0x18000)) +#define EWRAM_18000 ((u16 *)(gSharedMem + 0x18000)) +#define ewram18000 ((u16 *)(gSharedMem + 0x18000)) +#define ewram18000_2 (&gSharedMem[0x18000]) +#define ewram18000_3 *(struct Pokemon **)(gSharedMem + 0x18000) +#define eBerryBlenderData (struct BerryBlenderData*)(&gSharedMem[0x18000]) +#define eEggHatchData (struct EggHatchData*)(&gSharedMem[0x18000]) +#define ePokedexView1 (struct PokedexView *)(gSharedMem + 0x18000) +#define UNK_2018000_STRUCT (*(struct UnknownStruct2018000 *)(gSharedMem + 0x18000)) +#define ewram18300 ((u16 *)(gSharedMem + 0x18300)) +#define ewram18800 (&gSharedMem[0x18800]) +#define ePokedexView2 (struct PokedexView *)(gSharedMem + 0x18800) +#define ewram19000 (&gSharedMem[0x19000]) +#define ePokedexView3 (struct PokedexView *)(gSharedMem + 0x19000) +#define EWRAM_19348 (*(u16 *)(gSharedMem + 0x19348)) +#define ewram19348 (*(struct Struct2019348 *)(gSharedMem + 0x19348)) +#define ewram19800 (&gSharedMem[0x19800]) +#define ePokedexView4 (struct PokedexView *)(gSharedMem + 0x19800) +#define ewram1A000 (&gSharedMem[0x1A000]) +#define ewram1A800 (&gSharedMem[0x1A800]) +#define ewram1B000 (*(struct Unk201B000 *)(gSharedMem + 0x1B000)) +#define ewram1B000_alt (*(struct Struct201B000 *)(gSharedMem + 0x1B000)) +#define EWRAM_1B000 ewram1B000_alt // FIXME +#define EWRAM_1B000_2 (*(struct Struct201B000 *)(gSharedMem + 0x1B000)) +#define ewram1B000_2 (&gSharedMem[0x1B000]) +#define ewram1B800 (&gSharedMem[0x1B800]) +#define EWRAM_1C000 (*(struct Struct201C000 *)(gSharedMem + 0x1C000)) +#define ewram1C000 (*(struct Unk201C000 *)(gSharedMem + 0x1C000)) +#define ewram1c000 (*(struct Unk201C000 *)(gSharedMem + 0x1C000)) // FIXME, names too similar +#define eHallOfFameMons1 (struct HallofFameMons*)(&gSharedMem[0x1C000]) +#define EWRAM_1C800 (*(struct Unk201C800 *)(gSharedMem + 0x1C800)) +#define ewram1D000 ((struct Pokemon *)(gSharedMem + 0x1D000)) +#define ewram1D000_2 ((u16 *)(gSharedMem + 0x1D000)) +#define ewram1D400 ((u16 *)(gSharedMem + 0x1D400)) +#define ewramSavedItemsPocket ((struct ItemSlot *)(gSharedMem + 0x1E000)) // saved items pocket (for Wally battle) +#define ewram1E000(i) (gSharedMem[0x1E000 + i]) +#define eHallOfFameMons2 (struct HallofFameMons*)(&gSharedMem[0x1E000]) +#define eHallOfFame (struct HallOfFame *)(gSharedMem + 0x1E000) +#define HALL_OF_FAME_SHEET_0 ((u8 *)(gSharedMem + 0x1E000)) +#define ewram1E000_2 (const u8 *)(gSharedMem + 0x1E000) +#define HALL_OF_FAME_SHEET_1 ((u8 *)(gSharedMem + 0x1E800)) +#define ewram_1f000 (*(struct DecoPCPointers *)(gSharedMem + 0x1f000)) +#define ewramSavedPokeballsPocket ((struct ItemSlot *)(gSharedMem + 0x1F000)) // saved Pokeballs pocket (for Wally battle) +#define HALL_OF_FAME_SHEET_2 ((u8 *)(gSharedMem + 0x1F000)) +#define EWRAM_1F800 ((u16 *)(gSharedMem + 0x1F800)) +#define ewram_1F800_2 (const u16 *)(gSharedMem + 0x1F800) +#define ewram1FE00 (*(struct Unk201FE00 *)(gSharedMem + 0x1FE00)) +#define eMailboxInfo (*(struct MailboxStruct *)(gSharedMem + 0x1FE00)) +#define eCutGrassSpriteArray (gSharedMem + 0x1FFF0) // 8 sprite IDs +#define ewram1FFFC (gSharedMem[0x1FFFC]) +#define ewram1FFFD (gSharedMem[0x1FFFD]) +#define gHelperState (gSharedMem[0x1FFFE]) +#define ewram1FFFE (gSharedMem[0x1FFFE]) +#define gReshowState (gSharedMem[0x1FFFF]) +#define ewramBagSetupStep (gSharedMem[0x1FFFF]) +#define ewram1FFFF (gSharedMem[0x1FFFF]) + +#endif diff --git a/include/field_map_obj.h b/include/field_map_obj.h index 19482e71f..8e1fdc8bd 100644 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -344,7 +344,7 @@ void FieldObjectTurnByLocalIdAndMap(u8, u8, u8, u8); const struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8); void FieldObjectHandleDynamicGraphicsId(struct MapObject *); void npc_by_local_id_and_map_set_field_1_bit_x20(u8, u8, u8, u8); -void FieldObjectGetLocalIdAndMap(struct MapObject *, u8 *, u8 *, u8 *); +void FieldObjectGetLocalIdAndMap(struct MapObject *, void *, void *, void *); void sub_805BCC0(s16 x, s16 y); void sub_805BCF0(u8, u8, u8, u8); void sub_805BD48(u8, u8, u8); diff --git a/include/field_weather.h b/include/field_weather.h index 409f76028..b711f91d6 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -20,8 +20,9 @@ void nullsub_39(void); // ASM void sub_807CEBC(u8, u8, s8); -void sub_807D1BC(u8, u8, u8, u8, u16); -void sub_807D304(int, u8, u16); +//void sub_807D1BC(u8, u8, u8, u8, u16); +void sub_807D1BC(u8 a, u8 a2, s8 c, u8 d, u16 e); +void sub_807D304(s8 a, u8 arg2, u16 c); void sub_807D424(u8, u16); // ... void fade_screen(u8, u8); @@ -42,7 +43,7 @@ void sub_80806E4(void); void DoCurrentWeather(void); void sub_8080750(); -u8 sub_807D770(void); +bool8 sub_807D770(void); bool8 sub_807DDFC(void); void SetWeather(u32); void UpdateWeatherPerDay(u16); diff --git a/include/gba/defines.h b/include/gba/defines.h index 0f7f06755..7fd429d9e 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -29,15 +29,16 @@ #define BG_VRAM VRAM #define BG_VRAM_SIZE 0x10000 -#define BG_CHAR_ADDR(n) (BG_VRAM + (0x4000 * (n))) -#define BG_SCREEN_ADDR(n) (BG_VRAM + (0x800 * (n))) +#define BG_CHAR_ADDR(n) (void *)(BG_VRAM + (0x4000 * (n))) +#define BG_SCREEN_ADDR(n) (void *)(BG_VRAM + (0x800 * (n))) +#define BG_TILE_ADDR(n) (void *)(BG_VRAM + (0x80 * (n))) // text-mode BG -#define OBJ_VRAM0 (VRAM + 0x10000) +#define OBJ_VRAM0 (void *)(VRAM + 0x10000) #define OBJ_VRAM0_SIZE 0x8000 // bitmap-mode BG -#define OBJ_VRAM1 (VRAM + 0x14000) +#define OBJ_VRAM1 (void *)(VRAM + 0x14000) #define OBJ_VRAM1_SIZE 0x4000 #define OAM 0x7000000 diff --git a/include/gba/flash_internal.h b/include/gba/flash_internal.h index cbcfb5466..39e14ef73 100644 --- a/include/gba/flash_internal.h +++ b/include/gba/flash_internal.h @@ -35,7 +35,7 @@ struct FlashType { struct FlashSetupInfo { u16 (*programFlashByte)(u16, u32, u8); - u16 (*programFlashSector)(u16, u8 *); + u16 (*programFlashSector)(u16, void *); u16 (*eraseFlashChip)(void); u16 (*eraseFlashSector)(u16); u16 (*WaitForFlashWrite)(u8, u8 *, u8); @@ -46,7 +46,7 @@ struct FlashSetupInfo extern u16 gFlashNumRemainingBytes; extern u16 (*ProgramFlashByte)(u16, u32, u8); -extern u16 (*ProgramFlashSector)(u16, u8 *); +extern u16 (*ProgramFlashSector)(u16, void *); extern u16 (*EraseFlashChip)(void); extern u16 (*EraseFlashSector)(u16); extern u16 (*WaitForFlashWrite)(u8, u8 *, u8); @@ -67,15 +67,15 @@ void SetReadFlash1(u16 *dest); void StopFlashTimer(void); u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)); u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src); -void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size); -u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n); +void ReadFlash(u16 sectorNum, u32 offset, void *dest, u32 size); +u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, void *dataSrc, u32 n); u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData); u16 EraseFlashChip_MX(void); u16 EraseFlashSector_MX(u16 sectorNum); u16 ProgramFlashByte_MX(u16 sectorNum, u32 offset, u8 data); -u16 ProgramFlashSector_MX(u16 sectorNum, u8 *src); +u16 ProgramFlashSector_MX(u16 sectorNum, void *src); // agb_flash_1m u16 IdentifyFlash(void); diff --git a/include/global.h b/include/global.h index 29804a5a9..647f66bc8 100644 --- a/include/global.h +++ b/include/global.h @@ -55,6 +55,24 @@ enum B_32 = 4 }; +// There are many quirks in the source code which have overarching behavioral differences from +// a number of other files. For example, diploma.c seems to declare rodata before each use while +// other files declare out of order and must be at the beginning. There are also a number of +// macros which differ from one file to the next due to the method of obtaining the result, such +// as these below. Because of this, there is a theory (Two Team Theory) that states that these +// programming projects had more than 1 "programming team" which utilized different macros for +// each of the files that were worked on. +#define T1_READ_8(ptr) ((ptr)[0]) +#define T1_READ_16(ptr) ((ptr)[0] | ((ptr)[1] << 8)) +#define T1_READ_32(ptr) ((ptr)[0] | ((ptr)[1] << 8) | ((ptr)[2] << 16) | ((ptr)[3] << 24)) +#define T1_READ_PTR(ptr) (u8*) T1_READ_32(ptr) + +// T2_READ_8 is a duplicate to remain consistent with each group. +#define T2_READ_8(ptr) ((ptr)[0]) +#define T2_READ_16(ptr) ((ptr)[0] + ((ptr)[1] << 8)) +#define T2_READ_32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) +#define T2_READ_PTR(ptr) (void*) T2_READ_32(ptr) + enum { VERSION_SAPPHIRE = 1, diff --git a/include/party_menu.h b/include/party_menu.h index f13c2c2df..304389e78 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -101,12 +101,6 @@ struct UnknownPokemonStruct2 /*0x1D*/ u8 language; }; -extern u8 ewram[]; -#define ewram01000 (*(struct Unk2001000 *)(ewram + 0x01000)) -#define ewram1B000 (*(struct Unk201B000 *)(ewram + 0x1B000)) -#define ewram1B000_alt (*(struct Struct201B000 *)(ewram + 0x1B000)) -#define EWRAM_1B000 ewram1B000_alt - void CB2_PartyMenuMain(void); void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed); void SetPartyMenuSettings(u8 menuType, u8 battleTypeFlags, TaskFunc menuHandlerFunc, u8 textId); diff --git a/include/player_pc.h b/include/player_pc.h index 8debeda88..3302ec634 100644 --- a/include/player_pc.h +++ b/include/player_pc.h @@ -13,6 +13,7 @@ #define SWAP_ITEM_INDEX data[8] #define SWITCH_MODE_ACTIVE data[9] +// this is potentially an ewram access occuring in high ewram. TODO: investigate this further. #define NEW_GAME_PC_ITEMS(i, type) ((u16)((u16 *)gNewGamePCItems + type)[i * 2]) // defined and used in the above macro diff --git a/include/pokemon.h b/include/pokemon.h index 572862b8f..7fc8e181f 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -541,11 +541,13 @@ union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, // but they are not used since some code erroneously omits the third arg. // u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data); // u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data); +// void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg); +// void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg); u32 GetMonData(); u32 GetBoxMonData(); +void SetMonData(); +void SetBoxMonData(); -void SetMonData(struct Pokemon *mon, s32 field, const u8 *data); -void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const u8 *data); void CopyMon(void *dest, void *src, size_t size); u8 GiveMonToPlayer(struct Pokemon *mon); u8 SendMonToPC(struct Pokemon *mon); diff --git a/include/rom3.h b/include/rom3.h index 81bb56df1..19c6def25 100644 --- a/include/rom3.h +++ b/include/rom3.h @@ -1,6 +1,12 @@ #ifndef GUARD_ROM3_H #define GUARD_ROM3_H +struct HpAndStatus +{ + u16 hp; + u32 status; +}; + struct DisableStruct; void sub_800B858(void); @@ -55,7 +61,7 @@ void Emitcmd44(u8 a, u16 b); void EmitFaintingCry(u8 a); void EmitIntroSlide(u8 a, u8 b); void EmitTrainerBallThrow(u8 a); -void Emitcmd48(u8 a, u8 *b, u8 c); +void EmitDrawPartyStatusSummary(u8 a, struct HpAndStatus *hpAndStatus, u8 c); //0x30 void Emitcmd49(u8 a); void Emitcmd50(u8 a); void EmitSpriteInvisibility(u8 a, u8 b); diff --git a/include/save.h b/include/save.h index 6c47c6f60..c35ad547a 100644 --- a/include/save.h +++ b/include/save.h @@ -3,7 +3,7 @@ struct SaveSectionLocation { - void *data; + u8 *data; u16 size; }; diff --git a/include/script_pokemon_80F9.h b/include/script_pokemon_80F9.h index fa5d57f0e..eed32f5cf 100644 --- a/include/script_pokemon_80F9.h +++ b/include/script_pokemon_80F9.h @@ -7,8 +7,6 @@ struct UnknownStruct2018000 u8 unk8; }; -extern struct UnknownStruct2018000 unk_2018000; - void OpenPartyMenuFromScriptContext(u8 taskId); void sub_80F9C00(void); void sub_80F9E1C(void); diff --git a/include/songs.h b/include/songs.h index afd26d683..d22d311ab 100644 --- a/include/songs.h +++ b/include/songs.h @@ -83,16 +83,16 @@ enum SE_TOY_KABE, SE_TOY_DANGO, SE_DOKU, - SE_ESUKA, - SE_T_AME, - SE_T_AME_E, - SE_T_OOAME, - SE_T_OOAME_E, - SE_T_KOAME, - SE_T_KOAME_E, - SE_T_KAMI, - SE_T_KAMI2, - SE_ELEBETA, + /*0x50*/ SE_ESUKA, + /*0x51*/ SE_T_AME, + /*0x52*/ SE_T_AME_E, + /*0x53*/ SE_T_OOAME, + /*0x54*/ SE_T_OOAME_E, + /*0x55*/ SE_T_KOAME, + /*0x56*/ SE_T_KOAME_E, + /*0x57*/ SE_T_KAMI, + /*0x58*/ SE_T_KAMI2, + /*0x59*/ SE_ELEBETA, /*0x5A*/ SE_HINSI, /*0x5B*/ SE_EXPMAX, /*0x5C*/ SE_TAMAKORO, diff --git a/include/sprite.h b/include/sprite.h index 769e1584d..38687ebd8 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -252,7 +252,7 @@ void SetOamMatrix(u8 matrixNum, u16 a, u16 b, u16 c, u16 d); void CalcCenterToCornerVec(struct Sprite *sprite, u8 shape, u8 size, u8 affineMode); void SpriteCallbackDummy(struct Sprite *sprite); void ProcessSpriteCopyRequests(void); -void RequestSpriteCopy(const u8 *src, u8 *dest, u16 size); +void RequestSpriteCopy(const void *src, u8 *dest, u16 size); void FreeSpriteTiles(struct Sprite *sprite); void FreeSpritePalette(struct Sprite *sprite); void FreeSpriteOamMatrix(struct Sprite *sprite); diff --git a/include/string_util.h b/include/string_util.h index 7a4bfa4c1..55fa988b4 100644 --- a/include/string_util.h +++ b/include/string_util.h @@ -29,7 +29,7 @@ u8 *ConvertIntToHexStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 u8 *ConvertIntToDecimalString(u8 *dest, s32 value); u8 *StringExpandPlaceholders(u8 *dest, const u8 *src); u8 *StringBraille(u8 *dest, const u8 *src); -u8 *GetExpandedPlaceholder(u32 id); +const u8 *GetExpandedPlaceholder(u32 id); u8 *StringFill(u8 *dest, u8 c, u16 n); u8 *StringCopyPadded(u8 *dest, const u8 *src, u8 c, u16 n); u8 *StringFillWithTerminator(u8 *dest, u16 n); |