#ifndef GUARD_GLOBAL_H #define GUARD_GLOBAL_H #include #include "gba/gba.h" #include "types.h" #include "functions.h" #include "variables.h" #include "constants/global.h" #include "constants/ereader.h" // Prevent cross-jump optimization. #define BLOCK_CROSS_JUMP asm(""); // to help in decompiling #define asm_comment(x) asm volatile("@ -- " x " -- ") #define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided") #define NAKED __attribute__((naked)) // IDE support #if defined (__APPLE__) || defined (__CYGWIN__) || defined (_MSC_VER) #define _(x) x #define __(x) x #define INCBIN_U8 {0} #define INCBIN_U16 {0} #define INCBIN_U32 {0} #define INCBIN_S8 {0} #define INCBIN_S16 {0} #define INCBIN_S32 {0} #endif // IDE support #define ARRAY_COUNT(array) (size_t)(sizeof(array) / sizeof((array)[0])) #define SWAP(a, b, temp) \ { \ temp = a; \ a = b; \ b = temp; \ } // useful math macros // Converts a number to Q8.8 fixed-point format #define Q_8_8(n) ((s16)((n) * 256)) // Converts a number to Q4.12 fixed-point format #define Q_4_12(n) ((s16)((n) * 4096)) // Converts a number to Q24.8 fixed-point format #define Q_24_8(n) ((s32)((n) * 256)) // Converts a Q8.8 fixed-point format number to a regular integer #define Q_8_8_TO_INT(n) ((int)((n) / 256)) // Converts a Q4.12 fixed-point format number to a regular integer #define Q_4_12_TO_INT(n) ((int)((n) / 4096)) // Converts a Q24.8 fixed-point format number to a regular integer #define Q_24_8_TO_INT(n) ((int)((n) >> 8)) #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) // TODO: define RGB(r, g, b) macro #define RGB_WHITE 0x7FFF // Macros for checking the joypad #define TEST_BUTTON(field, button) ((field) & (button)) #define TEST_BUTTON_EXACT(field, button) (((field) & (button)) == (button)) #define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button) #define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button) struct BgOffsets { u16 xOffset; u16 yOffset; }; // This struct holds data about the ball's velocity, position, etc. struct BallState { /*0x00*/ s8 unk0; /*0x01*/ s8 oamPriority; /*0x02*/ u8 filler2[0x2]; /*0x04*/ u16 unk4; /*0x06*/ s16 unk6; /*0x08*/ s16 unk8; /*0x0A*/ u16 unkA; /*0x0C*/ u16 unkC; /*0x0E*/ u16 scale; /*0x10*/ struct Vector16 positionQ0; /*0x14*/ struct Vector16 prevPositionsQ0[4]; /*0x24*/ struct Vector16 screenPosition; /*0x28*/ struct Vector16 positionQ1; /*0x2C*/ struct Vector16 prevPositionQ1; /*0x30*/ struct Vector16 velocity; /*0x34*/ struct Vector32 positionQ8; // fixed-point Q_24_8 values /*0x3C*/ struct Vector32 prevPositionQ8; }; struct UnkPinballGame13BC { /*0x00*/ s8 unk0; /*0x01*/ s8 unk1; /*0x02*/ s8 unk2; /*0x03*/ s8 unk3; /*0x04*/ s8 unk4; /*0x05*/ s8 unk5; /*0x06*/ s8 unk6; /*0x07*/ u8 unk7; /*0x08*/ s8 unk8; /*0x09*/ u8 filler9[0x3]; }; struct PinballGame { /*0x000*/ u32 unk0; /*0x004*/ u8 newButtonActions[5]; // e.g. player pressing the appropriate buttons to trigger the left flipper action, etc. /*0x009*/ u8 releasedButtonActions[5]; /*0x00E*/ u8 heldButtonActions[5]; /*0x013*/ s8 unk13; // Current field state. In main fields seems to be related to the 3 Pokeballs that unlock bonus fields, in bonus fields acts as a field state /*0x014*/ s8 unk14; /*0x015*/ s8 unk15; /*0x016*/ s8 unk16; /*0x017*/ s8 unk17; /*0x018*/ u16 unk18; /*0x01A*/ s8 unk1A; /*0x01B*/ u8 unk1B; /*0x01C*/ u8 unk1C; /*0x01D*/ u8 unk1D; /*0x01E*/ u8 unk1E; /*0x01F*/ u8 unk1F; /*0x020*/ u8 unk20; /*0x021*/ u8 unk21; /*0x022*/ s8 unk22; /*0x023*/ u8 unk23; // Holds the value of some enum state /*0x024*/ s8 unk24; /*0x025*/ s8 unk25; /*0x026*/ u16 unk26; /*0x028*/ u16 unk28; /*0x02A*/ u16 unk2A; /*0x02C*/ int unk2C; /*0x030*/ s8 numLives; /*0x031*/ u8 ballSpeed; /*0x032*/ s8 unk32; /*0x033*/ s8 unk33; /*0x034*/ s8 unk34; /*0x035*/ s8 area; /*0x036*/ s8 unk36; /*0x038*/ u32 unk38; //score to add every frame until unk3C score has been added to player's total /*0x03C*/ u32 unk3C; //score to add in a bonus field or mode (by completion or other ways, like hitting Duskulls) /*0x040*/ u32 unk40; /*0x044*/ u32 unk44; /*0x048*/ u32 unk48; /*0x04C*/ s16 unk4C; /*0x04E*/ s16 unk4E; /*0x050*/ u8 filler50[0x4]; /*0x054*/ u32 unk54; /*0x058*/ u16 unk58; /*0x05A*/ u16 unk5A; /*0x05C*/ s16 unk5C; /*0x05E*/ u8 filler5E[0x2]; /*0x060*/ struct Vector16 unk60; /*0x064*/ s16 unk64; /*0x066*/ u16 unk66; /*0x068*/ s16 unk68; /*0x06A*/ s16 unk6A; /*0x06C*/ u16 timerBonus; //Additional time to be added to next timed event (Only for bonus fields or all timers?) /*0x06E*/ s8 unk6E; /*0x06F*/ s8 unk6F; /*0x070*/ s8 unk70; /*0x071*/ s8 unk71; /*0x072*/ s8 unk72; /*0x073*/ s8 unk73; /*0x074*/ u16 unk74[4]; /*0x07C*/ u16 unk7C; /*0x07E*/ u16 unk7E; /*0x080*/ s16 unk80; /*0x082*/ s16 unk82; /*0x084*/ struct Vector16 unk84[4]; /*0x094*/ u8 filler94[0x28]; /*0x0BC*/ s16 unkBC; /*0x0BE*/ s16 unkBE; /*0x0C0*/ s16 unkC0; /*0x0C2*/ s16 unkC2; /*0x0C4*/ u16 unkC4; /*0x0C6*/ u16 unkC6; /*0x0C8*/ u8 fillerC8[0x2]; /*0x0CA*/ s16 unkCA; /*0x0CC*/ s16 unkCC; /*0x0CE*/ u16 unkCE; /*0x0D0*/ struct Vector16 unkD0[5]; /*0x0E4*/ u8 unkE4; /*0x0E6*/ s16 unkE6; /*0x0E8*/ s16 unkE8; /*0x0EA*/ u16 unkEA; /*0x0EC*/ u16 unkEC; /*0x0EE*/ s16 unkEE; /*0x0F0*/ u16 unkF0; /*0x0F2*/ s8 unkF2; /*0x0F3*/ u8 unkF3; /*0x0F4*/ s16 unkF4; /*0x0F6*/ s16 unkF6; /*0x0F8*/ s16 unkF8; /*0x0FA*/ s8 unkFA; /*0x0FB*/ s8 unkFB; /*0x0FC*/ s16 unkFC; /*0x0FE*/ s16 unkFE; /*0x100*/ s32 unk100; /*0x104*/ s32 unk104; /*0x108*/ s16 unk108; /*0x10A*/ s16 unk10A; /*0x10C*/ s16 unk10C; /*0x10E*/ s16 unk10E; /*0x110*/ s32 unk110; /*0x114*/ s32 unk114; /*0x118*/ s8 unk118[4]; /*0x11C*/ s8 unk11C[4]; /*0x120*/ s8 unk120; /*0x121*/ s8 unk121; /*0x122*/ s8 unk122; /*0x123*/ s8 unk123; /*0x124*/ s8 unk124; /*0x125*/ s8 unk125; /*0x126*/ s8 unk126; /*0x127*/ s8 unk127; /*0x128*/ u8 unk128; /*0x129*/ s8 unk129; /*0x12A*/ u8 unk12A; /*0x12B*/ s8 forceSpecialMons; // When on, force next catch mode species to be special mons /*0x12C*/ s8 forcePichuEgg; // When on, force next egg mode species to be Pichu /*0x12D*/ u8 filler12D; /*0x12E*/ s16 totalWeight; // Added weight of all possible mons in area /*0x130*/ s16 speciesWeights[25]; // Weight of each species /*0x162*/ s8 unk162; /*0x163*/ s8 unk163; /*0x164*/ s8 unk164; /*0x165*/ s8 unk165; /*0x166*/ u16 unk166; /*0x168*/ u16 unk168; /*0x16A*/ s16 unk16A; /*0x16C*/ s8 unk16C; /*0x16D*/ u8 filler16D[0x1]; /*0x16E*/ s8 unk16E; /*0x16F*/ s8 unk16F; /*0x170*/ s8 unk170[3]; /*0x173*/ u8 unk173; /*0x174*/ u16 unk174; /*0x176*/ u8 unk176; /*0x177*/ u8 filler177[0x1]; /*0x178*/ struct Vector16 unk178[3]; /*0x184*/ struct Vector16 unk184[3]; /*0x190*/ s16 unk190; /*0x192*/ u8 coins; /*0x193*/ s8 unk193; /*0x194*/ s8 unk194; /*0x195*/ s8 unk195; /*0x196*/ u16 unk196; /*0x198*/ s16 unk198[2]; /*0x19C*/ struct Vector16 unk19C[2]; /*0x1A4*/ s8 unk1A4; /*0x1A5*/ s8 unk1A5; /*0x1A6*/ s8 unk1A6; /*0x1A7*/ s8 unk1A7; /*0x1A8*/ s8 unk1A8; /*0x1A9*/ u8 unk1A9; /*0x1AA*/ s8 unk1AA; /*0x1AB*/ s8 unk1AB; /*0x1AC*/ s8 unk1AC; /*0x1AD*/ s8 unk1AD; /*0x1AE*/ u8 unk1AE; /*0x1AF*/ u8 unk1AF; /*0x1B0*/ s8 unk1B0; /*0x1B1*/ u8 filler1B1[0x1]; /*0x1B2*/ u16 unk1B2; /*0x1B4*/ u16 unk1B4; /*0x1B6*/ u16 unk1B6; /*0x1B8*/ s16 unk1B8; /*0x1BA*/ u16 unk1BA; /*0x1BC*/ u16 unk1BC; /*0x1BE*/ s8 unk1BE; /*0x1BF*/ u8 filler1BF[0x1]; /*0x1C0*/ u16 unk1C0; /*0x1C2*/ s8 unk1C2; /*0x1C3*/ u8 filler1C3[0x1]; /*0x1C4*/ u16 unk1C4; /*0x1C6*/ s16 unk1C6; /*0x1C8*/ s16 unk1C8; /*0x1CA*/ s16 unk1CA; /*0x1CC*/ s16 unk1CC; /*0x1CE*/ u16 unk1CE; /*0x1D0*/ u16 unk1D0; /*0x1D2*/ u16 unk1D2; /*0x1D4*/ u16 unk1D4; /*0x1D6*/ u16 unk1D6; /*0x1D8*/ u16 unk1D8; /*0x1DA*/ u16 unk1DA; /*0x1DC*/ u16 unk1DC; /*0x1DE*/ u16 unk1DE; /*0x1E0*/ u16 unk1E0; /*0x1E2*/ s8 outLanePikaPosition; //Pikachu coverage. 0= left lane, 1=right lane, 2 = both /*0x1E3*/ s8 unk1E3[2]; /*0x1E5*/ s8 unk1E5; /*0x1E6*/ s8 unk1E6; /*0x1E7*/ u8 filler1E7[0x1]; /*0x1E8*/ s16 unk1E8; /*0x1EA*/ s16 unk1EA; /*0x1EC*/ s8 unk1EC; /*0x1ED*/ s8 unk1ED; /*0x1EE*/ s8 unk1EE; /*0x1EF*/ u8 unk1EF; /*0x1F0*/ u16 unk1F0; /*0x1F2*/ u8 unk1F2; /*0x1F3*/ u8 unk1F3; /*0x1F4*/ s16 unk1F4; /*0x1F6*/ s16 unk1F6; /*0x1F8*/ s16 unk1F8; /*0x1FA*/ s16 unk1FA; /*0x1FC*/ s32 unk1FC; /*0x200*/ s32 unk200; /*0x204*/ s8 unk204; /*0x205*/ u8 filler205[0x1]; /*0x206*/ u16 unk206; /*0x208*/ u16 unk208; /*0x20A*/ s8 unk20A; /*0x20B*/ s8 unk20B; /*0x20C*/ s8 unk20C; /*0x20D*/ u8 filler20D[0x1]; /*0x20E*/ s16 unk20E; /*0x210*/ u16 unk210; /*0x212*/ u16 unk212[10]; /*0x228*/ struct Vector16 unk228[10]; /*0x250*/ u16 unk250; /*0x252*/ u16 unk252; /*0x254*/ u8 filler254[0x4]; /*0x258*/ s16 unk258; /*0x25A*/ s16 unk25A; /*0x25C*/ s8 unk25C; /*0x25D*/ s8 unk25D; /*0x25E*/ s8 unk25E; /*0x25F*/ s8 unk25F; /*0x260*/ s8 unk260[3]; /*0x263*/ s8 unk263[8]; /*0x26B*/ s8 unk26B; /*0x26C*/ s8 unk26C; /*0x26D*/ u8 filler26D[0x1]; /*0x26E*/ u16 unk26E; /*0x270*/ u8 evolvablePartySpecies[MAX_EVOLVABLE_PARTY_SIZE]; /*0x280*/ s8 evolvingPartyIndex; /*0x281*/ s8 evolvablePartySize; /*0x282*/ s8 unk282; /*0x283*/ u8 numCompletedBonusStages; /*0x284*/ s8 unk284; // Bonus Field to transition to? /*0x285*/ u8 filler285[0x1]; /*0x286*/ u16 unk286; /*0x288*/ s16 unk288; /*0x28A*/ s16 unk28A; /*0x28C*/ u8 filler28C[0x4]; /*0x290*/ u32 unk290; /*0x294*/ s8 unk294; /*0x295*/ u8 unk295; /*0x296*/ u16 eventTimer; //Timer for events (Only bonus fields or all events?) /*0x298*/ u16 unk298; /*0x29A*/ u16 unk29A; /*0x29C*/ u16 unk29C; /*0x29E*/ u8 unk29E; /*0x29F*/ s8 unk29F; /*0x2A0*/ u16 unk2A0; /*0x2A2*/ s8 unk2A2; /*0x2A3*/ s8 unk2A3; /*0x2A4*/ s8 unk2A4; /*0x2A5*/ s8 unk2A5; /*0x2A6*/ u16 unk2A6; /*0x2A8*/ u16 unk2A8; /*0x2AA*/ u16 unk2AA; /*0x2AC*/ s16 unk2AC; /*0x2AE*/ u8 filler2AE[0x2]; /*0x2B0*/ u16 unk2B0; /*0x2B2*/ s8 unk2B2; /*0x2B3*/ u8 filler2B3[0x1]; /*0x2B4*/ s16 unk2B4; /*0x2B6*/ s16 unk2B6; /*0x2B8*/ u16 unk2B8; /*0x2BA*/ u16 unk2BA; /*0x2BC*/ u16 unk2BC; /*0x2BE*/ s8 unk2BE; /*0x2C0*/ u16 unk2C0; /*0x2C2*/ s8 unk2C2; /*0x2C3*/ s8 unk2C3; /*0x2C4*/ u16 unk2C4; /*0x2C6*/ u16 unk2C6; /*0x2C8*/ s16 unk2C8; /*0x2CA*/ s16 unk2CA; /*0x2CC*/ s16 unk2CC; /*0x2CE*/ s16 unk2CE; /*0x2D0*/ s8 unk2D0; /*0x2D1*/ u8 filler2D1[3]; /*0x2D4*/ u16 unk2D4; /*0x2D6*/ u16 unk2D6; /*0x2D8*/ s8 unk2D8; /*0x2D9*/ s8 unk2D9; /*0x2DA*/ s8 unk2DA; /*0x2DB*/ u8 filler2DB[0x3]; /*0x2DE*/ u16 unk2DE; /*0x2E0*/ u16 unk2E0; /*0x2E2*/ s8 unk2E2; /*0x2E3*/ s8 unk2E3[2]; /*0x2E5*/ s8 unk2E5[2]; /*0x2E7*/ u8 filler2E7[0x1]; /*0x2E8*/ u16 unk2E8[2]; /*0x2EC*/ s16 unk2EC[2]; /*0x2F0*/ u8 unk2F0; /*0x2F1*/ u8 unk2F1; /*0x2F2*/ u16 unk2F2; /*0x2F4*/ s8 unk2F4; /*0x2F5*/ s8 unk2F5; /*0x2F6*/ u16 unk2F6; /*0x2F8*/ s8 unk2F8; /*0x2F9*/ s8 unk2F9; /*0x2FA*/ s8 unk2FA; /*0x2FB*/ s8 unk2FB; /*0x2FC*/ s8 unk2FC; /*0x2FD*/ s8 unk2FD; /*0x2FE*/ u16 unk2FE; /*0x300*/ s8 unk300; /*0x301*/ s8 unk301; /*0x302*/ s8 unk302; /*0x303*/ s8 unk303; /*0x304*/ u16 unk304; /*0x306*/ s8 unk306; /*0x307*/ s8 unk307; /*0x308*/ u16 unk308; /*0x30A*/ u16 unk30A; /*0x30C*/ u16 unk30C; /*0x30E*/ s16 unk30E; /*0x310*/ s16 unk310; /*0x312*/ u8 filler312[0x2]; /*0x314*/ s16 unk314; /*0x316*/ s16 unk316; /*0x318*/ s16 unk318; /*0x31A*/ s16 unk31A; /*0x31C*/ s16 unk31C; /*0x31E*/ s16 unk31E; /*0x320*/ s16 unk320; /*0x322*/ s16 unk322; /*0x324*/ s8 unk324; /*0x325*/ u8 filler325[0x1]; /*0x326*/ u16 unk326; /*0x328*/ s8 unk328; /*0x329*/ u8 filler329[0x1]; /*0x32A*/ u16 unk32A; /*0x32C*/ s8 unk32C[3]; /*0x32F*/ s8 unk32F[3]; /*0x332*/ s8 unk332[3]; /*0x335*/ u8 filler335[0x1]; /*0x336*/ u16 unk336[3]; /*0x33C*/ u16 unk33C[3]; /*0x342*/ s8 unk342; /*0x343*/ s8 unk343; /*0x344*/ s8 unk344; /*0x345*/ s8 unk345; /*0x346*/ s8 unk346; /*0x347*/ u8 filler347[0x1]; /*0x348*/ u16 unk348; /*0x34A*/ s8 unk34A; /*0x34B*/ s8 unk34B[10]; /*0x355*/ s8 unk355[4]; /*0x359*/ s8 unk359[4]; /*0x35D*/ u8 filler35D[0x1]; /*0x35E*/ u16 unk35E[4]; /*0x366*/ s8 unk366; /*0x367*/ s8 unk367; /*0x368*/ u16 unk368; /*0x36A*/ s8 unk36A[2]; /*0x36C*/ s8 unk36C[2]; /*0x36E*/ u16 unk36E[2]; /*0x372*/ u16 unk372[2]; /*0x376*/ u16 unk376; /*0x378*/ s8 unk378; /*0x379*/ s8 unk379; /*0x37A*/ s8 unk37A; /*0x37B*/ s8 unk37B; /*0x37C*/ s8 unk37C; /*0x37D*/ s8 unk37D; /*0x37E*/ u16 unk37E; /*0x380*/ u16 unk380; /*0x382*/ s8 unk382; /*0x383*/ s8 unk383; /*0x384*/ s8 unk384; /*0x385*/ s8 unk385; /*0x386*/ s8 unk386; /*0x387*/ s8 unk387; /*0x388*/ s8 unk388; /*0x389*/ s8 unk389; /*0x38A*/ s16 unk38A; /*0x38C*/ s16 unk38C; /*0x38E*/ s16 unk38E; /*0x390*/ u16 unk390; /*0x392*/ u16 unk392; /*0x394*/ s16 unk394; /*0x396*/ s8 unk396; /*0x397*/ s8 unk397[3]; /*0x39A*/ u8 unk39A[3]; /*0x39D*/ s8 unk39D[3]; /*0x3A0*/ s8 unk3A0[3]; /*0x3A3*/ s8 unk3A3[3]; /*0x3A6*/ s8 unk3A6[3]; /*0x3A9*/ s8 unk3A9[3]; /*0x3AC*/ s8 unk3AC[3]; /*0x3B0*/ u16 unk3B0[3]; /*0x3B6*/ u16 unk3B6[3]; /*0x3BC*/ u16 unk3BC[3]; /*0x3C2*/ u8 filler3C2[0x2]; /*0x3C4*/ struct Vector16 unk3C4[3]; /*0x3D0*/ struct Vector16 unk3D0[3]; /*0x3DC*/ s8 unk3DC; /*0x3DD*/ s8 unk3DD; /*0x3DE*/ s8 unk3DE; /*0x3DF*/ s8 unk3DF; /*0x3E0*/ s8 unk3E0; /*0x3E1*/ s8 unk3E1; /*0x3E2*/ s16 unk3E2; /*0x3E4*/ u16 unk3E4; /*0x3E6*/ s16 unk3E6; /*0x3E8*/ s16 unk3E8; /*0x3EA*/ s16 unk3EA; /*0x3EC*/ s16 unk3EC; /*0x3EE*/ s16 unk3EE; /*0x3F0*/ u16 unk3F0; /*0x3F2*/ u16 unk3F2; /*0x3F4*/ s8 unk3F4; /*0x3F5*/ s8 unk3F5; /*0x3F6*/ s8 unk3F6; /*0x3F7*/ s8 unk3F7; /*0x3F8*/ s8 unk3F8; /*0x3F9*/ u8 filler3F9[0x1]; /*0x3FA*/ s16 unk3FA; /*0x3FC*/ s16 unk3FC; /*0x3FE*/ u8 filler3FE[0x2]; /*0x400*/ struct Vector16 unk400; /*0x404*/ s8 unk404; /*0x405*/ s8 unk405; /*0x406*/ s8 unk406; /*0x407*/ u8 filler407[0x1]; /*0x408*/ u16 unk408; /*0x40A*/ u16 unk40A; /*0x40C*/ u16 unk40C; /*0x40E*/ u16 unk40E; /*0x410*/ s16 unk410; /*0x412*/ s16 unk412; /*0x414*/ struct Vector16 unk414; /*0x418*/ struct Vector16 unk418; /*0x41C*/ s8 unk41C[4]; /*0x420*/ s8 unk420[10]; /*0x42A*/ s8 unk42A[7]; /*0x431*/ u8 filler431[0x3]; /*0x434*/ struct Vector16 unk434[3]; /*0x440*/ s8 unk440; /*0x441*/ s8 unk441[2]; /*0x443*/ s8 unk443[2]; /*0x445*/ s8 unk445; /*0x446*/ s8 unk446; /*0x447*/ s8 unk447; /*0x448*/ s8 unk448; /*0x449*/ s8 unk449; /*0x44A*/ s8 unk44A; /*0x44B*/ u8 filler44B[0x1]; /*0x44C*/ u16 unk44C; /*0x44E*/ s16 unk44E; /*0x450*/ u16 unk450; /*0x452*/ u16 unk452; /*0x454*/ u16 unk454; /*0x456*/ u16 unk456; /*0x458*/ u16 unk458[2]; /*0x45C*/ struct Vector16 unk45C[2]; /*0x464*/ struct Vector16 unk464[2]; /*0x46C*/ struct Vector16 unk46C[4]; /*0x47C*/ s8 unk47C; /*0x47D*/ s8 unk47D; /*0x47E*/ s8 unk47E; /*0x47F*/ s8 unk47F; /*0x480*/ u16 unk480; /*0x482*/ u16 unk482; /*0x484*/ u16 unk484; /*0x486*/ s16 unk486; /*0x488*/ struct Vector16 unk488; /*0x48C*/ s8 unk48C[4]; /*0x490*/ s8 unk490[4]; /*0x494*/ s8 unk494[4]; /*0x498*/ s8 unk498[4]; /*0x49C*/ s8 unk49C[4]; /*0x4A0*/ s8 unk4A0[4]; /*0x4A4*/ s8 unk4A4[4]; /*0x4A8*/ s8 unk4A8[4]; /*0x4AC*/ u16 unk4AC[4]; /*0x4B4*/ struct Vector16 unk4B4[4]; /*0x4C4*/ u16 unk4C4; /*0x4C6*/ u16 unk4C6; /*0x4C8*/ s8 unk4C8; /*0x4C9*/ u8 unk4C9; /*0x4CA*/ u16 unk4CA; /*0x4CC*/ s8 unk4CC[3]; /*0x4CF*/ s8 unk4CF[3]; /*0x4D2*/ s8 unk4D2[3]; /*0x4D5*/ s8 unk4D5[3]; /*0x4D8*/ u16 unk4D8[3]; /*0x4DE*/ s16 unk4DE[3]; /*0x4E4*/ s16 unk4E4[3]; /*0x4EA*/ u8 filler4EA[0x2]; /*0x4EC*/ struct Vector16 unk4EC[3]; /*0x4F8*/ struct Vector16 unk4F8[3]; /*0x504*/ u8 unk504; /*0x505*/ s8 unk505; /*0x506*/ s8 unk506; /*0x507*/ s8 unk507; /*0x508*/ s16 unk508; /*0x50A*/ s16 unk50A; /*0x50C*/ u16 unk50C; /*0x50E*/ u16 unk50E; /*0x510*/ u16 unk510; /*0x512*/ u16 unk512; /*0x514*/ u16 unk514; /*0x516*/ u16 unk516; /*0x518*/ s16 unk518; /*0x51A*/ s16 unk51A; /*0x51C*/ struct Vector16 unk51C; /*0x520*/ struct Vector16 unk520; /*0x524*/ struct Vector16 unk524; /*0x528*/ struct Vector16 unk528; /*0x52C*/ s8 unk52C[2]; /*0x52E*/ s8 unk52E[2]; /*0x530*/ s8 unk530[3]; /*0x533*/ s8 unk533[3]; /*0x536*/ s8 unk536[3]; /*0x539*/ u8 filler539[0x1]; /*0x53A*/ u16 unk53A; /*0x53C*/ u16 unk53C[3]; /*0x542*/ u16 unk542; /*0x544*/ u32 unk544; /*0x548*/ s8 unk548[2]; /*0x54A*/ s8 unk54A; /*0x54B*/ s8 unk54B[2]; /*0x54D*/ s8 unk54D[2]; /*0x54F*/ s8 unk54F[2]; /*0x551*/ s8 unk551[2]; /*0x553*/ s8 unk553[2]; /*0x555*/ s8 unk555[2]; /*0x557*/ s8 unk557[2]; /*0x559*/ s8 unk559[2]; /*0x55B*/ s8 unk55B[2]; /*0x55D*/ s8 unk55D[2]; /*0x55F*/ s8 unk55F[2]; /*0x561*/ u8 filler561[0x1]; /*0x562*/ u16 unk562[2]; /*0x566*/ s16 unk566[2]; /*0x56A*/ s16 unk56A[2]; /*0x56E*/ u8 filler56E[0x2]; /*0x570*/ struct Vector16 unk570[2]; /*0x578*/ struct Vector16 unk578[2]; /*0x580*/ struct Vector32 unk580[2]; /*0x590*/ s8 unk590; /*0x591*/ s8 unk591; /*0x592*/ u16 unk592; /*0x594*/ u16 unk594; /*0x596*/ u16 unk596; /*0x598*/ u16 currentSpecies; // Current catch/hatch mode species? Is it evo mode as well? /*0x59A*/ u16 unk59A; /*0x59C*/ u16 lastCatchSpecies; // Previous catch mode species? /*0x59E*/ u16 lastEggSpecies; // Previous hatch/evo mode species? /*0x5A0*/ u16 unk5A0; /*0x5A2*/ u16 unk5A2; /*0x5A4*/ u8 unk5A4; /*0x5A5*/ u8 unk5A5; /*0x5A6*/ u16 unk5A6; /*0x5A8*/ s8 unk5A8; /*0x5A9*/ u8 unk5A9; /*0x5AA*/ u16 unk5AA; /*0x5AC*/ s32 unk5AC; /*0x5B0*/ u16 unk5B0; /*0x5B2*/ s8 unk5B2; /*0x5B3*/ u8 filler5B3[0x6]; /*0x5B9*/ s8 unk5B9[6]; /*0x5BF*/ u8 filler5BF[0x1]; /*0x5C0*/ struct Vector16 unk5C0[6]; /*0x5D8*/ struct Vector16 unk5D8[6]; /*0x5F0*/ u16 caughtMonCount; // Number of mons caught in this game /*0x5F2*/ s8 unk5F2; /*0x5F3*/ s8 unk5F3; /*0x5F4*/ u16 unk5F4; /*0x5F6*/ s8 ballUpgradeType; /*0x5F7*/ u8 unk5F7; /*0x5F8*/ u16 ballUpgradeCounter; /*0x5FA*/ s8 unk5FA; /*0x5FB*/ s8 unk5FB; /*0x5FC*/ s16 unk5FC; /*0x5FE*/ s16 unk5FE; /*0x600*/ u16 unk600; /*0x602*/ s8 unk602; /*0x603*/ s8 unk603; /*0x604*/ u16 unk604; /*0x606*/ u16 unk606; /*0x608*/ u16 unk608; /*0x60A*/ s8 unk60A; /*0x60B*/ s8 unk60B; /*0x60C*/ s16 unk60C; /*0x60E*/ s16 unk60E; /*0x610*/ u16 unk610; /*0x612*/ u16 unk612; /*0x614*/ s16 unk614; /*0x616*/ u16 unk616; /*0x618*/ u16 unk618; /*0x61A*/ s16 unk61A; /*0x61C*/ s8 unk61C; /*0x61D*/ u8 filler61D; /*0x61E*/ u16 unk61E; /*0x620*/ struct Vector16 unk620; /*0x624*/ s8 unk624; /*0x625*/ s8 unk625; /*0x626*/ s8 unk626; /*0x627*/ u8 filler627[0x1]; /*0x628*/ u16 unk628; /*0x62A*/ u8 unk62A; /*0x62B*/ u8 unk62B; /*0x62C*/ u8 unk62C; /*0x62D*/ u8 unk62D; /*0x62E*/ u8 unk62E; /*0x62F*/ u8 unk62F; /*0x630*/ u32 unk630; /*0x634*/ u32 unk634; /*0x638*/ s8 unk638; /*0x639*/ s8 unk639; /*0x63A*/ u16 unk63A; /*0x63C*/ s8 unk63C[3][20]; /*0x678*/ s8 unk678[3][20]; /*0x6B4*/ u32 unk6B4; /*0x6B8*/ u32 unk6B8; /*0x6BC*/ s8 unk6BC; /*0x6BD*/ s8 unk6BD; /*0x6BE*/ s8 unk6BE; /*0x6BF*/ u8 filler6BF[0x1]; /*0x6C0*/ u16 unk6C0; /*0x6C2*/ u16 unk6C2; /*0x6C4*/ s8 unk6C4; /*0x6C5*/ s8 unk6C5; /*0x6C6*/ s8 unk6C6; /*0x6C7*/ s8 unk6C7; /*0x6C8*/ s8 unk6C8; /*0x6C9*/ s8 unk6C9; /*0x6CA*/ u16 unk6CA; /*0x6CC*/ s8 unk6CC; /*0x6CD*/ u8 unk6CD[6]; /*0x6D3*/ u8 unk6D3[6]; /*0x6D9*/ s8 unk6D9[2]; /*0x6DB*/ u8 unk6DB; /*0x6DC*/ u8 unk6DC; /*0x6DD*/ s8 unk6DD; /*0x6DE*/ u16 unk6DE; /*0x6E0*/ s16 unk6E0; /*0x6E2*/ u8 filler6E2[0x2]; /*0x6E4*/ struct Vector16 unk6E4; /*0x6E8*/ s8 unk6E8; /*0x6E9*/ s8 unk6E9; /*0x6EA*/ s8 unk6EA; /*0x6EB*/ s8 unk6EB; /*0x6EC*/ s8 unk6EC[2]; /*0x6EE*/ u16 unk6EE; /*0x6F0*/ u16 unk6F0; /*0x6F2*/ u16 unk6F2; /*0x6F4*/ u16 unk6F4; /*0x6F6*/ u16 unk6F6; /*0x6F8*/ u16 unk6F8[6]; /*0x704*/ u16 unk704; /*0x706*/ u8 filler706[0x2]; /*0x708*/ u32 unk708; /*0x70C*/ u16 unk70C; /*0x70E*/ s8 unk70E; /*0x70F*/ s8 unk70F; /*0x710*/ s8 holeIndicators[4]; // 'HOLE' light indicators in Ruby/Sapphire field /*0x714*/ s8 unk714; /*0x715*/ u8 unk715; /*0x716*/ u8 unk716; /*0x717*/ u8 unk717; /*0x718*/ s8 ballPowerUpLight[3]; /*0x71B*/ s8 unk71B; /*0x71C*/ u8 unk71C; /*0x71D*/ s8 unk71D[3]; /*0x720*/ u8 unk720; /*0x721*/ s8 unk721; /*0x722*/ s8 unk722; /*0x723*/ s8 unk723; /*0x724*/ u16 unk724; /*0x726*/ s8 unk726; /*0x727*/ u8 filler727[0x1]; /*0x728*/ s8 unk728; /*0x729*/ s8 unk729; /*0x72A*/ s8 unk72A; /*0x72B*/ s8 unk72B; /*0x72C*/ u16 unk72C; /*0x72E*/ s8 unk72E; /*0x72F*/ s8 unk72F; /*0x730*/ s8 unk730; /*0x731*/ s8 unk731; /*0x732*/ s8 unk732; /*0x733*/ u8 filler733[0x1]; /*0x734*/ s16 unk734; /*0x736*/ s8 unk736[3]; /*0x739*/ s8 unk739[3]; /*0x73C*/ u8 unk73C; // TODO: unknown type /*0x73D*/ s8 catchModeArrows; // Affects which encounter table is used per area /*0x73E*/ u8 filler73E[0x2]; /*0x740*/ u8 unk740; /*0x741*/ u8 filler741[0x3]; /*0x744*/ u8 unk744[2]; /*0x746*/ u8 unk746; /*0x747*/ u8 unk747[2]; /*0x749*/ u8 unk749[2]; /*0x74B*/ u8 filler74B[0x1]; /*0x74C*/ volatile u8 unk74C[2][OBJ_PLTT_SIZE]; /*0xB4C*/ volatile u8 unkB4C[2][BG_PLTT_SIZE]; /*0xF4C*/ struct SongHeader *unkF4C; /*0xF50*/ u8 fillerF50[0x8]; /*0xF58*/ struct BgOffsets bgOffsets0; /*0xF5C*/ struct BgOffsets bgOffsets1; /*0xF60*/ struct BgOffsets bgOffsets2; /*0xF64*/ struct BgOffsets bgOffsets3; /*0xF68*/ u16 unkF68[2][100]; /*0x10F8*/u8 eReaderBonuses[NUM_EREADER_CARDS]; /*0x10FD*/u8 field; /*0x10FE*/u8 unk10FE; /*0x10FF*/u8 unk10FF; /*0x1100*/u8 unk1100; /*0x1101*/u8 unk1101; /*0x1102*/u8 unk1102; /*0x1103*/u8 unk1103; /*0x1104*/s8 unk1104; //Pause Menu Pointer index /*0x1105*/u8 filler1105[0x1]; /*0x1106*/volatile u16 unk1106; /*0x1108*/volatile u16 unk1108; /*0x110A*/volatile u16 unk110A; /*0x110C*/u16 unk110C; /*0x110E*/u16 unk110E; /*0x1110*/volatile u16 unk1110; /*0x1112*/volatile u16 unk1112; /*0x1114*/volatile u16 unk1114; /*0x1116*/u16 unk1116; /*0x1118*/u16 unk1118; /*0x111A*/u16 unk111A[OBJ_PLTT_SIZE / 0x20][0x10]; /*0x131A*/u8 filler131A[0x2]; /*0x131C*/u32 unk131C; //Time since paused /*0x1320*/s16 unk1320; /*0x1322*/s16 unk1322; /*0x1324*/s16 unk1324; /*0x1326*/s16 unk1326; /*0x1328*/u16 unk1328; /*0x132A*/u8 filler132A[0x2]; /*0x132C*/struct BallState *ball; /*0x1330*/struct BallState *unk1330; /*0x1334*/struct BallState unk1334[2]; /*0x13BC*/struct UnkPinballGame13BC unk13BC[2]; /*0x13D4*/u16 unk13D4[10]; /*0x13E8*/struct Vector16 unk13E8[10]; } /* size=0x1410 */; struct Unk02031520_unk10 { /*0x0*/ u8 unk0; /*0x1*/ u8 unk1; /*0x2*/ u8 unk2; }; struct Unk02031520_unk14 { /* These field offsets are intentionally kept as relative to struct Unk02031520 to make decompiling easier. This struct is basically always accessed relative to struct Unk02031520. */ /*0x14*/ s16 unk14; /*0x16*/ s16 unk16; /*0x18*/ s16 unk18; /*0x1A*/ s16 unk1A; /*0x1C*/ u16 unk1C; /*0x1E*/ u8 filler1E[0x2]; /*0x20*/ s16 unk20; /*0x22*/ s16 unk22; /*0x24*/ s16 unk24; /*0x26*/ s16 unk26; /*0x28*/ s16 unk28; /*0x2A*/ s16 unk2A; /*0x2C*/ u8 *unk2C[3]; /*0x38*/ const s16 *unk38[4]; /*0x48*/ const u16 *unk48[4]; /*0x58*/ const u8 *unk58[4]; }; struct Unk02031520 { /*0x00*/ u8 eReaderBonuses[NUM_EREADER_CARDS]; /*0x05*/ bool8 rumbleEnabled; /*0x06*/ s16 unk6; /*0x08*/ s16 unk8; /*0x0A*/ u8 fillerA[0x2]; /*0x0C*/ struct PinballGame *unkC; /*0x10*/ struct Unk02031520_unk10 *unk10; /*0x14*/ struct Unk02031520_unk14 unk14; /*0x68*/ const u16 *unk68; }; struct Unk086ACE8C { u16 unk0; u16 unk2; u16 unk4; u16 unk6; }; extern struct PinballGame *gCurrentPinballGame; extern const StateFunc gIdlePinballGameStateFuncs[]; extern u32 gUnknown_02031510; extern struct Unk02031520 gUnknown_02031520; extern u8 gUnknown_02031590[]; extern u16 gUnknown_08137B3C[][6][16]; extern u16 gUnknown_08137D40[]; extern const u8 gUnknown_08137E14[][0x20]; extern const u8 gUnknown_08138834[]; extern struct Unk02031520_unk10 gUnknown_081450F4; extern struct Unk02031520_unk10 gUnknown_08148934; extern struct Unk02031520_unk10 gUnknown_0814C174; extern struct Unk02031520_unk10 gUnknown_0814F9B4; extern struct PinballGame gUnknown_081531F4; extern struct PinballGame gUnknown_08154618; extern struct PinballGame gUnknown_08155A3C; extern struct PinballGame gUnknown_08156E60; extern s32 gUnknown_081B36A4[64]; extern s32 gUnknown_082EE0E0[0x3E0]; extern u16 gUnknown_0832D604[0x1600]; extern u16 gUnknown_08330204[0x1600]; extern u16 gUnknown_08340B58[]; extern u16 gUnknown_083499D8[]; extern u16 gUnknown_0834DBD8[]; extern u16 gUnknown_083579C8[0x3800]; extern u16 gUnknown_0835E9C8[0x2A80]; extern const u16 gUnknown_08391A4C[0x1000]; extern const u16 gUnknown_08393A4C[0x1000]; extern u8 gUnknown_083FE44C[][0x200]; extern u16 gUnknown_08494E4C[]; extern u16 gUnknown_084EDACC[]; extern u8 gUnknown_084FF30C[]; extern struct SongHeader gUnknown_0869F7C8; extern struct SongHeader gUnknown_086A17D8; extern const s16 gUnknown_086ACDF4[9]; //Possibly only 4, with a gap? extern const s16 gUnknown_086ACDF4[9]; typedef s16 (*Unk86ACE0C)(struct Vector16*, u16*); extern Unk86ACE0C BoardCollisionFuncts_086ACE0C[8]; extern struct Vector16 gUnknown_086ACE60[4]; extern struct Unk086ACE8C gUnknown_086ACE8C[13]; extern u16 gUnknown_086ACEF4[2]; extern const u8 *const gUnknown_086ACEF8[]; extern const u8 *const gUnknown_086ACF18[]; extern s16 gUnknown_086AE68E[][2]; extern u16 gUnknown_086B4568[][45]; extern const u8 gUnknown_084F61EC[]; extern u8 gUnknown_081B45A4[]; extern const u16 gUnknown_086AD2DE[]; extern u8 gUnknown_081B8984[]; extern u8 gUnknown_081B8784[]; extern u8 gUnknown_081B4584[]; extern u8 gUnknown_081B4784[]; extern const u16 gUnknown_086AD000[][4]; extern u32 gUnknown_086AD50C[]; extern const u16 gUnknown_08252B10[]; extern const u16 gUnknown_083071D4[]; extern u8 *gMonPortraitGroupGfx[]; extern u8 *gMonPortraitGroupPals[]; extern u8 gUnknown_02030760[]; extern u8 gUnknown_02031060[]; extern const u8 gUnknown_08395A4C[]; extern const u8 gUnknown_08397E6C[]; extern const u8 gUnknown_083A8EEC[][0x300]; extern const u8 gUnknown_083BB16C[][0x80]; extern const u8 gUnknown_083BD36C[][0x200]; extern const u8 gUnknown_0844838C[][0x300]; extern const u8 gUnknown_0848D68C[][0x300]; extern const u8 gUnknown_084C00EC[][0x80]; extern const u8 gUnknown_084C07EC[]; extern const u8 gUnknown_084FA48C[][0x120]; extern const u8 gUnknown_084FD18C[][0x200]; extern const u8 *gUnknown_086AD49C[]; extern const u16 gUnknown_086AD2EE[][4]; #endif // GUARD_GLOBAL_H