Merge pull request #300 from DizzyEggg/decompile_battle_frontier_1

Decompile battle_dome
This commit is contained in:
Diegoisawesome
2018-08-29 14:13:39 -05:00
committed by GitHub
87 changed files with 7832 additions and 16082 deletions
+9 -9
View File
@@ -1606,22 +1606,22 @@ static void OpponentHandleChoosePokemon(void)
{
s32 chosenMonId;
if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) == 6)
if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) == PARTY_SIZE)
{
chosenMonId = GetMostSuitableMonToSwitchInto();
if (chosenMonId == 6)
if (chosenMonId == PARTY_SIZE)
{
s32 bank1, bank2, firstId, lastId;
s32 battler1, battler2, firstId, lastId;
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
{
bank2 = bank1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
battler2 = battler1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
}
else
{
bank1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
bank2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
battler1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
battler2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
}
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
@@ -1639,8 +1639,8 @@ static void OpponentHandleChoosePokemon(void)
for (chosenMonId = firstId; chosenMonId < lastId; chosenMonId++)
{
if (GetMonData(&gEnemyParty[chosenMonId], MON_DATA_HP) != 0
&& chosenMonId != gBattlerPartyIndexes[bank1]
&& chosenMonId != gBattlerPartyIndexes[bank2])
&& chosenMonId != gBattlerPartyIndexes[battler1]
&& chosenMonId != gBattlerPartyIndexes[battler2])
{
break;
}
@@ -1650,7 +1650,7 @@ static void OpponentHandleChoosePokemon(void)
else
{
chosenMonId = *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler);
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = 6;
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
}
+1 -1
View File
@@ -31,13 +31,13 @@
#include "item_use.h"
#include "recorded_battle.h"
#include "party_menu.h"
#include "battle_dome.h"
extern u8 gUnknown_0203CEE8;
extern u8 gUnknown_0203CEE9;
extern u8 gUnknown_0203CF00[];
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
extern s32 gUnknown_0203CD70;
extern struct UnusedControllerStruct gUnknown_02022D0C;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern struct SpriteTemplate gMultiuseSpriteTemplate;
+6488
View File
File diff suppressed because it is too large Load Diff
+118
View File
@@ -0,0 +1,118 @@
#include "global.h"
#include "event_data.h"
#include "battle_setup.h"
#include "overworld.h"
#include "random.h"
#include "battle_tower.h"
extern void sub_8162614(u16, u8);
extern void (* const gUnknown_0860DE50[])(void);
extern const u32 gUnknown_0860DE98[][2];
extern const u32 gUnknown_0860DEA8[][2];
// code
void sub_8195960(void)
{
gUnknown_0860DE50[gSpecialVar_0x8004]();
}
void sub_8195980(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
gSaveBlock2Ptr->frontier.field_CA8 = 0;
gSaveBlock2Ptr->frontier.field_CB2 = 0;
gSaveBlock2Ptr->frontier.field_CA9_a = 0;
gSaveBlock2Ptr->frontier.field_CA9_b = 0;
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]))
gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] = 0;
saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
gTrainerBattleOpponent_A = 0;
}
void sub_8195A38(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
switch (gSpecialVar_0x8005)
{
case 0:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC4[1];
break;
case 1:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode];
break;
case 2:
gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]) != 0);
break;
}
}
void sub_8195AE4(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
switch (gSpecialVar_0x8005)
{
case 0:
gSaveBlock2Ptr->frontier.field_DC4[1] = gSpecialVar_0x8006;
break;
case 1:
gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] = gSpecialVar_0x8006;
break;
case 2:
if (gSpecialVar_0x8006)
gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860DE98[battleMode][lvlMode];
else
gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860DEA8[battleMode][lvlMode];
break;
}
}
void sub_8195BB0(void)
{
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 50)
gSpecialVar_Result = Random() % 3;
else if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 99)
gSpecialVar_Result = 3;
else
gSpecialVar_Result = 4;
}
void sub_8195C20(void)
{
gTrainerBattleOpponent_A = 5 *(Random() % 255) / 64u;
sub_8162614(gTrainerBattleOpponent_A, 0);
}
void sub_8195C50(void)
{
if (gTrainerBattleOpponent_A < 300)
ConvertBattleFrontierTrainerSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore);
}
/*
void sub_8195C7C(void)
{
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 9999)
{
u16 wat = 0;
gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode]++;
if (lvlMode < gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode])
wat = 1;
if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][wat] != 0)
gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode];
}
}
*/
+2 -2
View File
@@ -3929,7 +3929,7 @@ static void TryDoEventsBeforeFirstTurn(void)
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
{
StopCryAndClearCrySongs();
BattleScriptExecute(BattleScript_82DB8BE);
BattleScriptExecute(BattleScript_ArenaTurnBeginning);
}
}
@@ -4019,7 +4019,7 @@ void BattleTurnPassed(void)
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
BattleScriptExecute(BattleScript_82DB881);
else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->field_DA == 0)
BattleScriptExecute(BattleScript_82DB8BE);
BattleScriptExecute(BattleScript_ArenaTurnBeginning);
}
u8 IsRunningFromBattleImpossible(void)
+1 -1
View File
@@ -1248,7 +1248,7 @@ static const u8 sText_Round2[] = _("Round 2");
static const u8 sText_Semifinal[] = _("Semifinal");
static const u8 sText_Final[] = _("Final");
const u8 * const gRoundsStringTable[] =
const u8 *const gRoundsStringTable[] =
{
sText_Round1,
sText_Round2,
+2 -2
View File
@@ -6750,10 +6750,10 @@ static void atk76_various(void)
}
}
break;
case 21:
case VARIOUS_VOLUME_DOWN:
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x55);
break;
case 22:
case VARIOUS_VOLUME_UP:
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
break;
case 23:
+3 -2
View File
@@ -33,6 +33,7 @@
#include "field_weather.h"
#include "gym_leader_rematch.h"
#include "constants/map_types.h"
#include "constants/battle_frontier.h"
enum
{
@@ -863,7 +864,7 @@ u8 sub_80B100C(s32 arg0)
return sUnknown_0854FEA7[Random() % ARRAY_COUNT(sUnknown_0854FEA7)];
}
if (VarGet(VAR_0x40CE) != 3)
if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS)
return sUnknown_0854FE98[Random() % ARRAY_COUNT(sUnknown_0854FE98)];
}
else
@@ -880,7 +881,7 @@ u8 sub_80B100C(s32 arg0)
return sUnknown_0854FEA7[Random() % ARRAY_COUNT(sUnknown_0854FEA7)];
}
if (VarGet(VAR_0x40CE) != 3)
if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS)
return sUnknown_0854FE98[Random() % ARRAY_COUNT(sUnknown_0854FE98)];
}
+268 -8
View File
@@ -11,7 +11,11 @@
#include "constants/items.h"
#include "constants/region_map_sections.h"
// this file's functions
extern const struct BattleFrontierTrainer gSlateportBattleTentTrainers[];
extern const struct FacilityMon gSlateportBattleTentMons[];
extern const u16 gBattleFrontierHeldItems[];
// This file's functions.
void sub_81B99D4(void);
void sub_81B9A28(void);
void sub_81B9A44(void);
@@ -51,7 +55,7 @@ void (*const gUnknown_086160B4[])(void) =
sub_81B9B28
};
const u16 gUnknown_086160D4[] = {ITEM_NEST_BALL, ITEM_NONE};
static const u16 sVerdanturfTentRewards[] = {ITEM_NEST_BALL};
void (*const gUnknown_086160D8[])(void) =
{
@@ -64,7 +68,7 @@ void (*const gUnknown_086160D8[])(void) =
sub_81B9CF0
};
const u16 gUnknown_086160F4[] = {ITEM_HYPER_POTION, ITEM_NONE};
static const u16 sFallarborTentRewards[] = {ITEM_HYPER_POTION};
void (*const gUnknown_086160F8[])(void) =
{
@@ -80,7 +84,7 @@ void (*const gUnknown_086160F8[])(void) =
sub_81B9EC0
};
const u16 gUnknown_08616120[] = {ITEM_FULL_HEAL, ITEM_NONE};
static const u16 sSlateportTentRewards[] = {ITEM_FULL_HEAL};
// code
void sub_81B99B4(void)
@@ -115,7 +119,7 @@ void sub_81B9A60(void)
void sub_81B9A90(void)
{
if (gTrainerBattleOpponent_A < 300)
ConvertBattleFrontierTrainerSpeechToString(gUnknown_0203BC88[gTrainerBattleOpponent_A].speechBefore);
ConvertBattleFrontierTrainerSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore);
}
void sub_81B9ABC(void)
@@ -128,7 +132,7 @@ void sub_81B9ABC(void)
void sub_81B9B00(void)
{
gSaveBlock2Ptr->frontier.field_E6A = gUnknown_086160D4[Random() % 1];
gSaveBlock2Ptr->frontier.field_E6A = sVerdanturfTentRewards[Random() % ARRAY_COUNT(sVerdanturfTentRewards)];
}
void sub_81B9B28(void)
@@ -178,7 +182,7 @@ void sub_81B9C2C(void)
void sub_81B9C70(void)
{
gSaveBlock2Ptr->frontier.field_E6C = gUnknown_086160F4[Random() % 1];
gSaveBlock2Ptr->frontier.field_E6C = sFallarborTentRewards[Random() % ARRAY_COUNT(sFallarborTentRewards)];
}
void sub_81B9C98(void)
@@ -233,7 +237,7 @@ void sub_81B9DB4(void)
void sub_81B9DF8(void)
{
gSaveBlock2Ptr->frontier.field_E6E = gUnknown_08616120[Random() % 1];
gSaveBlock2Ptr->frontier.field_E6E = sSlateportTentRewards[Random() % ARRAY_COUNT(sSlateportTentRewards)];
}
void sub_81B9E20(void)
@@ -266,3 +270,259 @@ bool8 sub_81B9E94(void)
return (gMapHeader.regionMapSectionId == MAPSEC_SLATEPORT_CITY
&& ((gMapHeader.mapLayoutId == 385) | (gMapHeader.mapLayoutId == 386)));
}
// This function was written very...oddly.
#ifdef NONMATCHING
void sub_81B9EC0(void)
{
s32 i, j;
u16 currMonId = 0, currSpecies = 0;
u16 species[PARTY_SIZE];
u16 monIds[PARTY_SIZE];
u16 heldItems[PARTY_SIZE];
s32 zero = 0;
gFacilityTrainers = gSlateportBattleTentTrainers;
for (i = 0; i < PARTY_SIZE; i++)
{
species[i] = 0;
monIds[i] = 0;
heldItems[i] = 0;
}
gFacilityTrainerMons = gSlateportBattleTentMons;
currSpecies = 0;
for (i = 0; i != PARTY_SIZE;)
{
// Cannot have two pokemon of the same species.
currMonId = Random() % 70;
for (j = zero; j < i + zero; j++)
{
if (monIds[j] == currMonId)
break;
if (species[j] == gFacilityTrainerMons[currMonId].species)
{
if (currSpecies == 0)
currSpecies = gFacilityTrainerMons[currMonId].species;
else
break;
}
}
if (j != i + zero)
continue;
// Cannot have two same held items.
for (j = zero; j < i + zero; j++)
{
if (heldItems[j] == 0)
continue;
if (heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId])
{
if (gFacilityTrainerMons[currMonId].species == currSpecies)
currSpecies = 0;
else
break;
}
}
if (j != i + zero)
continue;
gSaveBlock2Ptr->frontier.field_E70[i].monId = currMonId;
species[i] = gFacilityTrainerMons[currMonId].species;
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId];
monIds[i] = currMonId;
i++;
}
}
#else
NAKED
void sub_81B9EC0(void)
{
asm_unified("\n\
push {r4-r7,lr}\n\
mov r7, r10\n\
mov r6, r9\n\
mov r5, r8\n\
push {r5-r7}\n\
sub sp, 0x3C\n\
ldr r1, =gFacilityTrainers\n\
ldr r0, =gSlateportBattleTentTrainers\n\
str r0, [r1]\n\
add r0, sp, 0xC\n\
mov r9, r0\n\
mov r1, sp\n\
adds r1, 0x18\n\
str r1, [sp, 0x2C]\n\
ldr r5, =gFacilityTrainerMons\n\
ldr r4, =gSlateportBattleTentMons\n\
movs r2, 0\n\
adds r3, r1, 0\n\
mov r1, r9\n\
mov r0, sp\n\
movs r6, 0x5\n\
mov r8, r6\n\
_081B9EEC:\n\
strh r2, [r0]\n\
strh r2, [r1]\n\
strh r2, [r3]\n\
adds r3, 0x2\n\
adds r1, 0x2\n\
adds r0, 0x2\n\
movs r7, 0x1\n\
negs r7, r7\n\
add r8, r7\n\
mov r6, r8\n\
cmp r6, 0\n\
bge _081B9EEC\n\
str r4, [r5]\n\
movs r7, 0\n\
mov r10, r7\n\
movs r0, 0\n\
mov r8, r0\n\
ldr r1, [sp, 0x2C]\n\
str r1, [sp, 0x30]\n\
mov r2, sp\n\
str r2, [sp, 0x34]\n\
lsls r6, r0, 1\n\
str r6, [sp, 0x24]\n\
add r6, r9\n\
str r6, [sp, 0x28]\n\
_081B9F1E:\n\
bl Random\n\
lsls r0, 16\n\
lsrs r0, 16\n\
movs r1, 0x46\n\
bl __umodsi3\n\
lsls r0, 16\n\
lsrs r5, r0, 16\n\
movs r2, 0\n\
mov r7, r8\n\
adds r6, r2, r7\n\
cmp r2, r6\n\
bge _081B9F7C\n\
ldr r1, [sp, 0x28]\n\
ldrh r0, [r1]\n\
cmp r0, r5\n\
beq _081B9F7C\n\
ldr r0, =gFacilityTrainerMons\n\
ldr r1, [r0]\n\
lsls r0, r5, 4\n\
adds r4, r0, r1\n\
ldrh r7, [r4]\n\
mov r12, r7\n\
lsls r3, r2, 1\n\
ldr r1, [sp, 0x24]\n\
add r1, sp\n\
str r6, [sp, 0x38]\n\
_081B9F56:\n\
ldrh r0, [r1]\n\
cmp r0, r12\n\
bne _081B9F66\n\
mov r0, r10\n\
cmp r0, 0\n\
bne _081B9F7C\n\
ldrh r7, [r4]\n\
mov r10, r7\n\
_081B9F66:\n\
adds r3, 0x2\n\
adds r1, 0x2\n\
adds r2, 0x1\n\
ldr r0, [sp, 0x38]\n\
cmp r2, r0\n\
bge _081B9F7C\n\
mov r7, r9\n\
adds r0, r7, r3\n\
ldrh r0, [r0]\n\
cmp r0, r5\n\
bne _081B9F56\n\
_081B9F7C:\n\
cmp r2, r6\n\
bne _081BA01C\n\
movs r2, 0\n\
cmp r2, r6\n\
bge _081B9FD4\n\
ldr r0, =gBattleFrontierHeldItems\n\
mov r12, r0\n\
ldr r7, =gFacilityTrainerMons\n\
ldr r1, [sp, 0x24]\n\
ldr r0, [sp, 0x2C]\n\
adds r4, r1, r0\n\
_081B9F92:\n\
ldrh r3, [r4]\n\
cmp r3, 0\n\
beq _081B9FCC\n\
ldr r1, [r7]\n\
lsls r0, r5, 4\n\
adds r1, r0, r1\n\
ldrb r0, [r1, 0xA]\n\
lsls r0, 1\n\
add r0, r12\n\
ldrh r0, [r0]\n\
cmp r3, r0\n\
bne _081B9FCC\n\
ldrh r0, [r1]\n\
cmp r0, r10\n\
bne _081B9FD4\n\
movs r1, 0\n\
mov r10, r1\n\
b _081B9FD4\n\
.pool\n\
_081B9FCC:\n\
adds r4, 0x2\n\
adds r2, 0x1\n\
cmp r2, r6\n\
blt _081B9F92\n\
_081B9FD4:\n\
cmp r2, r6\n\
bne _081BA01C\n\
ldr r0, =gSaveBlock2Ptr\n\
ldr r1, [r0]\n\
mov r2, r8\n\
lsls r3, r2, 1\n\
adds r0, r3, r2\n\
lsls r0, 2\n\
adds r1, r0\n\
movs r6, 0xE7\n\
lsls r6, 4\n\
adds r1, r6\n\
strh r5, [r1]\n\
ldr r0, =gFacilityTrainerMons\n\
ldr r0, [r0]\n\
lsls r1, r5, 4\n\
adds r1, r0\n\
ldrh r0, [r1]\n\
ldr r7, [sp, 0x34]\n\
strh r0, [r7]\n\
ldr r2, =gBattleFrontierHeldItems\n\
ldrb r0, [r1, 0xA]\n\
lsls r0, 1\n\
adds r0, r2\n\
ldrh r0, [r0]\n\
ldr r1, [sp, 0x30]\n\
strh r0, [r1]\n\
add r3, r9\n\
strh r5, [r3]\n\
adds r1, 0x2\n\
str r1, [sp, 0x30]\n\
adds r2, r7, 0\n\
adds r2, 0x2\n\
str r2, [sp, 0x34]\n\
movs r6, 0x1\n\
add r8, r6\n\
_081BA01C:\n\
mov r7, r8\n\
cmp r7, 0x6\n\
beq _081BA024\n\
b _081B9F1E\n\
_081BA024:\n\
add sp, 0x3C\n\
pop {r3-r5}\n\
mov r8, r3\n\
mov r9, r4\n\
mov r10, r5\n\
pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
.pool\n\
");
}
#endif // NONMATCHING
+85
View File
@@ -0,0 +1,85 @@
#include "global.h"
#include "event_data.h"
#include "battle_setup.h"
#include "overworld.h"
#include "random.h"
#include "battle_tower.h"
extern void sub_81A3ACC(void);
extern const u32 gUnknown_085DF9AC[][2];
extern const u32 gUnknown_085DF9CC[][2];
extern void (* const gUnknown_085DF96C[])(void);
// This file's functions.
void sub_8164ED8(void);
u16 sub_8164FCC(u8, u8);
// code
void sub_8161F74(void)
{
gUnknown_085DF96C[gSpecialVar_0x8004]();
}
void sub_8161F94(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
gSaveBlock2Ptr->frontier.field_CA8 = 1;
gSaveBlock2Ptr->frontier.field_CB2 = 0;
gSaveBlock2Ptr->frontier.field_CA9_a = 0;
gSaveBlock2Ptr->frontier.field_CA9_b = 0;
sub_81A3ACC();
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_085DF9AC[battleMode][lvlMode]))
gSaveBlock2Ptr->frontier.field_CE0[battleMode][lvlMode] = 0;
sub_8164ED8();
saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
gTrainerBattleOpponent_A = 0;
}
void sub_8162054(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
switch (gSpecialVar_0x8005)
{
case 0:
break;
case 1:
gSpecialVar_Result = sub_8164FCC(lvlMode, battleMode);
break;
case 2:
gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_085DF9AC[battleMode][lvlMode]) != 0);
break;
case 3:
gSaveBlock2Ptr->frontier.field_D07 = gSaveBlock2Ptr->frontier.lvlMode;
break;
}
}
void sub_81620F4(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
switch (gSpecialVar_0x8005)
{
case 0:
break;
case 1:
gSaveBlock2Ptr->frontier.field_CE0[battleMode][lvlMode] = gSpecialVar_0x8006;
break;
case 2:
if (gSpecialVar_0x8006)
gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_085DF9AC[battleMode][lvlMode];
else
gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_085DF9CC[battleMode][lvlMode];
break;
case 3:
gSaveBlock2Ptr->frontier.field_D07 = gSaveBlock2Ptr->frontier.lvlMode;
break;
}
}
+1 -1
View File
@@ -1001,7 +1001,7 @@ void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 wi
}
}
void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette)
void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette)
{
CopyRectToBgTilemapBufferRect(bg, src, 0, 0, rectWidth, rectHeight, destX, destY, rectWidth, rectHeight, palette, 0, 0);
}
+4 -5
View File
@@ -12,7 +12,7 @@
#include "gpu_regs.h"
#include "m4a.h"
#include "constants/rgb.h"
#include "battle_dome_cards.h"
#include "trainer_pokemon_sprites.h"
#include "starter_choose.h"
#include "decompress.h"
#include "intro_credits_graphics.h"
@@ -1197,7 +1197,6 @@ void sub_8175620(void)
u8 taskIdA;
s16 taskIdC;
u8 taskIdB;
u16 savedIme;
sub_8175CE4();
SetVBlankCallback(NULL);
@@ -1333,7 +1332,7 @@ static void sub_81758E4(u8 taskIdA)
u16 *temp;
ResetSpriteData();
dp13_810BB8C();
ResetAllPicSprites();
FreeAllSpritePalettes();
gReservedSpritePaletteCount = 8;
LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM);
@@ -2164,7 +2163,7 @@ static void sub_8177050(struct Sprite *sprite)
{
if (gUnknown_0203BD28)
{
sub_818D820(sprite->data[6]);
FreeAndDestroyMonPicSprite(sprite->data[6]);
return;
}
@@ -2242,7 +2241,7 @@ static void sub_8177050(struct Sprite *sprite)
case 10:
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
sub_818D820(sprite->data[6]);
FreeAndDestroyMonPicSprite(sprite->data[6]);
break;
}
}
+1 -1
View File
@@ -512,7 +512,7 @@ static void CB2_EggHatch_0(void)
gMain.state++;
break;
case 2:
copy_decompressed_tile_data_to_vram_autofree(0, gBattleTextboxTiles, 0, 0, 0);
DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0);
CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0);
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20);
gMain.state++;
+1 -1
View File
@@ -1484,7 +1484,7 @@ static void InitMovingBackgroundTask(bool8 isLink)
LoadPalette(sUnknown_085B51E4, 0xA0, 0x20);
copy_decompressed_tile_data_to_vram_autofree(1, sUnknown_085B4134, FALSE, 0, 0);
DecompressAndLoadBgGfxUsingHeap(1, sUnknown_085B4134, FALSE, 0, 0);
CopyToBgTilemapBuffer(1, sUnknown_085B482C, 0, 0);
CopyToBgTilemapBuffer(outerBgId, sUnknown_085B4D10, 0, 0);
CopyBgTilemapBufferToVram(1);
+5 -7
View File
@@ -1,8 +1,6 @@
// Includes
#include "global.h"
#include "field_effect.h"
#include "battle_dome_cards.h"
#include "trainer_pokemon_sprites.h"
#include "decompress.h"
#include "field_camera.h"
#include "field_effect_helpers.h"
@@ -557,7 +555,7 @@ u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority)
#ifdef NONMATCHING
u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y)
{
u16 spriteId = sub_818D7D8(species, 0, 0x8000, 1, x, y, 0, gMonPaletteTable[species].tag);
u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, 0, 0x8000, 1, x, y, 0, gMonPaletteTable[species].tag);
PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[species].tag) + 0x10);
if (spriteId == 0xFFFF)
return 0x40;
@@ -590,7 +588,7 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y)
movs r1, 0\n\
adds r2, r3, 0\n\
movs r3, 0x1\n\
bl sub_818D7D8\n\
bl CreateMonPicSprite_HandleDeoxys\n\
lsls r0, 16\n\
lsrs r5, r0, 16\n\
ldrh r0, [r4, 0x4]\n\
@@ -619,7 +617,7 @@ _080B5FDE:\n\
u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority)
{
const struct CompressedSpritePalette *spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g);
u16 spriteId = sub_818D7D8(species, d, g, 1, x, y, 0, spritePalette->tag);
u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, d, g, 1, x, y, 0, spritePalette->tag);
PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
if (spriteId == 0xFFFF)
return 0x40;
@@ -634,7 +632,7 @@ void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId)
{
FreeOamMatrix(sprite->oam.matrixNum);
}
sub_818D820(spriteId);
FreeAndDestroyMonPicSprite(spriteId);
}
#ifdef NONMATCHING
+6 -4
View File
@@ -4,7 +4,9 @@
#include "string_util.h"
#include "task.h"
#include "text.h"
#include "battle_frontier_1.h"
extern bool32 sub_8196094(void);
extern void sub_8196080(u8*);
EWRAM_DATA u8 gUnknown_020375BC = 0;
@@ -23,7 +25,7 @@ void sub_8098128(void)
void sub_8098154(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
@@ -61,12 +63,12 @@ bool8 ShowFieldMessage(u8 *str)
return FALSE;
textbox_fdecode_auto_and_task_add(str, 1);
gUnknown_020375BC = 2;
return TRUE;
return TRUE;
}
void sub_8098214(u8 taskId)
{
if (sub_8196094() == 0)
if (!sub_8196094())
{
gUnknown_020375BC = 0;
DestroyTask(taskId);
+29 -28
View File
@@ -52,6 +52,7 @@
#include "constants/species.h"
#include "constants/moves.h"
#include "constants/vars.h"
#include "constants/battle_frontier.h"
EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE;
EWRAM_DATA u8 gBikeCollisions = 0;
@@ -1645,7 +1646,7 @@ bool8 sub_81398C0(void)
StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_0x8004)]);
return TRUE;
}
return FALSE;
}
@@ -1667,7 +1668,7 @@ bool8 InMultiBattleRoom(void)
{
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM)
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM) &&
VarGet(VAR_0x40CE) == 2)
VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_MULTIS)
return TRUE;
return FALSE;
}
@@ -1799,7 +1800,7 @@ void ShakeScreenInElevator(void)
if (floorDelta > 8)
floorDelta = 8;
data[5] = gUnknown_085B2C18[floorDelta];
SetCameraPanningCallback(NULL);
@@ -1830,16 +1831,16 @@ static void sub_8139AF4(u8 taskId)
void sub_8139B60(void)
{
int xPos;
gUnknown_0203AB5E = AddWindow(&gUnknown_085B2BAC);
SetStandardWindowBorderStyle(gUnknown_0203AB5E, 0);
xPos = GetStringCenterAlignXOffset(1, gText_ElevatorNowOn, 64);
PrintTextOnWindow(gUnknown_0203AB5E, 1, gText_ElevatorNowOn, xPos, 1, TEXT_SPEED_FF, NULL);
xPos = GetStringCenterAlignXOffset(1, gElevatorFloorsTable[gSpecialVar_0x8005], 64);
PrintTextOnWindow(gUnknown_0203AB5E, 1, gElevatorFloorsTable[gSpecialVar_0x8005], xPos, 17, TEXT_SPEED_FF, NULL);
PutWindowTilemap(gUnknown_0203AB5E);
CopyWindowToVram(gUnknown_0203AB5E, 3);
}
@@ -2167,13 +2168,13 @@ void sub_8139F20(void)
}
break;
case 4:
if (gSaveBlock2Ptr->frontier.field_D0C[0] >= gSaveBlock2Ptr->frontier.field_D0C[1])
if (gSaveBlock2Ptr->frontier.field_D0C[0][0] >= gSaveBlock2Ptr->frontier.field_D0C[0][1])
{
unk = gSaveBlock2Ptr->frontier.field_D0C[0];
unk = gSaveBlock2Ptr->frontier.field_D0C[0][0];
}
else
{
unk = gSaveBlock2Ptr->frontier.field_D0C[1];
unk = gSaveBlock2Ptr->frontier.field_D0C[0][1];
}
break;
case 5:
@@ -2187,13 +2188,13 @@ void sub_8139F20(void)
}
break;
case 6:
if (gSaveBlock2Ptr->frontier.field_DC8[0] >= gSaveBlock2Ptr->frontier.field_DC8[1])
if (gSaveBlock2Ptr->frontier.field_DC8[0][0] >= gSaveBlock2Ptr->frontier.field_DC8[0][1])
{
unk = gSaveBlock2Ptr->frontier.field_DC8[0];
unk = gSaveBlock2Ptr->frontier.field_DC8[0][0];
}
else
{
unk = gSaveBlock2Ptr->frontier.field_DC8[1];
unk = gSaveBlock2Ptr->frontier.field_DC8[0][1];
}
break;
case 7:
@@ -2240,10 +2241,10 @@ void sub_813A080(void)
};
u8 i;
u16 var = VarGet(VAR_0x40CE);
u8 chosenLevel = gSaveBlock2Ptr->frontier.chosenLvl;
u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
if (var == 2 && !FlagGet(FLAG_0x152))
if (battleMode == 2 && !FlagGet(FLAG_0x152))
{
gSpecialVar_0x8005 = 5;
gSpecialVar_0x8006 = 4;
@@ -2252,7 +2253,7 @@ void sub_813A080(void)
for (i = 0; i < 9; i++)
{
if (gUnknown_085B2CDC[i] > gSaveBlock2Ptr->frontier.field_CE0[var][chosenLevel])
if (gUnknown_085B2CDC[i] > gSaveBlock2Ptr->frontier.field_CE0[battleMode][lvlMode])
{
gSpecialVar_0x8005 = 4;
gSpecialVar_0x8006 = i + 5;
@@ -2662,8 +2663,8 @@ static void sub_813A2DC(u8 taskId)
}
task->data[4] = convert_pixel_width_to_tile_width(unk1);
if (task->data[2] + task->data[4] > 0x1D)
if (task->data[2] + task->data[4] > 0x1D)
{
int unk2 = 0x1D - task->data[4];
if (unk2 < 0)
@@ -3036,13 +3037,13 @@ void sub_813A878(u8 a0)
{
static const u16 gUnknown_085B3104[] = {0x0000, 0x0001, 0x0002, 0x0100, 0x0101, 0x0400, 0x0401, 0x0200, 0x0201, 0x0300, 0x0500, 0x0600};
u16 var1 = VarGet(VAR_0x40CE);
u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
u16 var2 = VarGet(VAR_FRONTIER_GAMBLER_SET_FACILITY_F);
u16 var3 = VarGet(VAR_FRONTIER_FACILITY);
u16 frontierFacilityId = VarGet(VAR_FRONTIER_FACILITY);
if (VarGet(VAR_FRONTIER_GAMBLER_PLACED_BET_F) == 1)
{
if (gUnknown_085B3104[var2] == (var3 << 8) + var1)
if (gUnknown_085B3104[var2] == (frontierFacilityId << 8) + battleMode)
{
if (a0 != 0)
{
@@ -3363,7 +3364,7 @@ void sub_813ADD4(void)
struct Task *task = &gTasks[taskId];
ListMenuGetScrollAndRow(task->data[14], &scrollOffset, &selectedRow);
SetStandardWindowBorderStyle(task->data[13], 0);
for (i = 0; i < 6; i++)
{
sub_8199F74(task->data[13], 1, gUnknown_085B2CF0[gSpecialVar_0x8004][scrollOffset + i], 10, i * 16, TEXT_SPEED_FF, NULL, 0, 0);
@@ -3381,7 +3382,7 @@ void sub_813AEB4(void)
u16 temp1 = 0;
u16 temp2 = 0;
gSpecialVar_0x8005 = 0;
temp1 = VarGet(VAR_TEMP_E);
temp2 = VarGet(VAR_TEMP_D);
@@ -3509,7 +3510,7 @@ static void sub_813B0B4(u8 a0)
u8 eventObjectId;
LoadPalette(&gUnknown_085B3280[a0], 0x1A0, 8);
TryGetEventObjectIdByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &eventObjectId);
if (a0 == 0)
{
PlaySE(SE_W109);
@@ -3656,7 +3657,7 @@ bool32 sub_813B374(void)
u16 var = VarGet(VAR_0x4037);
GetMapName(gStringVar1, gUnknown_085B3400[var - 1], 0);
if (var < 9)
{
return FALSE;
@@ -3697,7 +3698,7 @@ bool32 sub_813B3B0(void)
break;
}
}
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(UNDERWATER3))
{
switch (gSaveBlock1Ptr->location.mapNum)
@@ -4159,7 +4160,7 @@ static u16 sub_813BC00(void)
}
}
}
if (((gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> gUnknown_085B347C[retVal]) & 1))
{
gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] ^= 1 << gUnknown_085B347C[retVal];
+1 -1
View File
@@ -951,7 +951,7 @@ void copy_tileset_patterns_to_vram2(struct Tileset const *tileset, u16 numTiles,
if (!tileset->isCompressed)
LoadBgTiles(2, tileset->tiles, numTiles * 32, offset);
else
copy_decompressed_tile_data_to_vram_autofree(2, tileset->tiles, numTiles * 32, offset, 0);
DecompressAndLoadBgGfxUsingHeap(2, tileset->tiles, numTiles * 32, offset, 0);
}
}
+10 -18
View File
@@ -5,6 +5,7 @@
#include "sprite.h"
#include "pokemon.h"
#include "text.h"
#include "text_window.h"
#include "malloc.h"
#include "gpu_regs.h"
#include "main.h"
@@ -26,6 +27,7 @@
#include "event_data.h"
#include "overworld.h"
#include "menu.h"
#include "trainer_pokemon_sprites.h"
struct HallofFameMon
{
@@ -81,18 +83,10 @@ extern const u8 gText_MainMenuTime[];
extern const u8 gContestConfetti_Gfx[];
extern const u8 gContestConfetti_Pal[];
extern void NewMenuHelpers_DrawDialogueFrame(u8, u8);
extern void sub_8175620(void);
extern u8 TrySavingData(u8);
extern u8 sub_818D3E4(u16 species, u32 trainerId, u32 personality, u8 flags, s16 x, s16 y, u8, u16);
extern void sub_8197434(u8, u8);
extern u16 sub_818D97C(u8 playerGender, u8);
extern u16 sub_818D8AC(u16, u8, s16, s16, u8, u16);
extern const void* stdpal_get(u8);
extern void LoadWindowGfx(u8, u8, u16, u8);
extern u16 sub_818D820(u16);
extern u16 sub_818D8F0(u16);
extern u16 sub_818D7D8(u16 species, u32 trainerId, u32 personality, u8 arg3, s16 sp0, s16 sp1, u8 sp2, u16 sp3);
extern void sub_8198204(u8 *dst, const u8 *src, u8, u8, u8);
extern bool8 sub_80F9C30(void);
extern void sub_8198314(void);
@@ -102,8 +96,6 @@ extern void sub_80F9BF4(u16, u16, u8);
extern void sub_81980F0(u8, u8, u8, u8, u16);
extern void sub_80F9BCC(u16, u16, u8);
extern bool8 sub_80F9C1C(void);
extern u16 SpeciesToPokedexNum(u16 species);
extern void dp13_810BB8C(void);
extern void sub_81971D0(void);
extern void sub_8197200(void);
extern void sub_8152254(void);
@@ -611,7 +603,7 @@ static void Task_Hof_DisplayMon(u8 taskId)
if (currMon->species == SPECIES_EGG)
field6 += 10;
spriteId = sub_818D3E4(currMon->species, currMon->tid, currMon->personality, 1, xPos, yPos, currMonId, 0xFFFF);
spriteId = CreatePicSprite2(currMon->species, currMon->tid, currMon->personality, 1, xPos, yPos, currMonId, 0xFFFF);
gSprites[spriteId].tDestinationX = field4;
gSprites[spriteId].tDestinationY = field6;
gSprites[spriteId].data[0] = 0;
@@ -723,7 +715,7 @@ static void sub_8173EE4(u8 taskId)
ShowBg(0);
ShowBg(1);
ShowBg(3);
gTasks[taskId].tPlayerSpriteID = sub_818D8AC(sub_818D97C(gSaveBlock2Ptr->playerGender, 1), 1, 120, 72, 6, 0xFFFF);
gTasks[taskId].tPlayerSpriteID = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 1, 120, 72, 6, 0xFFFF);
AddWindow(&sHof_WindowTemplate);
LoadWindowGfx(1, gSaveBlock2Ptr->optionsWindowFrameType, 0x21D, 0xD0);
LoadPalette(stdpal_get(1), 0xE0, 0x20);
@@ -780,11 +772,11 @@ static void Task_Hof_HandleExit(u8 taskId)
if (spriteId != 0xFF)
{
FreeOamMatrix(gSprites[spriteId].oam.matrixNum);
sub_818D820(spriteId);
FreeAndDestroyMonPicSprite(spriteId);
}
}
sub_818D8F0(gTasks[taskId].tPlayerSpriteID);
FreeAndDestroyTrainerPicSprite(gTasks[taskId].tPlayerSpriteID);
HideBg(0);
HideBg(1);
HideBg(3);
@@ -956,7 +948,7 @@ static void Task_HofPC_DrawSpritesPrintText(u8 taskId)
if (currMon->species == SPECIES_EGG)
posY += 10;
spriteId = sub_818D7D8(currMon->species, currMon->tid, currMon->personality, 1, posX, posY, i, 0xFFFF);
spriteId = CreateMonPicSprite_HandleDeoxys(currMon->species, currMon->tid, currMon->personality, 1, posX, posY, i, 0xFFFF);
gSprites[spriteId].oam.priority = 1;
gTasks[taskId].tMonSpriteId(i) = spriteId;
}
@@ -1026,7 +1018,7 @@ static void Task_HofPC_HandleInput(u8 taskId)
u8 spriteId = gTasks[taskId].tMonSpriteId(i);
if (spriteId != 0xFF)
{
sub_818D820(spriteId);
FreeAndDestroyMonPicSprite(spriteId);
gTasks[taskId].tMonSpriteId(i) = 0xFF;
}
}
@@ -1087,7 +1079,7 @@ static void Task_HofPC_HandleExit(u8 taskId)
u16 spriteId = gTasks[taskId].tMonSpriteId(i);
if (spriteId != 0xFF)
{
sub_818D820(spriteId);
FreeAndDestroyMonPicSprite(spriteId);
gTasks[taskId].tMonSpriteId(i) = 0xFF;
}
}
@@ -1305,7 +1297,7 @@ static void sub_8174F70(void)
ResetTasks();
ResetSpriteData();
reset_temp_tile_data_buffers();
dp13_810BB8C();
ResetAllPicSprites();
FreeAllSpritePalettes();
gReservedSpritePaletteCount = 8;
LoadCompressedObjectPic(&sHallOfFame_ConfettiSpriteSheet);
+8 -8
View File
@@ -845,8 +845,8 @@ u16 CountTotalItemQuantityInBag(u16 itemId)
static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count)
{
u8 i;
u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.chosenLvl];
u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.chosenLvl];
u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode];
for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++)
{
@@ -867,8 +867,8 @@ static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count)
static bool8 CheckPyramidBagHasSpace(u16 itemId, u16 count)
{
u8 i;
u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.chosenLvl];
u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.chosenLvl];
u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode];
for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++)
{
@@ -890,8 +890,8 @@ bool8 AddPyramidBagItem(u16 itemId, u16 count)
{
u16 i;
u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.chosenLvl];
u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.chosenLvl];
u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode];
u16 *newItems = Alloc(PYRAMID_BAG_ITEMS_COUNT * sizeof(u16));
u8 *newQuantities = Alloc(PYRAMID_BAG_ITEMS_COUNT * sizeof(u8));
@@ -963,8 +963,8 @@ bool8 RemovePyramidBagItem(u16 itemId, u16 count)
{
u16 i;
u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.chosenLvl];
u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.chosenLvl];
u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode];
i = gUnknown_0203CF30[3] + gUnknown_0203CF30[4];
if (items[i] == itemId && quantities[i] >= count)
+1 -1
View File
@@ -1679,7 +1679,7 @@ void CB2_LinkError(void)
static void sub_800B080(void)
{
LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0);
copy_decompressed_tile_data_to_vram_autofree(1, gWirelessLinkDisplayGfx, FALSE, 0, 0);
DecompressAndLoadBgGfxUsingHeap(1, gWirelessLinkDisplayGfx, FALSE, 0, 0);
CopyToBgTilemapBuffer(1, gWirelessLinkDisplayTilemap, 0, 0);
CopyBgTilemapBufferToVram(1);
LoadPalette(gWirelessLinkDisplayPal, 0, 0x20);
+7 -9
View File
@@ -1,7 +1,5 @@
// Includes
#include "global.h"
#include "battle_dome_cards.h"
#include "trainer_pokemon_sprites.h"
#include "bg.h"
#include "constants/flags.h"
#include "constants/rgb.h"
@@ -1018,7 +1016,7 @@ void task_new_game_prof_birch_speech_1(u8 taskId)
ScanlineEffect_Stop();
ResetSpriteData();
FreeAllSpritePalettes();
dp13_810BB8C();
ResetAllPicSprites();
AddBirchSpeechObjects(taskId);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
gTasks[taskId].data[4] = 0;
@@ -1336,7 +1334,7 @@ void task_new_game_prof_birch_speech_17(u8 taskId)
if (!gPaletteFade.active)
{
FreeAllWindowBuffers();
sub_818D820(gTasks[taskId].data[9]);
FreeAndDestroyMonPicSprite(gTasks[taskId].data[9]);
set_default_player_name(Random() % 20);
DestroyTask(taskId);
DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, new_game_prof_birch_speech_part2_start);
@@ -1515,8 +1513,8 @@ void task_new_game_prof_birch_speech_part2_12(u8 taskId)
if (!gPaletteFade.active)
{
FreeAllWindowBuffers();
sub_818D820(gTasks[taskId].data[9]);
dp13_810BB8C();
FreeAndDestroyMonPicSprite(gTasks[taskId].data[9]);
ResetAllPicSprites();
SetMainCallback2(CB2_NewGame);
DestroyTask(taskId);
}
@@ -1558,7 +1556,7 @@ void new_game_prof_birch_speech_part2_start(void)
ScanlineEffect_Stop();
ResetSpriteData();
FreeAllSpritePalettes();
dp13_810BB8C();
ResetAllPicSprites();
AddBirchSpeechObjects(taskId);
if (gSaveBlock2Ptr->playerGender != MALE)
{
@@ -1613,7 +1611,7 @@ void sub_80318D8(struct Sprite *sprite)
u8 sub_80318F4(u8 a, u8 b)
{
return sub_818D3E4(SPECIES_LOTAD, 8, 0, 1, a, b, 14, -1);
return CreatePicSprite2(SPECIES_LOTAD, 8, 0, 1, a, b, 14, -1);
}
void AddBirchSpeechObjects(u8 taskId)
+1 -1
View File
@@ -5,9 +5,9 @@
#include "event_data.h"
#include "string_util.h"
#include "battle.h"
#include "battle_frontier_1.h"
#include "gym_leader_rematch.h"
extern void sub_8197080(u8 *dest);
extern const u8 gTrainerClassNames[][13];
// Static type declarations
+1 -1
View File
@@ -1801,7 +1801,7 @@ void *decompress_and_copy_tile_data_to_vram(u8 bgId, const void *src, int size,
return NULL;
}
void copy_decompressed_tile_data_to_vram_autofree(u8 bgId, const void *src, int size, u16 offset, u8 mode)
void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, int size, u16 offset, u8 mode)
{
int sizeOut;
void *ptr = malloc_and_decompress(src, &sizeOut);
+2 -2
View File
@@ -23,6 +23,8 @@
#include "overworld.h"
#include "mail.h"
#include "battle_records.h"
#include "item.h"
#include "pokedex.h"
extern u8 gDifferentSaveFile;
extern u16 gSaveFileStatus;
@@ -33,13 +35,11 @@ extern u16 GetGeneratedTrainerIdLower(void);
extern void ClearContestWinnerPicsInContestHall(void);
extern void sub_80BB358(void);
extern void ResetBagScrollPositions(void);
extern void ResetPokedex(void);
extern void ResetGabbyAndTy(void);
extern void ResetSecretBases(void);
extern void ResetLinkContestBoolean(void);
extern void sub_8052DA8(void);
extern void ResetPokemonStorageSystem(void);
extern void ClearBag(void);
extern void NewGameInitPCItems(void);
extern void ClearDecorationInventories(void);
extern void ResetFanClub(void);
+2 -2
View File
@@ -151,7 +151,7 @@ extern void TransferTilesetAnimsBuffer(void);
extern bool32 sub_81D5F48(void);
extern u8 GetCurrentTrainerHillMapId(void);
extern bool8 warp0_in_pokecenter(void);
extern void dp13_810BB8C(void);
extern void ResetAllPicSprites(void);
extern void FieldEffectActiveListClear(void);
extern void SetUpFieldTasks(void);
extern void sub_81BE6B8(void);
@@ -2149,7 +2149,7 @@ static void sub_8086988(u32 a1)
ResetSpriteData();
ResetPaletteFade();
ScanlineEffect_Clear();
dp13_810BB8C();
ResetAllPicSprites();
ResetCameraUpdateInfo();
InstallCameraPanAheadCallback();
if (!a1)
+64 -64
View File
@@ -11,7 +11,7 @@
#include "main.h"
#include "sound.h"
#include "task.h"
#include "battle_dome_cards.h"
#include "trainer_pokemon_sprites.h"
#include "scanline_effect.h"
#include "malloc.h"
#include "gpu_regs.h"
@@ -821,7 +821,7 @@ const u8 sText_TenDashes[] = _("----------");
void ResetPokedex(void)
{
u16 i;
gUnknown_02039B50 = 0;
gUnknown_02039B52 = 64;
gUnknown_030060B0 = 0;
@@ -910,7 +910,7 @@ void sub_80BB534(void)
{
u8 *addr;
u32 size;
switch (gMain.state)
{
case 0:
@@ -929,7 +929,7 @@ void sub_80BB534(void)
ResetPaletteFade();
FreeAllSpritePalettes();
gReservedSpritePaletteCount = 8;
dp13_810BB8C();
ResetAllPicSprites();
gMain.state++;
break;
case 2:
@@ -984,7 +984,7 @@ void sub_80BB78C(u8 taskId)
void sub_80BB7D4(u8 taskId)
{
SetGpuReg(REG_OFFSET_BG0VOFS, gUnknown_02039B4C->menuY);
if (gUnknown_02039B4C->menuY)
{
gUnknown_02039B4C->menuY -= 8;
@@ -1377,7 +1377,7 @@ bool8 sub_80BC514(u8 a)
SetBgTilemapBuffer(2, AllocZeroed(0x800));
SetBgTilemapBuffer(1, AllocZeroed(0x800));
SetBgTilemapBuffer(0, AllocZeroed(0x800));
copy_decompressed_tile_data_to_vram_autofree(3, gPokedexMenu_Gfx, 0x2000, 0, 0);
DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0);
CopyToBgTilemapBuffer(1, gUnknown_08DC2C5C, 0, 0);
CopyToBgTilemapBuffer(3, gUnknown_08DC2DAC, 0, 0);
if (a == 0)
@@ -1467,7 +1467,7 @@ void sub_80BC844(u8 a)
void sub_80BC890(void)
{
void* tilemapBuffer;
FreeAllWindowBuffers();
tilemapBuffer = GetBgTilemapBuffer(0);
if (tilemapBuffer)
@@ -1487,7 +1487,7 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
{
u16 vars[3]; //I have no idea why three regular variables are stored in an array, but whatever.
s16 i;
gUnknown_02039B4C->pokemonListCount = 0;
switch (dexMode)
@@ -1633,7 +1633,7 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
void sub_80BCE2C(u8 windowId, u8 fontId, const u8* str, u8 left, u8 top)
{
u8 color[3];
color[0] = 0;
color[1] = 15;
color[2] = 3;
@@ -1731,7 +1731,7 @@ void sub_80BD154(u16 a, u8 left, u8 top, u16 unused)
{
u8 text[6];
u16 r6;
memcpy(text, gUnknown_0855D2B8, 6);
r6 = gUnknown_02039B4C->unk0[a].dexNum;
if (gUnknown_02039B4C->dexMode == DEX_MODE_HOENN)
@@ -1753,7 +1753,7 @@ void sub_80BD1F4(u16 a, u8 x, u8 y, u16 unused)
u8 sub_80BD23C(u16 num, u8 left, u8 top)
{
const u8* str;
num = NationalPokedexNumToSpecies(num);
if (num)
str = gSpeciesNames[num];
@@ -1773,7 +1773,7 @@ void sub_80BD2B4(u16 a, u16 b)
u8 i;
u16 unk;
u8 spriteId;
gPaletteFade.bufferTransferDisabled = TRUE;
for (i = 0; i < 4; i++)
@@ -1803,13 +1803,13 @@ void sub_80BD2B4(u16 a, u16 b)
gSprites[spriteId].callback = sub_80BE4E0;
gSprites[spriteId].data[5] = 32;
}
sub_80BCE84(0, a, b);
SetGpuReg(REG_OFFSET_BG2VOFS, gUnknown_02039B4C->unk62D);
gUnknown_02039B4C->unk630 = 0;
gUnknown_02039B4C->unk632 = 0;
gPaletteFade.bufferTransferDisabled = FALSE;
}
@@ -1897,7 +1897,7 @@ u16 sub_80BD69C(u16 a, u16 b)
u8 i;
u16 r6;
u8 r10 = 0;
if ((gMain.heldKeys & DPAD_UP) && (a > 0))
{
r10 = 1;
@@ -1917,7 +1917,7 @@ u16 sub_80BD69C(u16 a, u16 b)
else if ((gMain.newKeys & DPAD_LEFT) && (a > 0))
{
r6 = a;
for (i = 0; i < 7; i++)
a = sub_80C0E0C(1, a, 0, gUnknown_02039B4C->pokemonListCount - 1);
gUnknown_02039B4C->unk62C += 16 * (a - r6);
@@ -1935,13 +1935,13 @@ u16 sub_80BD69C(u16 a, u16 b)
sub_80BD2B4(a, 0xE);
PlaySE(SE_Z_PAGE);
}
if (r10 == 0)
{
gUnknown_02039B4C->unk638 = 0;
return a;
}
r5 = gUnknown_0855D28C[gUnknown_02039B4C->unk638 / 4];
r3 = gUnknown_0855D291[gUnknown_02039B4C->unk638 / 4];
gUnknown_02039B4C->unk62E = r3;
@@ -2030,7 +2030,7 @@ u8 sub_80BDA40(void)
{
if (gUnknown_02039B4C->unk61E[i] != 0xFFFF)
{
sub_818D820(gUnknown_02039B4C->unk61E[i]);
FreeAndDestroyMonPicSprite(gUnknown_02039B4C->unk61E[i]);
gUnknown_02039B4C->unk61E[i] |= 0xFFFF;
}
}
@@ -2109,7 +2109,7 @@ void sub_80BDB7C(u8 a)
if (a == 0)
{
u32 _a;
if (!IsNationalPokedexEnabled())
{
CreateSprite(&gUnknown_0855D1F4, 32, 40, 1);
@@ -2160,22 +2160,22 @@ void sub_80BDB7C(u8 a)
else
{
u16 r6;
CreateSprite(&gUnknown_0855D1F4, 32, 40, 1);
spriteId = CreateSprite(&gUnknown_0855D1F4, 32, 76, 1);
StartSpriteAnim(&gSprites[spriteId], 1);
CreateSprite(&gUnknown_0855D20C, 17, 45, 1);
spriteId = CreateSprite(&gUnknown_0855D20C, 17, 55, 1);
StartSpriteAnim(&gSprites[spriteId], 1);
CreateSprite(&gUnknown_0855D20C, 17, 81, 1);
spriteId = CreateSprite(&gUnknown_0855D20C, 17, 91, 1);
StartSpriteAnim(&gSprites[spriteId], 1);
r6 = GetHoennPokedexCount(0);
_a = 0;
@@ -2197,9 +2197,9 @@ void sub_80BDB7C(u8 a)
spriteId = CreateSprite(&gUnknown_0855D23C, 56, 45, 1);
r5 = (r6 % 100) % 10;
StartSpriteAnim(&gSprites[spriteId], r5);
_a = 0;
spriteId = CreateSprite(&gUnknown_0855D23C, 40, 55, 1);
r5 = gUnknown_02039B4C->unk61A / 100;
StartSpriteAnim(&gSprites[spriteId], r5);
@@ -2207,21 +2207,21 @@ void sub_80BDB7C(u8 a)
_a = 1;
else
gSprites[spriteId].invisible = TRUE;
spriteId = CreateSprite(&gUnknown_0855D23C, 48, 55, 1);
r5 = (gUnknown_02039B4C->unk61A % 100) / 10;
if (r5 != 0 || _a != 0)
StartSpriteAnim(&gSprites[spriteId], r5);
else
gSprites[spriteId].invisible = TRUE;
spriteId = CreateSprite(&gUnknown_0855D23C, 56, 55, 1);
r5 = (gUnknown_02039B4C->unk61A % 100) % 10;
StartSpriteAnim(&gSprites[spriteId], r5);
r6 = GetHoennPokedexCount(1);
_a = 0;
spriteId = CreateSprite(&gUnknown_0855D23C, 40, 81, 1);
r5 = r6 / 100;
StartSpriteAnim(&gSprites[spriteId], r5);
@@ -2229,20 +2229,20 @@ void sub_80BDB7C(u8 a)
_a = 1;
else
gSprites[spriteId].invisible = TRUE;
spriteId = CreateSprite(&gUnknown_0855D23C, 48, 81, 1);
r5 = (r6 % 100) / 10;
if (r5 != 0 || _a != 0)
StartSpriteAnim(&gSprites[spriteId], r5);
else
gSprites[spriteId].invisible = TRUE;
spriteId = CreateSprite(&gUnknown_0855D23C, 56, 81, 1);
r5 = (r6 % 100) % 10;
StartSpriteAnim(&gSprites[spriteId], r5);
_a = 0;
spriteId = CreateSprite(&gUnknown_0855D23C, 40, 91, 1);
r5 = gUnknown_02039B4C->unk61C / 100;
StartSpriteAnim(&gSprites[spriteId], r5);
@@ -2250,14 +2250,14 @@ void sub_80BDB7C(u8 a)
_a = 1;
else
gSprites[spriteId].invisible = TRUE;
spriteId = CreateSprite(&gUnknown_0855D23C, 48, 91, 1);
r5 = (gUnknown_02039B4C->unk61C % 100) / 10;
if (r5 != 0 || _a != 0)
StartSpriteAnim(&gSprites[spriteId], r5);
else
gSprites[spriteId].invisible = TRUE;
spriteId = CreateSprite(&gUnknown_0855D23C, 56, 91, 1);
r5 = (gUnknown_02039B4C->unk61C % 100) % 10;
StartSpriteAnim(&gSprites[spriteId], r5);
@@ -2313,7 +2313,7 @@ void sub_80BE4E0(struct Sprite *sprite)
if (gUnknown_02039B4C->unk64A != 0 && gUnknown_02039B4C->unk64A != 3)
{
sub_818D820(gUnknown_02039B4C->unk61E[data1]);
FreeAndDestroyMonPicSprite(gUnknown_02039B4C->unk61E[data1]);
gUnknown_02039B4C->unk61E[data1] = 0xFFFF;
}
else
@@ -2339,7 +2339,7 @@ void sub_80BE4E0(struct Sprite *sprite)
if ((sprite->data[5] <= -64 || sprite->data[5] >= 64) && sprite->data[0] != 0)
{
sub_818D820(gUnknown_02039B4C->unk61E[data1]);
FreeAndDestroyMonPicSprite(gUnknown_02039B4C->unk61E[data1]);
gUnknown_02039B4C->unk61E[data1] = 0xFFFF;
}
}
@@ -2449,14 +2449,14 @@ void sub_80BE8DC(const u8* str, u8 left, u8 top)
color[0] = 0;
color[1] = 15;
color[2] = 3;
AddTextPrinterParameterized2(0, 1, left, top, 0, 0, color, -1, str);
}
u8 sub_80BE91C(struct PokedexListItem* item, u8 b)
{
u8 taskId;
gUnknown_02039B54 = item;
taskId = CreateTask(sub_80BEA24, 0);
gTasks[taskId].data[0] = 0;
@@ -2473,7 +2473,7 @@ u8 sub_80BE91C(struct PokedexListItem* item, u8 b)
SetBgTilemapBuffer(0, AllocZeroed(0x800));
InitWindows(gUnknown_0856E640);
DeactivateAllTextPrinters();
return taskId;
}
@@ -2518,7 +2518,7 @@ void sub_80BEA24(u8 taskId)
}
break;
case 1:
copy_decompressed_tile_data_to_vram_autofree(3, gPokedexMenu_Gfx, 0x2000, 0, 0);
DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0);
CopyToBgTilemapBuffer(3, gUnknown_08DC3080, 0, 0);
FillWindowPixelBuffer(0, 0);
PutWindowTilemap(0);
@@ -2703,7 +2703,7 @@ void sub_80BEFD0(u8 taskId)
{
if (!gPaletteFade.active)
{
sub_818D820(gTasks[taskId].data[4]);
FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]);
switch (gUnknown_02039B4C->unk64E)
{
case 1:
@@ -2724,7 +2724,7 @@ void sub_80BF038(u8 taskId)
{
if (!gPaletteFade.active)
{
sub_818D820(gTasks[taskId].data[4]);
FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]);
gTasks[taskId].func = sub_80BEA24;
}
}
@@ -2733,7 +2733,7 @@ void sub_80BF070(u8 taskId)
{
if (!gPaletteFade.active)
{
sub_818D820(gTasks[taskId].data[4]);
FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]);
sub_80BEDB0();
DestroyTask(taskId);
}
@@ -2813,7 +2813,7 @@ void sub_80BF250(u8 taskId)
}
break;
case 1:
copy_decompressed_tile_data_to_vram_autofree(3, &gPokedexMenu_Gfx, 0x2000, 0, 0);
DecompressAndLoadBgGfxUsingHeap(3, &gPokedexMenu_Gfx, 0x2000, 0, 0);
CopyToBgTilemapBuffer(3, &gUnknown_08DC3198, 0, 0);
FillWindowPixelBuffer(0, 0);
PutWindowTilemap(0);
@@ -2960,7 +2960,7 @@ void sub_80BF790(u8 taskId)
if (!gPaletteFade.active)
{
sub_8145914();
sub_818D820(gTasks[taskId].data[4]);
FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]);
switch (gUnknown_02039B4C->unk64E)
{
default:
@@ -3007,7 +3007,7 @@ void sub_80BF82C(u8 taskId)
}
break;
case 1:
copy_decompressed_tile_data_to_vram_autofree(3, gPokedexMenu_Gfx, 0x2000, 0, 0);
DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0);
CopyToBgTilemapBuffer(3, gUnknown_08DC2E6C, 0, 0);
FillWindowPixelBuffer(0, 0);
PutWindowTilemap(0);
@@ -3109,8 +3109,8 @@ void sub_80BFC78(u8 taskId)
{
if (!gPaletteFade.active)
{
sub_818D820(gTasks[taskId].data[4]);
sub_818D8F0(gTasks[taskId].data[5]);
FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]);
FreeAndDestroyTrainerPicSprite(gTasks[taskId].data[5]);
switch (gUnknown_02039B4C->unk64E)
{
default:
@@ -3334,7 +3334,7 @@ void sub_80BFE38(u8 taskId)
{
u8 spriteId;
u16 dexNum = gTasks[taskId].data[1];
switch (gTasks[taskId].data[0])
{
case 0:
@@ -3354,7 +3354,7 @@ void sub_80BFE38(u8 taskId)
}
break;
case 1:
copy_decompressed_tile_data_to_vram_autofree(3, gPokedexMenu_Gfx, 0x2000, 0, 0);
DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0);
CopyToBgTilemapBuffer(3, gUnknown_08DC3080, 0, 0);
FillWindowPixelBuffer(0, 0);
PutWindowTilemap(0);
@@ -3440,7 +3440,7 @@ void blockset_load_palette_to_gpu(u8 taskId)
buffer = GetBgTilemapBuffer(3);
if (buffer)
Free(buffer);
species = NationalPokedexNumToSpecies(gTasks[taskId].data[1]);
otId = ((u16)gTasks[taskId].data[13] << 16) | (u16)gTasks[taskId].data[12];
personality = ((u16)gTasks[taskId].data[15] << 16) | (u16)gTasks[taskId].data[14];
@@ -3472,7 +3472,7 @@ void sub_80C020C(u32 num, u32 value, u32 c, u32 d)
const u8 *text;
const u8 *text2;
const u8 *text3;
if (d)
sub_80BE8DC(gText_PokedexRegistration, GetStringCenterAlignXOffset(1, gText_PokedexRegistration, 0xF0), 0);
if (value == 0)
@@ -4064,7 +4064,7 @@ void sub_80C0A88(u8 windowId, const u8 *str, u8 left, u8 top)
color[0] = 0;
color[1] = 15;
color[2] = 3;
AddTextPrinterParameterized2(windowId, 1, left, top, 0, 0, color, -1, str);
}
@@ -4107,7 +4107,7 @@ void sub_80C0BF0(u8 windowId, const u8* str, u8 left, u8 top)
u8 str2[11];
u8 i;
u8 count;
for (i = 0; i < 11; i++)
str2[i] = CHAR_SPACE;
for (count = 0; str[count] != CHAR_SPACE && count < 11; count++)
@@ -4232,12 +4232,12 @@ u32 sub_80C0E68(u16 a)
u16 sub_80C0E9C(u16 num, s16 x, s16 y, u16 paletteSlot)
{
num = NationalPokedexNumToSpecies(num);
return sub_818D7D8(num, 8, sub_80C0E68(num), TRUE, x, y, paletteSlot, 0xFFFF);
return CreateMonPicSprite_HandleDeoxys(num, 8, sub_80C0E68(num), TRUE, x, y, paletteSlot, 0xFFFF);
}
u16 sub_80C0EF8(u16 species, s16 x, s16 y, s8 paletteSlot)
{
return sub_818D8AC(species, TRUE, x, y, paletteSlot, 0xFFFF);
return CreateTrainerPicSprite(species, TRUE, x, y, paletteSlot, 0xFFFF);
}
int sub_80C0F30(u8 dexMode, u8 sortMode, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2)
@@ -4364,7 +4364,7 @@ u8 sub_80C1258(void)
void sub_80C1270(const u8 *str, u32 left, u32 top)
{
u8 color[3];
color[0] = 0;
color[1] = 15;
color[2] = 2;
@@ -4397,8 +4397,8 @@ void sub_80C12E0(u8 taskId)
InitWindows(gUnknown_0856F008);
DeactivateAllTextPrinters();
PutWindowTilemap(0);
copy_decompressed_tile_data_to_vram_autofree(3, gPokedexSearchMenu_Gfx, 0x2000, 0, 0);
DecompressAndLoadBgGfxUsingHeap(3, gPokedexSearchMenu_Gfx, 0x2000, 0, 0);
if (!IsNationalPokedexEnabled())
CopyToBgTilemapBuffer(3, gPokedexSearch2_Tilemap, 0, 0);
else
@@ -4450,7 +4450,7 @@ void sub_80C12E0(u8 taskId)
void sub_80C152C(void)
{
void* tilemapBuffer;
FreeAllWindowBuffers();
tilemapBuffer = GetBgTilemapBuffer(0);
if (tilemapBuffer)
@@ -4992,12 +4992,12 @@ void sub_80C2064(u8 a, u8 b)
void sub_80C20F8(u8 taskId)
{
u16 var;
sub_80C12B0(0x28, 0x10, 0x60, 0x50);
var = gTasks[taskId].data[6] + gTasks[taskId].data[7];
sub_80C1270(gUnknown_0856EE5C[var].text2, 0x2D, 0x11);
var = gTasks[taskId].data[8] + gTasks[taskId].data[9];
sub_80C1270(gUnknown_0856EEB4[var].text2, 0x2D, 0x21);
+8 -8
View File
@@ -13,6 +13,7 @@
#include "constants/hold_effects.h"
#include "constants/battle_move_effects.h"
#include "constants/songs.h"
#include "constants/battle_frontier.h"
#include "string_util.h"
#include "text.h"
#include "link.h"
@@ -80,8 +81,7 @@ extern void set_unknown_box_id(u8);
extern void sub_803FA70(u8 battlerId);
extern u8 sav1_map_get_name(void);
extern const u8 *sub_81A1650(u8, u8 language);
extern u8 BattleFrontierGetOpponentLvl(u8);
extern u16 FacilityClassToPicIndex(u16);
extern u8 GetFrontierEnemyMonLevel(u8);
extern bool8 InBattlePyramid(void);
extern bool8 InBattlePike(void);
extern bool8 sub_806F104(void);
@@ -955,7 +955,7 @@ const u16 gHoennToNationalOrder[] = // Assigns Hoenn Dex Pokémon (Using Nationa
NATIONAL_DEX_BLAZIKEN, // HOENN_DEX_BLAZIKEN
NATIONAL_DEX_MUDKIP, // HOENN_DEX_MUDKIP
NATIONAL_DEX_MARSHTOMP, // HOENN_DEX_MARSHTOMP
NATIONAL_DEX_SWAMPERT, // HOENN_DEX_SWAMPERT
NATIONAL_DEX_SWAMPERT, // HOENN_DEX_SWAMPERT
NATIONAL_DEX_POOCHYENA, // HOENN_DEX_POOCHYENA
NATIONAL_DEX_MIGHTYENA, // HOENN_DEX_MIGHTYENA
NATIONAL_DEX_ZIGZAGOON, // HOENN_DEX_ZIGZAGOON
@@ -2819,8 +2819,8 @@ void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lv
u8 language;
u8 value;
if (gSaveBlock2Ptr->frontier.chosenLvl != 0)
level = BattleFrontierGetOpponentLvl(gSaveBlock2Ptr->frontier.chosenLvl);
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50)
level = GetFrontierEnemyMonLevel(gSaveBlock2Ptr->frontier.lvlMode);
else if (lvl50)
level = 50;
else
@@ -2884,7 +2884,7 @@ void sub_8068528(struct Pokemon *mon, const struct UnknownPokemonStruct2 *src, u
CreateMon(mon,
src->mons[monId].species,
BattleFrontierGetOpponentLvl(src->field_0_1 - 1),
GetFrontierEnemyMonLevel(src->field_0_1 - 1),
0x1F,
TRUE,
personality,
@@ -7118,9 +7118,9 @@ u16 FacilityClassToPicIndex(u16 facilityClass)
u16 PlayerGenderToFrontTrainerPicId(u8 playerGender)
{
if (playerGender != MALE)
return FacilityClassToPicIndex(FACILITY_CLASS_PKMN_TRAINER_BRENDAN);
else
return FacilityClassToPicIndex(FACILITY_CLASS_PKMN_TRAINER_MAY);
else
return FacilityClassToPicIndex(FACILITY_CLASS_PKMN_TRAINER_BRENDAN);
}
void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality)
+2 -2
View File
@@ -1635,8 +1635,8 @@ void sub_80E8260(struct UnkRecordMixingStruct2 *dst)
dst->field_0[0][i].field_4 = gSaveBlock2Ptr->frontier.field_CF0[i];
dst->field_0[1][i].field_4 = gSaveBlock2Ptr->frontier.field_CF4[i];
dst->field_0[2][i].field_4 = gSaveBlock2Ptr->frontier.field_CF8[i];
dst->field_0[3][i].field_4 = gSaveBlock2Ptr->frontier.field_D14[i];
dst->field_0[4][i].field_4 = gSaveBlock2Ptr->frontier.field_DD0[i];
dst->field_0[3][i].field_4 = gSaveBlock2Ptr->frontier.field_D14[0][i];
dst->field_0[4][i].field_4 = gSaveBlock2Ptr->frontier.field_DD0[0][i];
dst->field_0[5][i].field_4 = gSaveBlock2Ptr->frontier.field_DDE[i];
dst->field_0[6][i].field_4 = gSaveBlock2Ptr->frontier.field_DEA[i];
dst->field_0[7][i].field_4 = gSaveBlock2Ptr->frontier.field_E08[i];
+3 -3
View File
@@ -1293,7 +1293,7 @@ static bool32 AllocTryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst)
static void CB2_RecordedBattleEnd(void)
{
gSaveBlock2Ptr->frontier.chosenLvl = sUnknown_0203C7AD;
gSaveBlock2Ptr->frontier.lvlMode = sUnknown_0203C7AD;
gBattleOutcome = 0;
gBattleTypeFlags = 0;
gTrainerBattleOpponent_A = 0;
@@ -1353,7 +1353,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src)
gTrainerBattleOpponent_B = src->opponentB;
gPartnerTrainerId = src->partnerId;
gUnknown_0203C7B4 = src->field_4FA;
sUnknown_0203C7AD = gSaveBlock2Ptr->frontier.chosenLvl;
sUnknown_0203C7AD = gSaveBlock2Ptr->frontier.lvlMode;
sFrontierFacility = src->field_4FD;
sUnknown_0203C7AF = src->field_4FE;
sBattleStyle = src->battleStyle;
@@ -1375,7 +1375,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src)
sUnknown_0203CCDC[i] = src->field_50E[i];
}
gSaveBlock2Ptr->frontier.chosenLvl = src->field_4FC;
gSaveBlock2Ptr->frontier.lvlMode = src->field_4FC;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
+3 -2
View File
@@ -18,6 +18,7 @@
#include "constants/maps.h"
#include "constants/species.h"
#include "constants/rgb.h"
#include "constants/battle_frontier.h"
#include "trade.h"
#include "trainer_card.h"
#include "overworld.h"
@@ -468,7 +469,7 @@ void sub_8012780(u8 taskId)
switch (data->state)
{
case 0:
if (gSpecialVar_0x8004 == 20 && gSaveBlock2Ptr->frontier.chosenLvl == 1)
if (gSpecialVar_0x8004 == 20 && gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_OPEN)
gSpecialVar_0x8004++;
gUnknown_02022C2C = gUnknown_082F00C4[gSpecialVar_0x8004];
gUnknown_02022C2D = gUnknown_082F00C4[gSpecialVar_0x8004] >> 8;
@@ -1050,7 +1051,7 @@ void sub_80134E8(u8 taskId)
switch (data->state)
{
case 0:
if (gSpecialVar_0x8004 == 20 && gSaveBlock2Ptr->frontier.chosenLvl == 1)
if (gSpecialVar_0x8004 == 20 && gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_OPEN)
gSpecialVar_0x8004++;
gUnknown_02022C2C = gUnknown_082F0530[gSpecialVar_0x8004];
sub_8010F84(gUnknown_02022C2C, 0, 0);
+5 -10
View File
@@ -20,6 +20,7 @@
#include "international_string_util.h"
#include "trig.h"
#include "scanline_effect.h"
#include "trainer_pokemon_sprites.h"
#define STARTER_MON_COUNT 3
@@ -48,12 +49,6 @@ extern const u8 gStarterChoose_LabelCoords[][2];
extern const u8 gUnknown_085B1E0C[];
extern const u8 gUnknown_085B1E28[][2];
extern void clear_scheduled_bg_copies_to_vram(void);
extern void dp13_810BB8C(void);
extern void do_scheduled_bg_tilemap_copies_to_vram(void);
extern u16 sub_818D820(u16);
extern u8 sub_818D3E4(u16 species, u32 trainerId, u32 personality, u8 flags, s16 x, s16 y, u8, u16);
// this file's functions
static void MainCallback2_StarterChoose(void);
static void sub_8134604(void);
@@ -132,7 +127,7 @@ void CB2_ChooseStarter(void)
ResetSpriteData();
ResetPaletteFade();
FreeAllSpritePalettes();
dp13_810BB8C();
ResetAllPicSprites();
LoadPalette(GetOverworldTextboxPalettePtr(), 0xE0, 0x20);
LoadPalette(gBirchBagGrassPal, 0, 0x40);
@@ -263,7 +258,7 @@ static void Task_StarterChoose5(u8 taskId)
case 0: // YES
// Return the starter choice and exit.
gSpecialVar_Result = gTasks[taskId].tStarterSelection;
dp13_810BB8C();
ResetAllPicSprites();
SetMainCallback2(gMain.savedCallback);
break;
case 1: // NO
@@ -271,7 +266,7 @@ static void Task_StarterChoose5(u8 taskId)
PlaySE(SE_SELECT);
spriteId = gTasks[taskId].tPkmnSpriteId;
FreeOamMatrix(gSprites[spriteId].oam.matrixNum);
sub_818D820(spriteId);
FreeAndDestroyMonPicSprite(spriteId);
spriteId = gTasks[taskId].tCircleSpriteId;
FreeOamMatrix(gSprites[spriteId].oam.matrixNum);
@@ -349,7 +344,7 @@ static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y)
{
u8 spriteId;
spriteId = sub_818D3E4(species, 8, 0, 1, x, y, 0xE, 0xFFFF);
spriteId = CreatePicSprite2(species, 8, 0, 1, x, y, 0xE, 0xFFFF);
gSprites[spriteId].oam.priority = 0;
return spriteId;
}
@@ -1,5 +1,3 @@
// Includes
#include "global.h"
#include "sprite.h"
#include "window.h"
@@ -7,7 +5,10 @@
#include "constants/species.h"
#include "palette.h"
#include "decompress.h"
#include "battle_dome_cards.h"
#include "trainer_pokemon_sprites.h"
#include "data2.h"
#include "pokemon.h"
#include "constants/trainers.h"
extern const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES];
extern const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES];
@@ -19,11 +20,10 @@ extern const union AffineAnimCmd *const gUnknown_082FF694[];
extern const union AnimCmd *const gPlayerMonSpriteAnimsTable[];
extern const union AnimCmd *const *const gMonAnimationsSpriteAnimsPtrTable[NUM_SPECIES];
extern const union AnimCmd *const *const gUnknown_0830536C[];
extern const u8 gFacilityClassToPicIndex[];
// Static type declarations
struct BattleDomeCard
struct PicData
{
u8 *frames;
struct SpriteFrameImage *images;
@@ -33,15 +33,16 @@ struct BattleDomeCard
};
// Static RAM declarations
#define PICS_COUNT 8
static EWRAM_DATA struct SpriteTemplate gUnknown_0203CCEC = {};
static EWRAM_DATA struct BattleDomeCard gUnknown_0203CD04[8] = {};
static EWRAM_DATA struct SpriteTemplate sCreatingSpriteTemplate = {};
static EWRAM_DATA struct PicData sSpritePics[PICS_COUNT] = {};
// Static ROM declarations
// .rodata
static const struct BattleDomeCard gUnknown_0860B058 = {};
static const struct PicData sDummyPicData = {};
static const struct OamData gUnknown_0860B064 =
{
.size = 3
@@ -53,80 +54,67 @@ static const struct OamData gUnknown_0860B06C =
// .text
static void nullsub_122(struct Sprite *sprite)
static void DummyPicSpriteCallback(struct Sprite *sprite)
{
}
bool16 dp13_810BB8C(void)
bool16 ResetAllPicSprites(void)
{
int i;
for (i = 0; i < 8; i ++)
{
gUnknown_0203CD04[i] = gUnknown_0860B058;
}
for (i = 0; i < PICS_COUNT; i ++)
sSpritePics[i] = sDummyPicData;
return FALSE;
}
static bool16 load_pokemon_image_TODO(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer, bool8 ignoreDeoxys)
static bool16 DecompressPic(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer, bool8 ignoreDeoxys)
{
if (!isTrainer)
{
if (isFrontPic)
{
if (!ignoreDeoxys)
{
LoadSpecialPokePic(&gMonFrontPicTable[species], dest, species, personality, isFrontPic);
}
else
{
LoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], dest, species, personality, isFrontPic);
}
}
else
{
if (!ignoreDeoxys)
{
LoadSpecialPokePic(&gMonBackPicTable[species], dest, species, personality, isFrontPic);
}
else
{
LoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], dest, species, personality, isFrontPic);
}
}
}
else
{
if (isFrontPic)
{
DecompressPicFromTable(&gTrainerFrontPicTable[species], dest, species);
}
else
{
DecompressPicFromTable(&gTrainerBackPicTable[species], dest, species);
}
}
return FALSE;
}
static bool16 sub_818D09C(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer)
static bool16 DecompressPic_HandleDeoxys(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer)
{
return load_pokemon_image_TODO(species, personality, isFrontPic, dest, isTrainer, FALSE);
return DecompressPic(species, personality, isFrontPic, dest, isTrainer, FALSE);
}
static void sub_818D0C4(u16 species, u32 otId, u32 personality, u8 paletteSlot, u16 paletteTag, bool8 isTrainer)
static void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 paletteSlot, u16 paletteTag, bool8 isTrainer)
{
if (!isTrainer)
{
if (paletteTag == 0xFFFF)
{
gUnknown_0203CCEC.paletteTag |= 0xFFFF;
sCreatingSpriteTemplate.paletteTag |= 0xFFFF;
LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20);
}
else
{
gUnknown_0203CCEC.paletteTag = paletteTag;
sCreatingSpriteTemplate.paletteTag = paletteTag;
LoadCompressedObjectPalette(GetMonSpritePalStructFromOtIdPersonality(species, otId, personality));
}
}
@@ -134,42 +122,34 @@ static void sub_818D0C4(u16 species, u32 otId, u32 personality, u8 paletteSlot,
{
if (paletteTag == 0xFFFF)
{
gUnknown_0203CCEC.paletteTag |= 0xFFFF;
sCreatingSpriteTemplate.paletteTag |= 0xFFFF;
LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, 0x100 + paletteSlot * 0x10, 0x20);
}
else
{
gUnknown_0203CCEC.paletteTag = paletteTag;
sCreatingSpriteTemplate.paletteTag = paletteTag;
LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[species]);
}
}
}
static void sub_818D180(u16 species, u32 otId, u32 personality, u8 paletteSlot, bool8 isTrainer)
static void LoadPicPaletteBySlot(u16 species, u32 otId, u32 personality, u8 paletteSlot, bool8 isTrainer)
{
if (!isTrainer)
{
LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), paletteSlot * 0x10, 0x20);
}
else
{
LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, paletteSlot * 0x10, 0x20);
}
}
static void uns_builder_assign_animtable1(bool8 isTrainer)
static void AssignSpriteAnimsTable(bool8 isTrainer)
{
if (!isTrainer)
{
gUnknown_0203CCEC.anims = gPlayerMonSpriteAnimsTable;
}
sCreatingSpriteTemplate.anims = gPlayerMonSpriteAnimsTable;
else
{
gUnknown_0203CCEC.anims = gUnknown_0830536C[0];
}
sCreatingSpriteTemplate.anims = gUnknown_0830536C[0];
}
static u16 oamt_spawn_poke_or_trainer_picture(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer, bool8 ignoreDeoxys)
static u16 CreatePicSprite(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer, bool8 ignoreDeoxys)
{
u8 i;
u8 *framePics;
@@ -177,14 +157,14 @@ static u16 oamt_spawn_poke_or_trainer_picture(u16 species, u32 otId, u32 persona
int j;
u8 spriteId;
for (i = 0; i < 8; i ++)
for (i = 0; i < PICS_COUNT; i ++)
{
if (!gUnknown_0203CD04[i].active)
if (!sSpritePics[i].active)
{
break;
}
}
if (i == 8)
if (i == PICS_COUNT)
{
return 0xFFFF;
}
@@ -199,7 +179,7 @@ static u16 oamt_spawn_poke_or_trainer_picture(u16 species, u32 otId, u32 persona
Free(framePics);
return 0xFFFF;
}
if (load_pokemon_image_TODO(species, personality, isFrontPic, framePics, isTrainer, ignoreDeoxys))
if (DecompressPic(species, personality, isFrontPic, framePics, isTrainer, ignoreDeoxys))
{
// debug trap?
return 0xFFFF;
@@ -209,32 +189,32 @@ static u16 oamt_spawn_poke_or_trainer_picture(u16 species, u32 otId, u32 persona
images[j].data = framePics + 0x800 * j;
images[j].size = 0x800;
}
gUnknown_0203CCEC.tileTag = 0xFFFF;
gUnknown_0203CCEC.oam = &gUnknown_0860B064;
uns_builder_assign_animtable1(isTrainer);
gUnknown_0203CCEC.images = images;
gUnknown_0203CCEC.affineAnims = gDummySpriteAffineAnimTable;
gUnknown_0203CCEC.callback = nullsub_122;
sub_818D0C4(species, otId, personality, paletteSlot, paletteTag, isTrainer);
spriteId = CreateSprite(&gUnknown_0203CCEC, x, y, 0);
sCreatingSpriteTemplate.tileTag = 0xFFFF;
sCreatingSpriteTemplate.oam = &gUnknown_0860B064;
AssignSpriteAnimsTable(isTrainer);
sCreatingSpriteTemplate.images = images;
sCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
sCreatingSpriteTemplate.callback = DummyPicSpriteCallback;
LoadPicPaletteByTagOrSlot(species, otId, personality, paletteSlot, paletteTag, isTrainer);
spriteId = CreateSprite(&sCreatingSpriteTemplate, x, y, 0);
if (paletteTag == 0xFFFF)
{
gSprites[spriteId].oam.paletteNum = paletteSlot;
}
gUnknown_0203CD04[i].frames = framePics;
gUnknown_0203CD04[i].images = images;
gUnknown_0203CD04[i].paletteTag = paletteTag;
gUnknown_0203CD04[i].spriteId = spriteId;
gUnknown_0203CD04[i].active = TRUE;
sSpritePics[i].frames = framePics;
sSpritePics[i].images = images;
sSpritePics[i].paletteTag = paletteTag;
sSpritePics[i].spriteId = spriteId;
sSpritePics[i].active = TRUE;
return spriteId;
}
static u16 sub_818D384(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer)
static u16 CreatePicSprite_HandleDeoxys(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer)
{
return oamt_spawn_poke_or_trainer_picture(species, otId, personality, isFrontPic, x, y, paletteSlot, paletteTag, isTrainer, FALSE);
return CreatePicSprite(species, otId, personality, isFrontPic, x, y, paletteSlot, paletteTag, isTrainer, FALSE);
}
u16 sub_818D3E4(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag)
u16 CreatePicSprite2(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag)
{
u8 *framePics;
struct SpriteFrameImage *images;
@@ -243,14 +223,14 @@ u16 sub_818D3E4(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y,
u8 spriteId;
u8 flags2;
for (i = 0; i < 8; i ++)
for (i = 0; i < PICS_COUNT; i ++)
{
if (!gUnknown_0203CD04[i].active)
if (!sSpritePics[i].active)
{
break;
}
}
if (i == 8)
if (i == PICS_COUNT)
{
return 0xFFFF;
}
@@ -274,7 +254,7 @@ u16 sub_818D3E4(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y,
Free(framePics);
return 0xFFFF;
}
if (load_pokemon_image_TODO(species, personality, flags, framePics, FALSE, FALSE))
if (DecompressPic(species, personality, flags, framePics, FALSE, FALSE))
{
// debug trap?
return 0xFFFF;
@@ -284,76 +264,76 @@ u16 sub_818D3E4(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y,
images[j].data = framePics + 0x800 * j;
images[j].size = 0x800;
}
gUnknown_0203CCEC.tileTag = 0xFFFF;
gUnknown_0203CCEC.anims = gMonAnimationsSpriteAnimsPtrTable[species];
gUnknown_0203CCEC.images = images;
sCreatingSpriteTemplate.tileTag = 0xFFFF;
sCreatingSpriteTemplate.anims = gMonAnimationsSpriteAnimsPtrTable[species];
sCreatingSpriteTemplate.images = images;
if (flags2 == 0x01)
{
gUnknown_0203CCEC.affineAnims = gUnknown_082FF694;
gUnknown_0203CCEC.oam = &gUnknown_0860B06C;
sCreatingSpriteTemplate.affineAnims = gUnknown_082FF694;
sCreatingSpriteTemplate.oam = &gUnknown_0860B06C;
}
else if (flags2 == 0x00)
{
gUnknown_0203CCEC.affineAnims = gUnknown_082FF618;
gUnknown_0203CCEC.oam = &gUnknown_0860B06C;
sCreatingSpriteTemplate.affineAnims = gUnknown_082FF618;
sCreatingSpriteTemplate.oam = &gUnknown_0860B06C;
}
else
{
gUnknown_0203CCEC.oam = &gUnknown_0860B064;
gUnknown_0203CCEC.affineAnims = gDummySpriteAffineAnimTable;
sCreatingSpriteTemplate.oam = &gUnknown_0860B064;
sCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
}
gUnknown_0203CCEC.callback = nullsub_122;
sub_818D0C4(species, otId, personality, paletteSlot, paletteTag, FALSE);
spriteId = CreateSprite(&gUnknown_0203CCEC, x, y, 0);
sCreatingSpriteTemplate.callback = DummyPicSpriteCallback;
LoadPicPaletteByTagOrSlot(species, otId, personality, paletteSlot, paletteTag, FALSE);
spriteId = CreateSprite(&sCreatingSpriteTemplate, x, y, 0);
if (paletteTag == 0xFFFF)
{
gSprites[spriteId].oam.paletteNum = paletteSlot;
}
gUnknown_0203CD04[i].frames = framePics;
gUnknown_0203CD04[i].images = images;
gUnknown_0203CD04[i].paletteTag = paletteTag;
gUnknown_0203CD04[i].spriteId = spriteId;
gUnknown_0203CD04[i].active = TRUE;
sSpritePics[i].frames = framePics;
sSpritePics[i].images = images;
sSpritePics[i].paletteTag = paletteTag;
sSpritePics[i].spriteId = spriteId;
sSpritePics[i].active = TRUE;
return spriteId;
}
static u16 sub_818D5B0(u16 spriteId)
static u16 FreeAndDestroyPicSpriteInternal(u16 spriteId)
{
u8 i;
u8 *framePics;
struct SpriteFrameImage *images;
for (i = 0; i < 8; i ++)
for (i = 0; i < PICS_COUNT; i ++)
{
if (gUnknown_0203CD04[i].spriteId == spriteId)
if (sSpritePics[i].spriteId == spriteId)
{
break;
}
}
if (i == 8)
if (i == PICS_COUNT)
{
return 0xFFFF;
}
framePics = gUnknown_0203CD04[i].frames;
images = gUnknown_0203CD04[i].images;
if (gUnknown_0203CD04[i].paletteTag != 0xFFFF)
framePics = sSpritePics[i].frames;
images = sSpritePics[i].images;
if (sSpritePics[i].paletteTag != 0xFFFF)
{
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteId].oam.paletteNum));
}
DestroySprite(&gSprites[spriteId]);
Free(framePics);
Free(images);
gUnknown_0203CD04[i] = gUnknown_0860B058;
sSpritePics[i] = sDummyPicData;
return 0;
}
static u16 sub_818D65C(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId, bool8 isTrainer)
{
if (sub_818D09C(species, personality, isFrontPic, (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA), FALSE))
if (DecompressPic_HandleDeoxys(species, personality, isFrontPic, (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA), FALSE))
{
return 0xFFFF;
}
sub_818D180(species, otId, personality, paletteSlot, isTrainer);
LoadPicPaletteBySlot(species, otId, personality, paletteSlot, isTrainer);
return 0;
}
@@ -362,29 +342,29 @@ static u16 sub_818D6CC(u16 species, u32 otId, u32 personality, bool8 isFrontPic,
u8 *framePics;
framePics = Alloc(4 * 0x800);
if (framePics && !sub_818D09C(species, personality, isFrontPic, framePics, isTrainer))
if (framePics && !DecompressPic_HandleDeoxys(species, personality, isFrontPic, framePics, isTrainer))
{
BlitBitmapRectToWindow(windowId, framePics, 0, 0, 0x40, 0x40, destX, destY, 0x40, 0x40);
sub_818D180(species, otId, personality, paletteSlot, isTrainer);
LoadPicPaletteBySlot(species, otId, personality, paletteSlot, isTrainer);
Free(framePics);
return 0;
}
return 0xFFFF;
}
static u16 sub_818D778(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 ignoreDeoxys)
static u16 CreateMonPicSprite(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 ignoreDeoxys)
{
return oamt_spawn_poke_or_trainer_picture(species, otId, personality, isFrontPic, x, y, paletteSlot, paletteTag, FALSE, ignoreDeoxys);
return CreatePicSprite(species, otId, personality, isFrontPic, x, y, paletteSlot, paletteTag, FALSE, ignoreDeoxys);
}
u16 sub_818D7D8(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag)
u16 CreateMonPicSprite_HandleDeoxys(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag)
{
return sub_818D778(species, otId, personality, isFrontPic, x, y, paletteSlot, paletteTag, FALSE);
return CreateMonPicSprite(species, otId, personality, isFrontPic, x, y, paletteSlot, paletteTag, FALSE);
}
u16 sub_818D820(u16 spriteId)
u16 FreeAndDestroyMonPicSprite(u16 spriteId)
{
return sub_818D5B0(spriteId);
return FreeAndDestroyPicSpriteInternal(spriteId);
}
u16 sub_818D834(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId)
@@ -397,14 +377,14 @@ u16 sub_818D864(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u16 de
return sub_818D6CC(species, otId, personality, isFrontPic, destX, destY, paletteSlot, windowId, FALSE);
}
u16 sub_818D8AC(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag)
u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag)
{
return sub_818D384(species, 0, 0, isFrontPic, x, y, paletteSlot, paletteTag, TRUE);
return CreatePicSprite_HandleDeoxys(species, 0, 0, isFrontPic, x, y, paletteSlot, paletteTag, TRUE);
}
u16 sub_818D8F0(u16 spriteId)
u16 FreeAndDestroyTrainerPicSprite(u16 spriteId)
{
return sub_818D5B0(spriteId);
return FreeAndDestroyPicSpriteInternal(spriteId);
}
u16 sub_818D904(u16 species, bool8 isFrontPic, u8 paletteSlot, u8 windowId)
@@ -417,17 +397,17 @@ u16 sub_818D938(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteS
return sub_818D6CC(species, 0, 0, isFrontPic, destX, destY, paletteSlot, windowId, TRUE);
}
u8 sub_818D97C(u8 a0, u8 a1)
u16 PlayerGenderToFrontTrainerPicId_Debug(u8 gender, bool8 getClass)
{
if (a1 == 1)
if (getClass == TRUE)
{
switch (a0)
switch (gender)
{
default:
return gFacilityClassToPicIndex[0x3F];
case 0:
return gFacilityClassToPicIndex[0x3C];
default:
return gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_MAY];
case MALE:
return gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_BRENDAN];
}
}
return a0;
return gender;
}
+1
View File
@@ -4,6 +4,7 @@
#include "text.h"
#include "sound.h"
ALIGNED(4)
static const u8 sUnknown_08616124[] = {1, 2, 4};
static const u16 sFont6BrailleGlyphs[] = INCBIN_U16("data/graphics/fonts/font6.fwjpnfont");