Merge pull request #1138 from GriffinRichards/doc-contest
Document contest
This commit is contained in:
+4
-4
@@ -1849,8 +1849,8 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
gAnimBattlerSpecies[i] = gContestResources->field_18->species;
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
gAnimBattlerSpecies[i] = gContestResources->moveAnim->species;
|
||||
}
|
||||
|
||||
if (!isMoveAnim)
|
||||
@@ -2311,7 +2311,7 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
|
||||
battlerSpriteId = gBattlerSpriteIds[battlerId];
|
||||
|
||||
gBattle_BG1_X = -(gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x) + 0x20;
|
||||
if (IsContest() && IsSpeciesNotUnown(gContestResources->field_18->species))
|
||||
if (IsContest() && IsSpeciesNotUnown(gContestResources->moveAnim->species))
|
||||
gBattle_BG1_X--;
|
||||
|
||||
gBattle_BG1_Y = -(gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y) + 0x20;
|
||||
@@ -2369,7 +2369,7 @@ static void sub_80A46A0(void)
|
||||
struct BattleAnimBgData animBg;
|
||||
u16 *ptr;
|
||||
|
||||
if (IsSpeciesNotUnown(gContestResources->field_18->species))
|
||||
if (IsSpeciesNotUnown(gContestResources->moveAnim->species))
|
||||
{
|
||||
sub_80A6B30(&animBg);
|
||||
ptr = animBg.bgTilemap;
|
||||
|
||||
@@ -849,7 +849,7 @@ void AnimTask_MetallicShine(u8 taskId)
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -2297,7 +2297,7 @@ void AnimTask_TransformMon(u8 taskId)
|
||||
LoadBgTiles(1, animBg.bgTiles, 0x800, animBg.tilesOffset);
|
||||
if (IsContest())
|
||||
{
|
||||
if (IsSpeciesNotUnown(gContestResources->field_18->species) != IsSpeciesNotUnown(gContestResources->field_18->unk2))
|
||||
if (IsSpeciesNotUnown(gContestResources->moveAnim->species) != IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies))
|
||||
{
|
||||
bgTilemap = (u16 *)animBg.bgTilemap;
|
||||
for (i = 0; i < 8; i++)
|
||||
@@ -2319,7 +2319,7 @@ void AnimTask_TransformMon(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
if (IsSpeciesNotUnown(gContestResources->field_18->unk2))
|
||||
if (IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies))
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0;
|
||||
else
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF694;
|
||||
@@ -3196,10 +3196,10 @@ void AnimTask_RolePlaySilhouette(u8 taskId)
|
||||
GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
if (IsContest())
|
||||
{
|
||||
isBackPic = 1;
|
||||
personality = gContestResources->field_18->unk10;
|
||||
otId = gContestResources->field_18->unkC;
|
||||
species = gContestResources->field_18->unk2;
|
||||
isBackPic = TRUE;
|
||||
personality = gContestResources->moveAnim->targetPersonality;
|
||||
otId = gContestResources->moveAnim->otId;
|
||||
species = gContestResources->moveAnim->targetSpecies;
|
||||
xOffset = 20;
|
||||
priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
|
||||
}
|
||||
@@ -5031,9 +5031,9 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId)
|
||||
case 1:
|
||||
if (IsContest())
|
||||
{
|
||||
personality = gContestResources->field_18->unk8;
|
||||
otId = gContestResources->field_18->unkC;
|
||||
species = gContestResources->field_18->species;
|
||||
personality = gContestResources->moveAnim->personality;
|
||||
otId = gContestResources->moveAnim->otId;
|
||||
species = gContestResources->moveAnim->species;
|
||||
subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
|
||||
isBackPic = 0;
|
||||
x = -32;
|
||||
|
||||
+15
-15
@@ -141,10 +141,10 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
|
||||
default:
|
||||
if (IsContest())
|
||||
{
|
||||
if (gContestResources->field_18->unk4_0)
|
||||
species = gContestResources->field_18->unk2;
|
||||
if (gContestResources->moveAnim->hasTargetAnim)
|
||||
species = gContestResources->moveAnim->targetSpecies;
|
||||
else
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -189,10 +189,10 @@ u8 GetBattlerYDelta(u8 battlerId, u16 species)
|
||||
{
|
||||
if (IsContest())
|
||||
{
|
||||
if (gContestResources->field_18->unk4_0)
|
||||
personality = gContestResources->field_18->unk10;
|
||||
if (gContestResources->moveAnim->hasTargetAnim)
|
||||
personality = gContestResources->moveAnim->targetPersonality;
|
||||
else
|
||||
personality = gContestResources->field_18->unk8;
|
||||
personality = gContestResources->moveAnim->personality;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -306,10 +306,10 @@ u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType)
|
||||
{
|
||||
if (IsContest())
|
||||
{
|
||||
if (gContestResources->field_18->unk4_0)
|
||||
species = gContestResources->field_18->unk2;
|
||||
if (gContestResources->moveAnim->hasTargetAnim)
|
||||
species = gContestResources->moveAnim->targetSpecies;
|
||||
else
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1851,7 +1851,7 @@ static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId)
|
||||
{
|
||||
if (IsContest())
|
||||
{
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
return gMonBackPicCoords[species].y_offset;
|
||||
}
|
||||
else
|
||||
@@ -2103,15 +2103,15 @@ s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr)
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
if (gContestResources->field_18->unk4_0)
|
||||
if (gContestResources->moveAnim->hasTargetAnim)
|
||||
{
|
||||
species = gContestResources->field_18->unk2;
|
||||
personality = gContestResources->field_18->unk10;
|
||||
species = gContestResources->moveAnim->targetSpecies;
|
||||
personality = gContestResources->moveAnim->targetPersonality;
|
||||
}
|
||||
else
|
||||
{
|
||||
species = gContestResources->field_18->species;
|
||||
personality = gContestResources->field_18->unk8;
|
||||
species = gContestResources->moveAnim->species;
|
||||
personality = gContestResources->moveAnim->personality;
|
||||
}
|
||||
if (species == SPECIES_UNOWN)
|
||||
{
|
||||
|
||||
@@ -134,7 +134,7 @@ void SoundTask_PlayCryHighPitch(u8 taskId)
|
||||
if (IsContest())
|
||||
{
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
else
|
||||
DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task.
|
||||
}
|
||||
@@ -180,7 +180,7 @@ void SoundTask_PlayDoubleCry(u8 taskId)
|
||||
if (IsContest())
|
||||
{
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
else
|
||||
DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task.
|
||||
}
|
||||
@@ -284,7 +284,7 @@ void SoundTask_PlayCryWithEcho(u8 taskId)
|
||||
pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
|
||||
|
||||
if (IsContest())
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
else
|
||||
species = gAnimBattlerSpecies[gBattleAnimAttacker];
|
||||
|
||||
|
||||
@@ -318,7 +318,7 @@ void AnimTask_DrawFallingWhiteLinesOnAttacker(u8 taskId)
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -440,7 +440,7 @@ static void sub_8116F04(u8 taskId)
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
sAnimStatsChangeData->species = gContestResources->field_18->species;
|
||||
sAnimStatsChangeData->species = gContestResources->moveAnim->species;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -810,7 +810,7 @@ void sub_8117854(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5,
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -886,9 +886,9 @@ void sub_80587B0(void)
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (gWirelessCommType == 0)
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
else
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_80586F8;
|
||||
}
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@
|
||||
#include "international_string_util.h"
|
||||
#include "trainer_pokemon_sprites.h"
|
||||
#include "scanline_effect.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "graphics.h"
|
||||
#include "constants/battle_dome.h"
|
||||
#include "constants/frontier_util.h"
|
||||
|
||||
@@ -916,14 +916,14 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform
|
||||
if (IsContest())
|
||||
{
|
||||
position = 0;
|
||||
targetSpecies = gContestResources->field_18->unk2;
|
||||
personalityValue = gContestResources->field_18->unk8;
|
||||
otId = gContestResources->field_18->unkC;
|
||||
targetSpecies = gContestResources->moveAnim->targetSpecies;
|
||||
personalityValue = gContestResources->moveAnim->personality;
|
||||
otId = gContestResources->moveAnim->otId;
|
||||
|
||||
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[targetSpecies],
|
||||
gMonSpritesGfxPtr->sprites[0],
|
||||
targetSpecies,
|
||||
gContestResources->field_18->unk10);
|
||||
gContestResources->moveAnim->targetPersonality);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+7
-7
@@ -1484,9 +1484,9 @@ static void CB2_PreInitMultiBattle(void)
|
||||
{
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
if (gWirelessCommType)
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
else
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
@@ -2368,7 +2368,7 @@ static void sub_8038F34(void)
|
||||
case 6:
|
||||
if (IsLinkTaskFinished() == TRUE)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
BattlePutTextOnWindow(gText_LinkStandby3, 0);
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
@@ -2382,7 +2382,7 @@ static void sub_8038F34(void)
|
||||
break;
|
||||
case 8:
|
||||
if (!gWirelessCommType)
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
break;
|
||||
case 9:
|
||||
@@ -2556,7 +2556,7 @@ static void sub_803939C(void)
|
||||
HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
|
||||
if (gMain.field_439_x4)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
BattlePutTextOnWindow(gText_LinkStandby3, 0);
|
||||
}
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
@@ -2566,7 +2566,7 @@ static void sub_803939C(void)
|
||||
if (--gBattleCommunication[1] == 0)
|
||||
{
|
||||
if (gMain.field_439_x4 && !gWirelessCommType)
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
break;
|
||||
@@ -2605,7 +2605,7 @@ static void sub_803939C(void)
|
||||
{
|
||||
if (gMain.field_439_x4)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
BattlePutTextOnWindow(gText_LinkStandby3, 0);
|
||||
}
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@
|
||||
#include "fieldmap.h"
|
||||
#include "random.h"
|
||||
#include "starter_choose.h"
|
||||
#include "script_pokemon_80F8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "palette.h"
|
||||
#include "window.h"
|
||||
#include "event_object_movement.h"
|
||||
|
||||
+2
-2
@@ -2627,7 +2627,7 @@ static void LoadLinkMultiOpponentsData(void)
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gSpecialVar_Result = 5;
|
||||
break;
|
||||
case 5:
|
||||
@@ -2644,7 +2644,7 @@ static void LoadLinkMultiOpponentsData(void)
|
||||
static void sub_8164DCC(void)
|
||||
{
|
||||
if (gWirelessCommType != 0)
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
}
|
||||
|
||||
static void SetMultiPartnerGfx(void)
|
||||
|
||||
+8
-8
@@ -1230,7 +1230,7 @@ static void sub_8080018(void)
|
||||
sBerryBlenderData->field_114 = 0;
|
||||
Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
|
||||
memcpy(gBlockSendBuffer, &sBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry));
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
sBerryBlenderData->framesToWait = 0;
|
||||
break;
|
||||
case 9:
|
||||
@@ -1238,7 +1238,7 @@ static void sub_8080018(void)
|
||||
{
|
||||
ResetBlockReceivedFlags();
|
||||
if (GetMultiplayerId() == 0)
|
||||
sub_800A4D8(4);
|
||||
SendBlockRequest(4);
|
||||
sBerryBlenderData->mainState++;
|
||||
}
|
||||
break;
|
||||
@@ -1332,7 +1332,7 @@ static void sub_8080018(void)
|
||||
sBerryBlenderData->mainState++;
|
||||
break;
|
||||
case 19:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
sBerryBlenderData->mainState++;
|
||||
break;
|
||||
case 20:
|
||||
@@ -2587,7 +2587,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
|
||||
switch (sBerryBlenderData->field_1A0)
|
||||
{
|
||||
case 0:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
sBerryBlenderData->field_1A0 = 1;
|
||||
sBerryBlenderData->framesToWait = 0;
|
||||
break;
|
||||
@@ -2606,7 +2606,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
|
||||
case 3:
|
||||
if (++sBerryBlenderData->framesToWait == 10)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
sBerryBlenderData->field_1A0++;
|
||||
}
|
||||
break;
|
||||
@@ -2682,7 +2682,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
|
||||
break;
|
||||
case 5:
|
||||
Blender_PrintText(&sBerryBlenderData->textState, gText_SavingDontTurnOff2, 0);
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
sBerryBlenderData->gameEndState++;
|
||||
break;
|
||||
case 6:
|
||||
@@ -2702,7 +2702,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
|
||||
break;
|
||||
case 8:
|
||||
sBerryBlenderData->gameEndState++;
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
break;
|
||||
case 9:
|
||||
if (IsLinkTaskFinished())
|
||||
@@ -2732,7 +2732,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
|
||||
case 11:
|
||||
if (++sBerryBlenderData->framesToWait > 30)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
sBerryBlenderData->gameEndState++;
|
||||
}
|
||||
break;
|
||||
|
||||
+15
-15
@@ -1125,7 +1125,7 @@ int sub_802130C(void)
|
||||
switch (var0->unkC)
|
||||
{
|
||||
case 0:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 1:
|
||||
if (!IsLinkTaskFinished())
|
||||
@@ -2027,7 +2027,7 @@ static u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5)
|
||||
r4->unkC = 3;
|
||||
return 0;
|
||||
case 1:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
++r4->unkC;
|
||||
return 0;
|
||||
case 2:
|
||||
@@ -2110,7 +2110,7 @@ static u32 sub_8022E5C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
|
||||
switch (r4->unkC)
|
||||
{
|
||||
case 0:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 1:
|
||||
if (IsLinkTaskFinished())
|
||||
@@ -2167,7 +2167,7 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2)
|
||||
sub_8022BEC(3, 1, NULL);
|
||||
return 0;
|
||||
case 1:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 2:
|
||||
if (!IsLinkTaskFinished())
|
||||
@@ -2213,7 +2213,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
|
||||
{
|
||||
case 0:
|
||||
sub_80214A8(r4, &r4->unk138);
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 1:
|
||||
if (!IsLinkTaskFinished())
|
||||
@@ -2233,7 +2233,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
|
||||
return 0;
|
||||
r4->unk138.unk38[r4->unk138.unk0] = NULL;
|
||||
++r4->unk138.unk0;
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 4:
|
||||
if (!IsLinkTaskFinished())
|
||||
@@ -2247,7 +2247,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
|
||||
break;
|
||||
case 5:
|
||||
sub_80216A8(r4, &r4->unk138);
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 6:
|
||||
if (!IsLinkTaskFinished())
|
||||
@@ -2295,7 +2295,7 @@ static u32 sub_80231B8(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
|
||||
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
|
||||
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
|
||||
SetGpuReg(REG_OFFSET_BG3VOFS, 0);
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 3:
|
||||
if (!IsLinkTaskFinished())
|
||||
@@ -2323,7 +2323,7 @@ static u32 sub_80232EC(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
|
||||
return 0;
|
||||
// fallthrough
|
||||
case 0:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 3:
|
||||
if (!IsLinkTaskFinished())
|
||||
@@ -2703,7 +2703,7 @@ static u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
|
||||
case 4:
|
||||
if (!sub_80218D4(r4, &r4->unk138))
|
||||
return 0;
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
r4->unk10 = 0;
|
||||
break;
|
||||
case 5:
|
||||
@@ -2737,7 +2737,7 @@ static u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6)
|
||||
case 2:
|
||||
if (!sub_80218D4(r5, &r5->unk138))
|
||||
return 0;
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
r5->unk10 = 0;
|
||||
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
|
||||
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
|
||||
@@ -3005,7 +3005,7 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4)
|
||||
r5->unkC = 0;
|
||||
return 0;
|
||||
case 1:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 2:
|
||||
if (!IsLinkTaskFinished())
|
||||
@@ -3084,7 +3084,7 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
|
||||
switch (r4->unkC)
|
||||
{
|
||||
case 0:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 1:
|
||||
if (!IsLinkTaskFinished())
|
||||
@@ -3184,12 +3184,12 @@ static u32 sub_8024508(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1
|
||||
switch (r5->unkC)
|
||||
{
|
||||
case 0:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 1:
|
||||
if (!IsLinkTaskFinished())
|
||||
return 0;
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
break;
|
||||
case 2:
|
||||
if (gReceivedRemoteLinkPlayers != 0)
|
||||
|
||||
+15
-15
@@ -20,7 +20,7 @@
|
||||
#include "union_room.h"
|
||||
#include "mevent2.h"
|
||||
#include "script.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "sound.h"
|
||||
#include "start_menu.h"
|
||||
#include "string_util.h"
|
||||
@@ -203,7 +203,7 @@ static void sub_80B2600(u8 taskId)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (gTasks[taskId].data[0] == 10)
|
||||
{
|
||||
sub_800A4D8(2);
|
||||
SendBlockRequest(2);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
@@ -357,7 +357,7 @@ static void Task_LinkupExchangeDataWithLeader(u8 taskId)
|
||||
if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS
|
||||
|| gSpecialVar_Result == LINKUP_WRONG_NUM_PLAYERS)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
HideFieldMessageBox();
|
||||
gTasks[taskId].func = Task_StopLinkup;
|
||||
}
|
||||
@@ -392,7 +392,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
|
||||
{
|
||||
if (!Link_AnyPartnersPlayingRubyOrSapphire())
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
HideFieldMessageBox();
|
||||
gTasks[taskId].func = Task_StopLinkup;
|
||||
}
|
||||
@@ -405,7 +405,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
|
||||
}
|
||||
else if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
HideFieldMessageBox();
|
||||
gTasks[taskId].func = Task_StopLinkup;
|
||||
}
|
||||
@@ -426,7 +426,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
|
||||
card->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES, NULL);
|
||||
card->monSpecies[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL);
|
||||
gTasks[taskId].func = Task_LinkupAwaitTrainerCardData;
|
||||
sub_800A4D8(2);
|
||||
SendBlockRequest(2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -481,7 +481,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId)
|
||||
{
|
||||
// Unsuccessful battle tower linkup
|
||||
*linkupStatus = LINKUP_FAILED_BATTLE_TOWER;
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gTasks[taskId].func = Task_StopLinkup;
|
||||
}
|
||||
else
|
||||
@@ -503,7 +503,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId)
|
||||
else
|
||||
{
|
||||
// Unsuccessful linkup
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gTasks[taskId].func = Task_StopLinkup;
|
||||
}
|
||||
}
|
||||
@@ -686,7 +686,7 @@ static void Task_ValidateMixingGameLanguage(u8 taskId)
|
||||
if (mixingForeignGames)
|
||||
{
|
||||
gSpecialVar_Result = LINKUP_FOREIGN_GAME;
|
||||
sub_800AD10();
|
||||
SetCloseLinkCallbackHandleJP();
|
||||
gTasks[taskId].tState = 1;
|
||||
return;
|
||||
}
|
||||
@@ -856,7 +856,7 @@ static void Task_StartWiredCableClubBattle(u8 taskId)
|
||||
task->tState++;
|
||||
break;
|
||||
case 3:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
task->tState++;
|
||||
break;
|
||||
case 4:
|
||||
@@ -919,7 +919,7 @@ static void Task_StartWirelessCableClubBattle(u8 taskId)
|
||||
tState = 5;
|
||||
break;
|
||||
case 5:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
tState = 6;
|
||||
break;
|
||||
case 6:
|
||||
@@ -974,7 +974,7 @@ static void CB2_ReturnFromUnionRoomBattle(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gMain.state = 1;
|
||||
}
|
||||
break;
|
||||
@@ -1113,7 +1113,7 @@ static void Task_StartWiredTrade(u8 taskId)
|
||||
gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
|
||||
gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
|
||||
m4aMPlayAllStop();
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
task->tState++;
|
||||
break;
|
||||
case 3:
|
||||
@@ -1146,7 +1146,7 @@ static void Task_StartWirelessTrade(u8 taskId)
|
||||
gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
|
||||
gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
|
||||
m4aMPlayAllStop();
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
tState++;
|
||||
break;
|
||||
case 3:
|
||||
@@ -1264,7 +1264,7 @@ static void sub_80B3AAC(u8 taskId)
|
||||
// Unused
|
||||
static void sub_80B3AD0(u8 taskId)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gTasks[taskId].func = sub_80B3AAC;
|
||||
}
|
||||
|
||||
|
||||
+1799
-1546
File diff suppressed because it is too large
Load Diff
+66
-63
@@ -4,16 +4,17 @@
|
||||
#include "random.h"
|
||||
#include "contest_ai.h"
|
||||
#include "contest_effect.h"
|
||||
#include "constants/moves.h"
|
||||
|
||||
extern const u8 *gAIScriptPtr;
|
||||
extern const u8 *gContestAIChecks[];
|
||||
|
||||
static void ContestAICmd_score(void);
|
||||
static void ContestAICmd_get_turn(void);
|
||||
static void ContestAICmd_if_turn_less_than(void);
|
||||
static void ContestAICmd_if_turn_more_than(void);
|
||||
static void ContestAICmd_if_turn_eq(void);
|
||||
static void ContestAICmd_if_turn_not_eq(void);
|
||||
static void ContestAICmd_get_appeal_num(void);
|
||||
static void ContestAICmd_if_appeal_num_less_than(void);
|
||||
static void ContestAICmd_if_appeal_num_more_than(void);
|
||||
static void ContestAICmd_if_appeal_num_eq(void);
|
||||
static void ContestAICmd_if_appeal_num_not_eq(void);
|
||||
static void ContestAICmd_get_excitement(void);
|
||||
static void ContestAICmd_if_excitement_less_than(void);
|
||||
static void ContestAICmd_if_excitement_more_than(void);
|
||||
@@ -150,11 +151,11 @@ typedef void (* ContestAICmdFunc)(void);
|
||||
static const ContestAICmdFunc sContestAICmdTable[] =
|
||||
{
|
||||
ContestAICmd_score, // 0x00
|
||||
ContestAICmd_get_turn, // 0x01
|
||||
ContestAICmd_if_turn_less_than, // 0x02
|
||||
ContestAICmd_if_turn_more_than, // 0x03
|
||||
ContestAICmd_if_turn_eq, // 0x04
|
||||
ContestAICmd_if_turn_not_eq, // 0x05
|
||||
ContestAICmd_get_appeal_num, // 0x01
|
||||
ContestAICmd_if_appeal_num_less_than, // 0x02
|
||||
ContestAICmd_if_appeal_num_more_than, // 0x03
|
||||
ContestAICmd_if_appeal_num_eq, // 0x04
|
||||
ContestAICmd_if_appeal_num_not_eq, // 0x05
|
||||
ContestAICmd_get_excitement, // 0x06
|
||||
ContestAICmd_if_excitement_less_than, // 0x07
|
||||
ContestAICmd_if_excitement_more_than, // 0x08
|
||||
@@ -288,7 +289,7 @@ static const ContestAICmdFunc sContestAICmdTable[] =
|
||||
};
|
||||
|
||||
static void ContestAI_DoAIProcessing(void);
|
||||
static bool8 sub_81563B0(u8);
|
||||
static bool8 GetContestantIdByTurn(u8);
|
||||
static void AIStackPushVar(const u8 *);
|
||||
static u8 AIStackPop(void);
|
||||
|
||||
@@ -297,8 +298,8 @@ void ContestAI_ResetAI(u8 contestantAI)
|
||||
int i;
|
||||
memset(&eContestAI, 0, sizeof(struct ContestAIInfo));
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
eContestAI.unk5[i] = 100;
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
eContestAI.moveScores[i] = 100;
|
||||
|
||||
eContestAI.contestantId = contestantAI;
|
||||
eContestAI.stackSize = 0;
|
||||
@@ -321,16 +322,18 @@ u8 ContestAI_GetActionToUse(void)
|
||||
|
||||
while (1)
|
||||
{
|
||||
u8 rval = Random() & 3;
|
||||
u8 r2 = eContestAI.unk5[rval];
|
||||
// Randomly choose a move index. If it's the move
|
||||
// with the highest (or tied highest) score, return
|
||||
u8 moveIdx = Random() & (MAX_MON_MOVES - 1); // % MAX_MON_MOVES doesn't match
|
||||
u8 score = eContestAI.moveScores[moveIdx];
|
||||
int i;
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
if (r2 < eContestAI.unk5[i])
|
||||
if (score < eContestAI.moveScores[i])
|
||||
break;
|
||||
}
|
||||
if (i == 4)
|
||||
return rval;
|
||||
if (i == MAX_MON_MOVES)
|
||||
return moveIdx;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -345,26 +348,26 @@ static void ContestAI_DoAIProcessing(void)
|
||||
case CONTESTAI_SETTING_UP:
|
||||
gAIScriptPtr = gContestAIChecks[eContestAI.currentAICheck];
|
||||
|
||||
if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == 0)
|
||||
eContestAI.nextMove = 0; // don't process a move that doesn't exist.
|
||||
if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == MOVE_NONE)
|
||||
eContestAI.nextMove = MOVE_NONE; // don't process a move that doesn't exist.
|
||||
else
|
||||
eContestAI.nextMove = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex];
|
||||
eContestAI.aiState++;
|
||||
break;
|
||||
case CONTESTAI_PROCESSING:
|
||||
if (eContestAI.nextMove != 0)
|
||||
if (eContestAI.nextMove != MOVE_NONE)
|
||||
{
|
||||
sContestAICmdTable[*gAIScriptPtr](); // run the command.
|
||||
}
|
||||
else
|
||||
{
|
||||
eContestAI.unk5[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist.
|
||||
eContestAI.moveScores[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist.
|
||||
eContestAI.aiAction |= 1;
|
||||
}
|
||||
if (eContestAI.aiAction & 1)
|
||||
{
|
||||
eContestAI.nextMoveIndex++;
|
||||
if (eContestAI.nextMoveIndex < 4)
|
||||
if (eContestAI.nextMoveIndex < MAX_MON_MOVES)
|
||||
eContestAI.aiState = 0;
|
||||
else
|
||||
// aiState = CONTESTAI_FINISHED
|
||||
@@ -376,12 +379,12 @@ static void ContestAI_DoAIProcessing(void)
|
||||
}
|
||||
}
|
||||
|
||||
static u8 sub_81563B0(u8 var)
|
||||
static u8 GetContestantIdByTurn(u8 turn)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
if (eContestResources8.turnOrder[i] == var)
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
if (eContestAppealResults.turnOrder[i] == turn)
|
||||
break;
|
||||
|
||||
return i;
|
||||
@@ -389,27 +392,27 @@ static u8 sub_81563B0(u8 var)
|
||||
|
||||
static void ContestAICmd_score(void)
|
||||
{
|
||||
s16 score = eContestAI.unk5[eContestAI.nextMoveIndex] + (s8)gAIScriptPtr[1];
|
||||
s16 score = eContestAI.moveScores[eContestAI.nextMoveIndex] + (s8)gAIScriptPtr[1];
|
||||
|
||||
if (score > 255)
|
||||
score = 255;
|
||||
else if (score < 0)
|
||||
score = 0;
|
||||
|
||||
eContestAI.unk5[eContestAI.nextMoveIndex] = score;
|
||||
eContestAI.moveScores[eContestAI.nextMoveIndex] = score;
|
||||
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
static void ContestAICmd_get_turn(void)
|
||||
static void ContestAICmd_get_appeal_num(void)
|
||||
{
|
||||
eContestAI.scriptResult = eContest.turnNumber;
|
||||
eContestAI.scriptResult = eContest.appealNumber;
|
||||
gAIScriptPtr += 1;
|
||||
}
|
||||
|
||||
static void ContestAICmd_if_turn_less_than(void)
|
||||
static void ContestAICmd_if_appeal_num_less_than(void)
|
||||
{
|
||||
ContestAICmd_get_turn();
|
||||
ContestAICmd_get_appeal_num();
|
||||
|
||||
if (eContestAI.scriptResult < gAIScriptPtr[0])
|
||||
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
|
||||
@@ -417,9 +420,9 @@ static void ContestAICmd_if_turn_less_than(void)
|
||||
gAIScriptPtr += 5;
|
||||
}
|
||||
|
||||
static void ContestAICmd_if_turn_more_than(void)
|
||||
static void ContestAICmd_if_appeal_num_more_than(void)
|
||||
{
|
||||
ContestAICmd_get_turn();
|
||||
ContestAICmd_get_appeal_num();
|
||||
|
||||
if (eContestAI.scriptResult > gAIScriptPtr[0])
|
||||
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
|
||||
@@ -427,9 +430,9 @@ static void ContestAICmd_if_turn_more_than(void)
|
||||
gAIScriptPtr += 5;
|
||||
}
|
||||
|
||||
static void ContestAICmd_if_turn_eq(void)
|
||||
static void ContestAICmd_if_appeal_num_eq(void)
|
||||
{
|
||||
ContestAICmd_get_turn();
|
||||
ContestAICmd_get_appeal_num();
|
||||
|
||||
if (eContestAI.scriptResult == gAIScriptPtr[0])
|
||||
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
|
||||
@@ -437,9 +440,9 @@ static void ContestAICmd_if_turn_eq(void)
|
||||
gAIScriptPtr += 5;
|
||||
}
|
||||
|
||||
static void ContestAICmd_if_turn_not_eq(void)
|
||||
static void ContestAICmd_if_appeal_num_not_eq(void)
|
||||
{
|
||||
ContestAICmd_get_turn();
|
||||
ContestAICmd_get_appeal_num();
|
||||
|
||||
if (eContestAI.scriptResult != gAIScriptPtr[0])
|
||||
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
|
||||
@@ -495,7 +498,7 @@ static void ContestAICmd_if_excitement_not_eq(void)
|
||||
|
||||
static void ContestAICmd_get_user_order(void)
|
||||
{
|
||||
eContestAI.scriptResult = eContestResources8.turnOrder[eContestAI.contestantId];
|
||||
eContestAI.scriptResult = eContestAppealResults.turnOrder[eContestAI.contestantId];
|
||||
gAIScriptPtr += 1;
|
||||
}
|
||||
|
||||
@@ -633,7 +636,7 @@ static void ContestAICmd_unk_19(void)
|
||||
|
||||
static void ContestAICmd_unk_1A(void)
|
||||
{
|
||||
eContestAI.scriptResult = gContestMonConditions[eContestAI.contestantId];
|
||||
eContestAI.scriptResult = gContestMonRound1Points[eContestAI.contestantId];
|
||||
gAIScriptPtr += 1;
|
||||
}
|
||||
|
||||
@@ -1146,9 +1149,9 @@ static void ContestAICmd_if_would_not_finish_combo(void)
|
||||
|
||||
static void ContestAICmd_get_condition(void)
|
||||
{
|
||||
int var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
|
||||
eContestAI.scriptResult = eContestantStatus[var].condition / 10;
|
||||
eContestAI.scriptResult = eContestantStatus[contestant].condition / 10;
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
@@ -1194,11 +1197,11 @@ static void ContestAICmd_if_condition_not_eq(void)
|
||||
|
||||
static void ContestAICmd_get_used_combo_starter(void)
|
||||
{
|
||||
u16 result = 0;
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u16 result = FALSE;
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
|
||||
if (sub_80DE1E8(var))
|
||||
result = gContestMoves[eContestantStatus[var].prevMove].comboStarterId ? 1 : 0;
|
||||
if (IsContestantAllowedToCombo(contestant))
|
||||
result = gContestMoves[eContestantStatus[contestant].prevMove].comboStarterId ? TRUE : FALSE;
|
||||
|
||||
eContestAI.scriptResult = result;
|
||||
gAIScriptPtr += 2;
|
||||
@@ -1246,7 +1249,7 @@ static void ContestAICmd_if_used_combo_starter_not_eq(void)
|
||||
|
||||
static void ContestAICmd_check_can_participate(void)
|
||||
{
|
||||
if (Contest_IsMonsTurnDisabled(sub_81563B0(gAIScriptPtr[1])))
|
||||
if (Contest_IsMonsTurnDisabled(GetContestantIdByTurn(gAIScriptPtr[1])))
|
||||
eContestAI.scriptResult = FALSE;
|
||||
else
|
||||
eContestAI.scriptResult = TRUE;
|
||||
@@ -1276,9 +1279,9 @@ static void ContestAICmd_if_cannot_participate(void)
|
||||
|
||||
static void ContestAICmd_get_val_812A188(void)
|
||||
{
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
|
||||
eContestAI.scriptResult = eContestantStatus[var].unk15_3;
|
||||
eContestAI.scriptResult = eContestantStatus[contestant].unk15_3;
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
@@ -1304,9 +1307,9 @@ static void ContestAICmd_contest_58(void)
|
||||
|
||||
static void ContestAICmd_unk_59(void)
|
||||
{
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
|
||||
eContestAI.scriptResult = eContestantStatus[var].pointTotal - eContestantStatus[eContestAI.contestantId].pointTotal;
|
||||
eContestAI.scriptResult = eContestantStatus[contestant].pointTotal - eContestantStatus[eContestAI.contestantId].pointTotal;
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
@@ -1352,9 +1355,9 @@ static void ContestAICmd_unk_5D(void)
|
||||
|
||||
static void ContestAICmd_unk_5E(void)
|
||||
{
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
|
||||
eContestAI.scriptResult = gContestMonConditions[var] - gContestMonConditions[eContestAI.contestantId];
|
||||
eContestAI.scriptResult = gContestMonRound1Points[contestant] - gContestMonRound1Points[eContestAI.contestantId];
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
@@ -1400,9 +1403,9 @@ static void ContestAICmd_unk_62(void)
|
||||
|
||||
static void ContestAICmd_unk_63(void)
|
||||
{
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 var2 = gAIScriptPtr[2];
|
||||
u16 move = eContest.moveHistory[var2][var];
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
u8 turn = gAIScriptPtr[2];
|
||||
u16 move = eContest.moveHistory[turn][contestant];
|
||||
|
||||
eContestAI.scriptResult = gContestMoves[move].effect;
|
||||
gAIScriptPtr += 3;
|
||||
@@ -1450,9 +1453,9 @@ static void ContestAICmd_unk_67(void)
|
||||
|
||||
static void ContestAICmd_unk_68(void)
|
||||
{
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 var2 = gAIScriptPtr[2];
|
||||
s8 result = eContest.excitementHistory[var2][var];
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
u8 turn = gAIScriptPtr[2];
|
||||
s8 result = eContest.excitementHistory[turn][contestant];
|
||||
|
||||
eContestAI.scriptResult = result;
|
||||
gAIScriptPtr += 3;
|
||||
@@ -1500,9 +1503,9 @@ static void ContestAICmd_unk_6C(void)
|
||||
|
||||
static void ContestAICmd_unk_6D(void)
|
||||
{
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 var2 = gAIScriptPtr[2];
|
||||
u16 move = eContest.moveHistory[var2][var];
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
u8 turn = gAIScriptPtr[2];
|
||||
u16 move = eContest.moveHistory[turn][contestant];
|
||||
|
||||
eContestAI.scriptResult = gContestEffects[gContestMoves[move].effect].effectType;
|
||||
gAIScriptPtr += 3;
|
||||
|
||||
+237
-237
File diff suppressed because it is too large
Load Diff
+172
-157
@@ -8,10 +8,18 @@
|
||||
#include "task.h"
|
||||
#include "contest_link.h"
|
||||
|
||||
static void sub_80FC5C0(u8);
|
||||
static void sub_80FC5DC(u8);
|
||||
static void Task_LinkContest_StartInitFlags(u8);
|
||||
static void Task_LinkContest_InitFlags(u8);
|
||||
|
||||
bool32 sub_80FC4F4(void *src, u16 size)
|
||||
#define tState data[0]
|
||||
#define tDelayTimer data[1]
|
||||
#define tCategories(i) data[(i) + 1]
|
||||
#define tLeaderIds(i) data[(i) + 5]
|
||||
#define tCategory data[9]
|
||||
#define tTimer data[11]
|
||||
#define tStandbyState data[12]
|
||||
|
||||
bool32 LinkContest_SendBlock(void *src, u16 size)
|
||||
{
|
||||
memcpy(gDecompressionBuffer, src, size);
|
||||
if (SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, size))
|
||||
@@ -20,21 +28,21 @@ bool32 sub_80FC4F4(void *src, u16 size)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 sub_80FC530(u8 arg0)
|
||||
bool8 LinkContest_GetBlockReceived(u8 flag)
|
||||
{
|
||||
u8 mask = (1 << arg0);
|
||||
u8 mask = (1 << flag);
|
||||
if (!(GetBlockReceivedStatus() & mask))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
ResetBlockReceivedFlag(arg0);
|
||||
ResetBlockReceivedFlag(flag);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_80FC55C(void)
|
||||
bool8 LinkContest_GetBlockReceivedFromAllPlayers(void)
|
||||
{
|
||||
if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
|
||||
{
|
||||
@@ -47,23 +55,23 @@ bool8 sub_80FC55C(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FC580(u8 taskId)
|
||||
void Task_LinkContest_Init(u8 taskId)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
gBlockRecvBuffer[i][0] = 0xFF;
|
||||
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].func = sub_80FC5C0;
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].func = Task_LinkContest_StartInitFlags;
|
||||
}
|
||||
|
||||
static void sub_80FC5C0(u8 taskId)
|
||||
static void Task_LinkContest_StartInitFlags(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].func = sub_80FC5DC;
|
||||
gTasks[taskId].func = Task_LinkContest_InitFlags;
|
||||
}
|
||||
|
||||
static void sub_80FC5DC(u8 taskId)
|
||||
static void Task_LinkContest_InitFlags(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -76,6 +84,7 @@ static void sub_80FC5DC(u8 taskId)
|
||||
if (gWirelessCommType == 1)
|
||||
gLinkContestFlags = LINK_CONTEST_FLAG_IS_LINK | LINK_CONTEST_FLAG_IS_WIRELESS;
|
||||
|
||||
// Get number of players using Emerald/FRLG
|
||||
for (i = 0; i < gNumLinkContestPlayers && (u32)(gLinkPlayers[i].version & 0xFF) - 1 > VERSION_RUBY - 1; i++)
|
||||
;
|
||||
|
||||
@@ -85,22 +94,23 @@ static void sub_80FC5DC(u8 taskId)
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
}
|
||||
|
||||
bool32 sub_80FC670(s16 *arg0)
|
||||
bool32 LinkContest_TryLinkStandby(s16 *state)
|
||||
{
|
||||
// Skip standby for RS cabled links
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
|
||||
return TRUE;
|
||||
|
||||
switch (*arg0)
|
||||
switch (*state)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
sub_800ADF8();
|
||||
(*arg0)++;
|
||||
SetLinkStandbyCallback();
|
||||
(*state)++;
|
||||
}
|
||||
return FALSE;
|
||||
case 1:
|
||||
(*arg0)++;
|
||||
(*state)++;
|
||||
return FALSE;
|
||||
default:
|
||||
if (IsLinkTaskFinished() != TRUE)
|
||||
@@ -110,438 +120,443 @@ bool32 sub_80FC670(s16 *arg0)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FC6BC(u8 taskId)
|
||||
void Task_LinkContest_CommunicateMonsRS(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
// Send players mon
|
||||
if (GetMultiplayerId() == 0)
|
||||
{
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
|
||||
gTasks[taskId].data[0] = 10;
|
||||
gTasks[taskId].tState = 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
|
||||
gTasks[taskId].data[0] = 1;
|
||||
gTasks[taskId].tState = 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
// Wait for other players data
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
|
||||
sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language);
|
||||
StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[i].language);
|
||||
}
|
||||
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (++gTasks[taskId].data[11] > 300)
|
||||
// Only if leader. Request other players data
|
||||
if (++gTasks[taskId].tTimer > 300)
|
||||
{
|
||||
sub_800A4D8(2);
|
||||
gTasks[taskId].data[0] = 1;
|
||||
SendBlockRequest(2);
|
||||
gTasks[taskId].tState = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[11] = 0;
|
||||
gTasks[taskId].data[12] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].tTimer = 0;
|
||||
gTasks[taskId].tStandbyState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FC804(u8 taskId)
|
||||
void Task_LinkContest_CommunicateRngRS(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (GetMultiplayerId() == 0)
|
||||
{
|
||||
if (IsLinkTaskFinished() && sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == TRUE)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (IsLinkTaskFinished() && LinkContest_SendBlock(&gRngValue, sizeof(gRngValue)) == TRUE)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC530(0))
|
||||
if (LinkContest_GetBlockReceived(0))
|
||||
{
|
||||
memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
|
||||
memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue));
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FC894(u8 taskId)
|
||||
void Task_LinkContest_CommunicateCategoryRS(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
gBlockSendBuffer[0] = gTasks[taskId].data[9];
|
||||
gBlockSendBuffer[0] = gTasks[taskId].tCategory;
|
||||
if (GetMultiplayerId() == 0)
|
||||
{
|
||||
if (IsLinkTaskFinished())
|
||||
gTasks[taskId].data[0] = 10;
|
||||
gTasks[taskId].tState = 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
gTasks[taskId].data[i + 1] = gBlockRecvBuffer[i][0];
|
||||
gTasks[taskId].tCategories(i) = gBlockRecvBuffer[i][0];
|
||||
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (++gTasks[taskId].data[11] > 10)
|
||||
if (++gTasks[taskId].tTimer > 10)
|
||||
{
|
||||
sub_800A4D8(2);
|
||||
gTasks[taskId].data[0] = 1;
|
||||
SendBlockRequest(2);
|
||||
gTasks[taskId].tState = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[11] = 0;
|
||||
gTasks[taskId].data[12] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].tTimer = 0;
|
||||
gTasks[taskId].tStandbyState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FC998(u8 taskId)
|
||||
void Task_LinkContest_CommunicateMonIdxs(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
gTasks[taskId].tState++;
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FC9F8(u8 taskId)
|
||||
void Task_LinkContest_CommunicateMoveSelections(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE)
|
||||
gTasks[taskId].data[0]++;
|
||||
// Send player's move selection
|
||||
if (LinkContest_SendBlock(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
// Receive partners' move selections
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
eContestantStatus[i].currMove = gBlockRecvBuffer[i][0];
|
||||
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FCACC(u8 taskId)
|
||||
void Task_LinkContest_CommunicateFinalStandings(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestMonTotalPoints, sizeof(gContestMonTotalPoints)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestMonTotalPoints, sizeof(gContestMonTotalPoints)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonTotalPoints));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonTotalPoints));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case 5:
|
||||
case 8:
|
||||
case 11:
|
||||
if (gTasks[taskId].data[1]++ > 10)
|
||||
if (gTasks[taskId].tDelayTimer++ > 10)
|
||||
{
|
||||
gTasks[taskId].data[1] = 0;
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tDelayTimer = 0;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gUnknown_02039F10, sizeof(gUnknown_02039F10)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestMonAppealPointTotals, sizeof(gContestMonAppealPointTotals)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gUnknown_02039F10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F10));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestMonAppealPointTotals, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonAppealPointTotals));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestMonRound2Points, sizeof(gContestMonRound2Points)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestMonRound2Points, sizeof(gContestMonRound2Points)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestMonRound2Points, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonRound2Points));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestMonRound2Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound2Points));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestFinalStandings));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestFinalStandings, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestFinalStandings));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FCC88(u8 taskId)
|
||||
void Task_LinkContest_CommunicateAppealsState(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(eContestantStatus, 4 * sizeof(struct ContestantStatus)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(eContestantStatus, CONTESTANT_COUNT * sizeof(struct ContestantStatus)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(eContestantStatus, gBlockRecvBuffer[gUnknown_02039F2B], 4 * sizeof(struct ContestantStatus));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(eContestantStatus, gBlockRecvBuffer[gContestLinkLeaderIndex], CONTESTANT_COUNT * sizeof(struct ContestantStatus));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case 5:
|
||||
case 8:
|
||||
case 11:
|
||||
if (gTasks[taskId].data[1]++ > 10)
|
||||
if (gTasks[taskId].tDelayTimer++ > 10)
|
||||
{
|
||||
gTasks[taskId].data[1] = 0;
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tDelayTimer = 0;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestResources->field_8, sizeof(struct UnknownContestStruct7)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestResources->appealResults, sizeof(struct ContestAppealMoveResults)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestResources->field_8, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct7));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestResources->appealResults, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct ContestAppealMoveResults));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestResources->field_10, sizeof(struct UnknownContestStruct5)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestResources->excitement, sizeof(struct ContestExcitement)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestResources->field_10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct5));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestResources->excitement, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct ContestExcitement));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FCE48(u8 taskId)
|
||||
void Task_LinkContest_CommunicateLeaderIdsRS(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
gBlockSendBuffer[0] = 0x6E;
|
||||
if (GetMultiplayerId() == 0)
|
||||
{
|
||||
if (IsLinkTaskFinished())
|
||||
gTasks[taskId].data[0] = 10;
|
||||
gTasks[taskId].tState = 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
gTasks[taskId].data[i + 5] = gBlockRecvBuffer[i][0];
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
gTasks[taskId].tLeaderIds(i) = gBlockRecvBuffer[i][0];
|
||||
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (++gTasks[taskId].data[11] > 10)
|
||||
if (++gTasks[taskId].tTimer > 10)
|
||||
{
|
||||
sub_800A4D8(2);
|
||||
gTasks[taskId].data[0] = 1;
|
||||
SendBlockRequest(2);
|
||||
gTasks[taskId].tState = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[11] = 0;
|
||||
gTasks[taskId].data[12] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].tTimer = 0;
|
||||
gTasks[taskId].tStandbyState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FCF40(u8 taskId)
|
||||
void Task_LinkContest_CommunicateRound1Points(u8 taskId)
|
||||
{
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestMonConditions, sizeof(gContestMonConditions)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestMonRound1Points, sizeof(gContestMonRound1Points)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestMonConditions, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonConditions));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestMonRound1Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound1Points));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[12] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].tStandbyState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FCFD0(u8 taskId)
|
||||
void Task_LinkContest_CommunicateTurnOrder(u8 taskId)
|
||||
{
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[12] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].tStandbyState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
|
||||
+105
-92
@@ -1,148 +1,158 @@
|
||||
#include "global.h"
|
||||
#include "contest.h"
|
||||
#include "contest_link.h"
|
||||
#include "event_data.h"
|
||||
#include "link.h"
|
||||
#include "random.h"
|
||||
#include "task.h"
|
||||
|
||||
static void sub_81D9F14(u8);
|
||||
static void sub_81D9F30(u8);
|
||||
static void sub_81D9F4C(u8);
|
||||
static void sub_81D9F68(u8);
|
||||
static void sub_81DA10C(u8);
|
||||
static void sub_81DA138(u8);
|
||||
static void sub_81DA160(u8);
|
||||
static void sub_81DA244(u8);
|
||||
static void sub_81DA2E8(u8);
|
||||
static void sub_81DA3B8(u8);
|
||||
static void sub_81DA488(u8);
|
||||
/*
|
||||
The functions in this file handle preliminary communication
|
||||
for Emerald-only link contests. If the link contest has an RS
|
||||
player linked, none of these functions are used.
|
||||
|
||||
void sub_81D9DE4(u8 taskId)
|
||||
The equivalent functions for RS-linked contests are spread
|
||||
between contest_link.c and contest_util.c, and are suffixed RS
|
||||
instead of Em
|
||||
*/
|
||||
|
||||
static void Task_LinkContest_CommunicateMonsEm(u8);
|
||||
static void Task_LinkContest_StartCommunicateRngEm(u8);
|
||||
static void Task_LinkContest_CommunicateRngEm(u8);
|
||||
static void Task_LinkContest_StartCommunicateLeaderIdsEm(u8);
|
||||
static void Task_LinkContest_CommunicateLeaderIdsEm(u8);
|
||||
static void Task_LinkContest_StartCommunicateCategoryEm(u8);
|
||||
static void Task_LinkContest_CommunicateCategoryEm(u8);
|
||||
static void Task_LinkContest_SetUpContestEm(u8);
|
||||
static void Task_LinkContest_CommunicateAIMonsEm(u8);
|
||||
static void Task_LinkContest_CalculateRound1Em(u8);
|
||||
static void Task_LinkContest_CalculateTurnOrderEm(u8);
|
||||
|
||||
#define tCategory data[9]
|
||||
|
||||
void Task_LinkContest_StartCommunicationEm(u8 taskId)
|
||||
{
|
||||
int gameCleared;
|
||||
|
||||
switch (gTasks[taskId].data[9])
|
||||
switch (gTasks[taskId].tCategory)
|
||||
{
|
||||
case 0:
|
||||
case CONTEST_CATEGORY_COOL:
|
||||
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON);
|
||||
break;
|
||||
case 1:
|
||||
case CONTEST_CATEGORY_BEAUTY:
|
||||
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON);
|
||||
break;
|
||||
case 2:
|
||||
case CONTEST_CATEGORY_CUTE:
|
||||
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON);
|
||||
break;
|
||||
case 3:
|
||||
case CONTEST_CATEGORY_SMART:
|
||||
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON);
|
||||
break;
|
||||
case 4:
|
||||
case CONTEST_CATEGORY_TOUGH:
|
||||
default:
|
||||
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON);
|
||||
break;
|
||||
}
|
||||
|
||||
gContestMons[gContestPlayerMonIndex].unk2C[0] = gHighestRibbonRank;
|
||||
gContestMons[gContestPlayerMonIndex].highestRank = gHighestRibbonRank;
|
||||
gameCleared = FlagGet(FLAG_SYS_GAME_CLEAR) > 0;
|
||||
gContestMons[gContestPlayerMonIndex].unk2C[1] = gameCleared;
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_81DA160, sub_81D9F14);
|
||||
gContestMons[gContestPlayerMonIndex].gameCleared = gameCleared;
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsEm, Task_LinkContest_StartCommunicateRngEm);
|
||||
}
|
||||
|
||||
static void sub_81D9F14(u8 taskId)
|
||||
static void Task_LinkContest_StartCommunicateRngEm(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_81DA244, sub_81D9F30);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngEm, Task_LinkContest_StartCommunicateLeaderIdsEm);
|
||||
}
|
||||
|
||||
static void sub_81D9F30(u8 taskId)
|
||||
static void Task_LinkContest_StartCommunicateLeaderIdsEm(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_81DA2E8, sub_81D9F4C);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsEm, Task_LinkContest_StartCommunicateCategoryEm);
|
||||
}
|
||||
|
||||
static void sub_81D9F4C(u8 taskId)
|
||||
static void Task_LinkContest_StartCommunicateCategoryEm(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_81DA3B8, sub_81D9F68);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryEm, Task_LinkContest_SetUpContestEm);
|
||||
}
|
||||
|
||||
static void sub_81D9F68(u8 taskId)
|
||||
static void Task_LinkContest_SetUpContestEm(u8 taskId)
|
||||
{
|
||||
u8 i;
|
||||
u8 rank;
|
||||
int gameCleared;
|
||||
u8 data1[4];
|
||||
u8 data2[4];
|
||||
u8 categories[CONTESTANT_COUNT];
|
||||
u8 leaderIds[CONTESTANT_COUNT];
|
||||
|
||||
memset(data1, 0, sizeof(data1));
|
||||
memset(data2, 0, sizeof(data2));
|
||||
memset(categories, 0, sizeof(categories));
|
||||
memset(leaderIds, 0, sizeof(leaderIds));
|
||||
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
data1[i] = gTasks[taskId].data[i + 1];
|
||||
categories[i] = gTasks[taskId].data[i + 1];
|
||||
|
||||
i = 0;
|
||||
if (i < gNumLinkContestPlayers)
|
||||
{
|
||||
while (++i < gNumLinkContestPlayers)
|
||||
{
|
||||
if (data1[0] != data1[i])
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Ensure all players are doing the same category
|
||||
for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++)
|
||||
;
|
||||
|
||||
if (i == gNumLinkContestPlayers)
|
||||
gSpecialVar_0x8004 = 0;
|
||||
gSpecialVar_0x8004 = FALSE; // Category choices the same
|
||||
else
|
||||
gSpecialVar_0x8004 = 1;
|
||||
gSpecialVar_0x8004 = TRUE; // Category choices differ
|
||||
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
data2[i] = gTasks[taskId].data[i + 5];
|
||||
leaderIds[i] = gTasks[taskId].data[i + 5];
|
||||
|
||||
if (gNumLinkContestPlayers != 4 && GetMultiplayerId() == 0)
|
||||
// If < 4 players and player is leader, set AI contestants based on rank and game clear
|
||||
if (gNumLinkContestPlayers != CONTESTANT_COUNT && GetMultiplayerId() == 0)
|
||||
{
|
||||
rank = gContestMons[0].unk2C[0];
|
||||
rank = gContestMons[0].highestRank;
|
||||
for (i = 1; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
if (rank < gContestMons[i].unk2C[0])
|
||||
rank = gContestMons[i].unk2C[0];
|
||||
if (rank < gContestMons[i].highestRank)
|
||||
rank = gContestMons[i].highestRank;
|
||||
}
|
||||
|
||||
if (rank)
|
||||
rank--;
|
||||
|
||||
gameCleared = 1;
|
||||
gameCleared = TRUE;
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
if (!gContestMons[i].unk2C[1])
|
||||
if (!gContestMons[i].gameCleared)
|
||||
{
|
||||
gameCleared = 0;
|
||||
gameCleared = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
sub_80DACBC(data1[0], rank, gameCleared);
|
||||
SetLinkAIContestants(categories[0], rank, gameCleared);
|
||||
}
|
||||
|
||||
gUnknown_02039F2B = sub_80F86E0(data2);
|
||||
if (gNumLinkContestPlayers < 4)
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_81DA488, sub_81DA10C);
|
||||
// Assign link leader. After initial communication all players will read data only from them
|
||||
gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(leaderIds);
|
||||
|
||||
if (gNumLinkContestPlayers < CONTESTANT_COUNT)
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateAIMonsEm, Task_LinkContest_CalculateRound1Em);
|
||||
else
|
||||
gTasks[taskId].func = sub_81DA10C;
|
||||
gTasks[taskId].func = Task_LinkContest_CalculateRound1Em;
|
||||
}
|
||||
|
||||
static void sub_81DA10C(u8 taskId)
|
||||
static void Task_LinkContest_CalculateRound1Em(u8 taskId)
|
||||
{
|
||||
sub_80DB09C(gSpecialVar_ContestCategory);
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_81DA138);
|
||||
CalculateRound1Points(gSpecialVar_ContestCategory);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderEm);
|
||||
}
|
||||
|
||||
static void sub_81DA138(u8 taskId)
|
||||
static void Task_LinkContest_CalculateTurnOrderEm(u8 taskId)
|
||||
{
|
||||
SortContestants(FALSE);
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection);
|
||||
}
|
||||
|
||||
static void sub_81DA160(u8 taskId)
|
||||
static void Task_LinkContest_CommunicateMonsEm(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
@@ -155,17 +165,17 @@ static void sub_81DA160(u8 taskId)
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1)
|
||||
if (LinkContest_SendBlock(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
|
||||
sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language);
|
||||
StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[i].language);
|
||||
}
|
||||
|
||||
gTasks[taskId].data[0]++;
|
||||
@@ -174,9 +184,9 @@ static void sub_81DA160(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81DA244(u8 taskId)
|
||||
static void Task_LinkContest_CommunicateRngEm(u8 taskId)
|
||||
{
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
@@ -189,19 +199,22 @@ static void sub_81DA244(u8 taskId)
|
||||
case 0:
|
||||
if (GetMultiplayerId() == 0)
|
||||
{
|
||||
// Only the leader sends the RNG seed
|
||||
if (!IsLinkTaskFinished())
|
||||
return;
|
||||
|
||||
if (sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == 1)
|
||||
if (LinkContest_SendBlock(&gRngValue, sizeof(gRngValue)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Other link members skip to waiting
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC530(0))
|
||||
// Wait to receive RNG data
|
||||
if (LinkContest_GetBlockReceived(0))
|
||||
{
|
||||
memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
|
||||
memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue));
|
||||
@@ -211,13 +224,13 @@ static void sub_81DA244(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81DA2E8(u8 taskId)
|
||||
static void Task_LinkContest_CommunicateLeaderIdsEm(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
u16 data[4];
|
||||
u16 var0;
|
||||
u16 data[CONTESTANT_COUNT];
|
||||
u16 leaderId;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
@@ -230,13 +243,13 @@ static void sub_81DA2E8(u8 taskId)
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
var0 = 0x6E;
|
||||
if (sub_80FC4F4(&var0, sizeof(var0)) == 1)
|
||||
leaderId = 0x6E;
|
||||
if (LinkContest_SendBlock(&leaderId, sizeof(leaderId)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
@@ -250,13 +263,13 @@ static void sub_81DA2E8(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81DA3B8(u8 taskId)
|
||||
static void Task_LinkContest_CommunicateCategoryEm(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
u16 data[4];
|
||||
u16 var0;
|
||||
u16 data[CONTESTANT_COUNT];
|
||||
u16 category;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
@@ -269,13 +282,13 @@ static void sub_81DA3B8(u8 taskId)
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
var0 = gTasks[taskId].data[9];
|
||||
if (sub_80FC4F4(&var0, sizeof(var0)) == 1)
|
||||
category = gTasks[taskId].tCategory;
|
||||
if (LinkContest_SendBlock(&category, sizeof(category)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
@@ -289,11 +302,11 @@ static void sub_81DA3B8(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81DA488(u8 taskId)
|
||||
static void Task_LinkContest_CommunicateAIMonsEm(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
@@ -309,7 +322,7 @@ static void sub_81DA488(u8 taskId)
|
||||
if (!IsLinkTaskFinished())
|
||||
return;
|
||||
|
||||
if (sub_80FC4F4(&gContestMons[gNumLinkContestPlayers], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1)
|
||||
if (LinkContest_SendBlock(&gContestMons[gNumLinkContestPlayers], (CONTESTANT_COUNT - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
else
|
||||
@@ -318,11 +331,11 @@ static void sub_81DA488(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC530(0))
|
||||
if (LinkContest_GetBlockReceived(0))
|
||||
{
|
||||
memcpy(&gContestMons[gNumLinkContestPlayers], gBlockRecvBuffer[0], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon));
|
||||
for (i = gNumLinkContestPlayers; i < 4; i++)
|
||||
sub_80DFA08(&gContestMons[i], gLinkPlayers[0].language);
|
||||
memcpy(&gContestMons[gNumLinkContestPlayers], gBlockRecvBuffer[0], (CONTESTANT_COUNT - gNumLinkContestPlayers) * sizeof(struct ContestPokemon));
|
||||
for (i = gNumLinkContestPlayers; i < CONTESTANT_COUNT; i++)
|
||||
StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[0].language);
|
||||
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
|
||||
+555
-69
@@ -6,10 +6,12 @@
|
||||
#include "contest.h"
|
||||
#include "contest_util.h"
|
||||
#include "contest_link.h"
|
||||
#include "contest_painting.h"
|
||||
#include "data.h"
|
||||
#include "decompress.h"
|
||||
#include "dma3.h"
|
||||
#include "event_data.h"
|
||||
#include "event_object_movement.h"
|
||||
#include "field_specials.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "graphics.h"
|
||||
@@ -27,6 +29,7 @@
|
||||
#include "save.h"
|
||||
#include "scanline_effect.h"
|
||||
#include "script.h"
|
||||
#include "script_menu.h"
|
||||
#include "sound.h"
|
||||
#include "string_util.h"
|
||||
#include "strings.h"
|
||||
@@ -36,6 +39,7 @@
|
||||
#include "tv.h"
|
||||
#include "util.h"
|
||||
#include "window.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/field_specials.h"
|
||||
#include "constants/game_stat.h"
|
||||
#include "constants/rgb.h"
|
||||
@@ -117,8 +121,8 @@ static void CB2_ShowContestResults(void);
|
||||
static void VBlankCB_ShowContestResults(void);
|
||||
static void Task_SlideContestResultsBg(u8);
|
||||
static void Task_WaitForLinkPartnersBeforeResults(u8);
|
||||
static void sub_80F5F14(u8);
|
||||
static void sub_80F5F30(u8);
|
||||
static void Task_CommunicateMonIdxsForResults(u8);
|
||||
static void Task_WaitForLinkPartnerMonIdxs(u8);
|
||||
static void Task_AnnouncePreliminaryResults(u8);
|
||||
static void Task_FlashStarsAndHearts(u8);
|
||||
static void Task_ShowPreliminaryResults(u8);
|
||||
@@ -150,15 +154,22 @@ static void Task_CreateConfetti(u8);
|
||||
static void SpriteCB_TextBoxSlideIn(struct Sprite *);
|
||||
static void SpriteCB_TextBoxSlideOut(struct Sprite *);
|
||||
static void SpriteCB_EndTextBoxSlideIn(struct Sprite *);
|
||||
static void sub_80F8508(u8);
|
||||
static void sub_80F8568(u8);
|
||||
static void sub_80F8584(u8);
|
||||
static void sub_80F85A0(u8);
|
||||
static void sub_80F85BC(u8);
|
||||
static void sub_80F86B8(u8);
|
||||
static void sub_80F878C(u8);
|
||||
static void sub_80F87B4(u8);
|
||||
static void Task_StartCommunication(u8);
|
||||
static void Task_StartCommunicateRngRS(u8);
|
||||
static void Task_StartCommunicateLeaderIdsRS(u8);
|
||||
static void Task_StartCommunicateCategoryRS(u8);
|
||||
static void Task_LinkContest_SetUpContestRS(u8);
|
||||
static void Task_LinkContest_CalculateTurnOrderRS(u8);
|
||||
static void Task_LinkContest_Disconnect(u8);
|
||||
static void Task_LinkContest_WaitDisconnect(u8);
|
||||
static void SpriteCB_Confetti(struct Sprite *sprite);
|
||||
static void Task_ShowContestEntryMonPic(u8 taskId);
|
||||
static void Task_LinkContestWaitForConnection(u8 taskId);
|
||||
|
||||
extern const u16 gObjectEventPalette8[];
|
||||
extern const u16 gObjectEventPalette17[];
|
||||
extern const u16 gObjectEventPalette33[];
|
||||
extern const u16 gObjectEventPalette34[];
|
||||
|
||||
static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal");
|
||||
static const u8 sUnknown_0858D6D0[] = INCBIN_U8("graphics/unknown/unknown_58D6D0.4bpp");
|
||||
@@ -601,7 +612,7 @@ static void Task_ShowContestResults(u8 taskId)
|
||||
case 2:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
return;
|
||||
@@ -645,17 +656,17 @@ static void Task_WaitForLinkPartnersBeforeResults(u8 taskId)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
CreateTask(sub_80F5F14, 0);
|
||||
CreateTask(Task_CommunicateMonIdxsForResults, 0);
|
||||
gTasks[taskId].func = TaskDummy;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80F5F14(u8 taskId)
|
||||
static void Task_CommunicateMonIdxsForResults(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FC998, sub_80F5F30);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, Task_WaitForLinkPartnerMonIdxs);
|
||||
}
|
||||
|
||||
static void sub_80F5F30(u8 taskId)
|
||||
static void Task_WaitForLinkPartnerMonIdxs(u8 taskId)
|
||||
{
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
@@ -974,7 +985,7 @@ static void Task_TryDisconnectLinkPartners(u8 taskId)
|
||||
if (!gTasks[taskId].data[10])
|
||||
{
|
||||
ShowLinkResultsTextBox(gText_CommunicationStandby);
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gTasks[taskId].func = Task_WaitForLinkPartnersDisconnect;
|
||||
}
|
||||
}
|
||||
@@ -1717,7 +1728,7 @@ static void LoadContestResultsTilemaps(void)
|
||||
// Represented on results board as stars
|
||||
static u8 GetNumPreliminaryPoints(u8 monIndex, bool8 capPoints)
|
||||
{
|
||||
u32 condition = gContestMonConditions[monIndex] << 16;
|
||||
u32 condition = gContestMonRound1Points[monIndex] << 16;
|
||||
u32 numStars = condition / 0x3F;
|
||||
|
||||
if (numStars & 0xFFFF)
|
||||
@@ -1965,7 +1976,7 @@ static void CalculateContestantsResultData(void)
|
||||
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
relativePoints = (gContestMonConditions[i] * 1000) / abs(highestPoints);
|
||||
relativePoints = (gContestMonRound1Points[i] * 1000) / abs(highestPoints);
|
||||
if (relativePoints % 10 > 4)
|
||||
relativePoints += 10;
|
||||
(*sContestResults->monResults)[i].relativePreliminaryPoints = relativePoints / 10;
|
||||
@@ -2205,8 +2216,8 @@ void TryEnterContestMon(void)
|
||||
// Nonzero eligibility can still be non-eligibile, if mon is fainted or egg
|
||||
if (eligibility)
|
||||
{
|
||||
sub_80DAB8C(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
|
||||
sub_80DB09C(gSpecialVar_ContestCategory);
|
||||
SetContestants(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
|
||||
CalculateRound1Points(gSpecialVar_ContestCategory);
|
||||
}
|
||||
|
||||
gSpecialVar_Result = eligibility;
|
||||
@@ -2323,7 +2334,7 @@ void GetContestMonConditionRanking(void)
|
||||
|
||||
for (i = 0, rank = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (gContestMonConditions[gSpecialVar_0x8006] < gContestMonConditions[i])
|
||||
if (gContestMonRound1Points[gSpecialVar_0x8006] < gContestMonRound1Points[i])
|
||||
rank++;
|
||||
}
|
||||
|
||||
@@ -2332,7 +2343,7 @@ void GetContestMonConditionRanking(void)
|
||||
|
||||
void GetContestMonCondition(void)
|
||||
{
|
||||
gSpecialVar_0x8004 = gContestMonConditions[gSpecialVar_0x8006];
|
||||
gSpecialVar_0x8004 = gContestMonRound1Points[gSpecialVar_0x8006];
|
||||
}
|
||||
|
||||
void GetContestWinnerId(void)
|
||||
@@ -2404,107 +2415,106 @@ void GetContestPlayerId(void)
|
||||
gSpecialVar_0x8004 = gContestPlayerMonIndex;
|
||||
}
|
||||
|
||||
void ContestLinkTransfer(u8 taskId)
|
||||
void ContestLinkTransfer(u8 category)
|
||||
{
|
||||
u8 newTaskId;
|
||||
ScriptContext2_Enable();
|
||||
newTaskId = CreateTask(sub_80FC580, 0);
|
||||
SetTaskFuncWithFollowupFunc(newTaskId, sub_80FC580, sub_80F8508);
|
||||
gTasks[newTaskId].data[9] = taskId;
|
||||
newTaskId = CreateTask(Task_LinkContest_Init, 0);
|
||||
SetTaskFuncWithFollowupFunc(newTaskId, Task_LinkContest_Init, Task_StartCommunication);
|
||||
gTasks[newTaskId].data[9] = category;
|
||||
}
|
||||
|
||||
static void sub_80F8508(u8 taskId)
|
||||
static void Task_StartCommunication(u8 taskId)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
|
||||
{
|
||||
sub_80DA8C8(gContestMonPartyIndex);
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FC6BC, sub_80F8568);
|
||||
CreateContestMonFromParty(gContestMonPartyIndex);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsRS, Task_StartCommunicateRngRS);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_80DA8C8(gContestMonPartyIndex);
|
||||
gTasks[taskId].func = sub_81D9DE4;
|
||||
CreateContestMonFromParty(gContestMonPartyIndex);
|
||||
gTasks[taskId].func = Task_LinkContest_StartCommunicationEm;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80F8568(u8 taskId)
|
||||
static void Task_StartCommunicateRngRS(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FC804, sub_80F8584);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngRS, Task_StartCommunicateLeaderIdsRS);
|
||||
}
|
||||
|
||||
static void sub_80F8584(u8 taskId)
|
||||
static void Task_StartCommunicateLeaderIdsRS(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FCE48, sub_80F85A0);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsRS, Task_StartCommunicateCategoryRS);
|
||||
}
|
||||
|
||||
static void sub_80F85A0(u8 taskId)
|
||||
static void Task_StartCommunicateCategoryRS(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FC894, sub_80F85BC);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryRS, Task_LinkContest_SetUpContestRS);
|
||||
}
|
||||
|
||||
static void sub_80F85BC(u8 taskId)
|
||||
static void Task_LinkContest_SetUpContestRS(u8 taskId)
|
||||
{
|
||||
u8 i;
|
||||
u8 sp0[4];
|
||||
u8 sp4[4];
|
||||
u8 categories[CONTESTANT_COUNT];
|
||||
u8 leaderIds[CONTESTANT_COUNT];
|
||||
|
||||
memset(sp0, 0, sizeof(sp0));
|
||||
memset(sp4, 0, sizeof(sp4));
|
||||
memset(categories, 0, sizeof(categories));
|
||||
memset(leaderIds, 0, sizeof(leaderIds));
|
||||
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
sp0[i] = gTasks[taskId].data[i + 1];
|
||||
categories[i] = gTasks[taskId].data[i + 1];
|
||||
|
||||
for (i = 0; i < gNumLinkContestPlayers;)
|
||||
{
|
||||
i++;
|
||||
if (i >= gNumLinkContestPlayers || sp0[0] != sp0[i])
|
||||
break;
|
||||
}
|
||||
// Ensure all players are doing the same category
|
||||
for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++)
|
||||
;
|
||||
|
||||
if (i == gNumLinkContestPlayers)
|
||||
gSpecialVar_0x8004 = 0;
|
||||
gSpecialVar_0x8004 = FALSE; // Category choices the same
|
||||
else
|
||||
gSpecialVar_0x8004 = 1;
|
||||
gSpecialVar_0x8004 = TRUE; // Category choices differ
|
||||
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
sp4[i] = gTasks[taskId].data[i + 5];
|
||||
leaderIds[i] = gTasks[taskId].data[i + 5];
|
||||
|
||||
gUnknown_02039F2B = sub_80F86E0(sp4);
|
||||
sub_80DB09C(gSpecialVar_ContestCategory);
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_80F86B8);
|
||||
gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(leaderIds);
|
||||
CalculateRound1Points(gSpecialVar_ContestCategory);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderRS);
|
||||
}
|
||||
|
||||
static void sub_80F86B8(u8 taskId)
|
||||
static void Task_LinkContest_CalculateTurnOrderRS(u8 taskId)
|
||||
{
|
||||
SortContestants(FALSE);
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection);
|
||||
}
|
||||
|
||||
u8 sub_80F86E0(u8 *arg0)
|
||||
u8 LinkContest_GetLeaderIndex(u8 *ids)
|
||||
{
|
||||
int i;
|
||||
u8 result = 0;
|
||||
u8 leaderIdx = 0;
|
||||
|
||||
for (i = 1; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
if (arg0[result] < arg0[i])
|
||||
result = i;
|
||||
if (ids[leaderIdx] < ids[i])
|
||||
leaderIdx = i;
|
||||
}
|
||||
|
||||
return result;
|
||||
return leaderIdx;
|
||||
}
|
||||
|
||||
void sub_80F8714(u8 taskId)
|
||||
void Task_LinkContest_FinalizeConnection(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (gSpecialVar_0x8004 == 1)
|
||||
if (gSpecialVar_0x8004 == TRUE)
|
||||
{
|
||||
// Link partner data doesn't agree, disconnect
|
||||
if (IsLinkTaskFinished())
|
||||
gTasks[taskId].func = sub_80F878C;
|
||||
gTasks[taskId].func = Task_LinkContest_Disconnect;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Succesfully connected
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
StringGetEnd10(gContestMons[i].nickname);
|
||||
|
||||
@@ -2515,13 +2525,13 @@ void sub_80F8714(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80F878C(u8 taskId)
|
||||
static void Task_LinkContest_Disconnect(u8 taskId)
|
||||
{
|
||||
sub_800AC34();
|
||||
gTasks[taskId].func = sub_80F87B4;
|
||||
SetCloseLinkCallback();
|
||||
gTasks[taskId].func = Task_LinkContest_WaitDisconnect;
|
||||
}
|
||||
|
||||
static void sub_80F87B4(u8 taskId)
|
||||
static void Task_LinkContest_WaitDisconnect(u8 taskId)
|
||||
{
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
@@ -2530,3 +2540,479 @@ static void sub_80F87B4(u8 taskId)
|
||||
EnableBothScriptContexts();
|
||||
}
|
||||
}
|
||||
|
||||
void SetContestTrainerGfxIds(void)
|
||||
{
|
||||
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId;
|
||||
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_1 - VARS_START] = gContestMons[1].trainerGfxId;
|
||||
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId;
|
||||
}
|
||||
|
||||
// Unused
|
||||
void sub_80F8814(void)
|
||||
{
|
||||
u16 var1;
|
||||
u8 var0 = gSpecialVar_0x8005;
|
||||
switch (var0)
|
||||
{
|
||||
case 0:
|
||||
var1 = 3;
|
||||
break;
|
||||
case 1:
|
||||
var1 = 4;
|
||||
break;
|
||||
case 2:
|
||||
var1 = 5;
|
||||
break;
|
||||
default:
|
||||
var1 = 100;
|
||||
break;
|
||||
}
|
||||
|
||||
gSpecialVar_0x8004 = var1;
|
||||
}
|
||||
|
||||
void BufferContestTrainerAndMonNames(void)
|
||||
{
|
||||
BufferContestantTrainerName();
|
||||
BufferContestantMonNickname();
|
||||
BufferContestantMonSpecies();
|
||||
}
|
||||
|
||||
// Unused
|
||||
void DoesContestCategoryHaveWinner(void)
|
||||
{
|
||||
int contestWinner;
|
||||
switch (gSpecialVar_ContestCategory)
|
||||
{
|
||||
case CONTEST_CATEGORY_COOL:
|
||||
contestWinner = 8;
|
||||
break;
|
||||
case CONTEST_CATEGORY_BEAUTY:
|
||||
contestWinner = 9;
|
||||
break;
|
||||
case CONTEST_CATEGORY_CUTE:
|
||||
contestWinner = 10;
|
||||
break;
|
||||
case CONTEST_CATEGORY_SMART:
|
||||
contestWinner = 11;
|
||||
break;
|
||||
case CONTEST_CATEGORY_TOUGH:
|
||||
default:
|
||||
contestWinner = 12;
|
||||
break;
|
||||
}
|
||||
|
||||
if (gSaveBlock1Ptr->contestWinners[contestWinner].species == SPECIES_NONE)
|
||||
gSpecialVar_0x8004 = FALSE;
|
||||
else
|
||||
gSpecialVar_0x8004 = TRUE;
|
||||
}
|
||||
|
||||
void SaveMuseumContestPainting(void)
|
||||
{
|
||||
sub_80DEDA8(0xFF);
|
||||
}
|
||||
|
||||
void ShouldReadyContestArtist(void)
|
||||
{
|
||||
if (gContestFinalStandings[gContestPlayerMonIndex] == 0
|
||||
&& gSpecialVar_ContestRank == CONTEST_RANK_MASTER
|
||||
&& gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
|
||||
{
|
||||
gSpecialVar_0x8004 = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
gSpecialVar_0x8004 = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
u8 CountPlayerContestPaintings(void)
|
||||
{
|
||||
int i;
|
||||
u8 count = 0;
|
||||
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
if (gSaveBlock1Ptr->contestWinners[8 + i].species)
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
// Unused
|
||||
void sub_80F8970(void)
|
||||
{
|
||||
s16 conditions[CONTESTANT_COUNT];
|
||||
int i, j;
|
||||
s16 condition;
|
||||
s8 var0;
|
||||
u8 var2;
|
||||
u8 r8;
|
||||
u8 r7;
|
||||
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
conditions[i] = gContestMonRound1Points[i];
|
||||
|
||||
for (i = 0; i < CONTESTANT_COUNT - 1; i++)
|
||||
{
|
||||
for (j = CONTESTANT_COUNT - 1; j > i; j--)
|
||||
{
|
||||
if (conditions[j - 1] < conditions[j])
|
||||
{
|
||||
int temp;
|
||||
SWAP(conditions[j], conditions[j - 1], temp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
condition = conditions[gSpecialVar_0x8006];
|
||||
var0 = 0;
|
||||
r8 = 0;
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (conditions[i] == condition)
|
||||
{
|
||||
var0++;
|
||||
if (i == gSpecialVar_0x8006)
|
||||
r8 = var0;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (conditions[i] == condition)
|
||||
break;
|
||||
}
|
||||
|
||||
r7 = i;
|
||||
var2 = r8;
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (condition == gContestMonRound1Points[i])
|
||||
{
|
||||
if (var2 == 1)
|
||||
break;
|
||||
var2--;
|
||||
}
|
||||
}
|
||||
|
||||
StringCopy(gStringVar1, gContestMons[i].nickname);
|
||||
StringCopy(gStringVar2, gContestMons[i].trainerName);
|
||||
sub_81DB5AC(gStringVar2);
|
||||
|
||||
if (var0 == 1)
|
||||
gSpecialVar_0x8006 = r7;
|
||||
else if (r8 == var0)
|
||||
gSpecialVar_0x8006 = r7;
|
||||
else
|
||||
gSpecialVar_0x8006 = r7 + 4;
|
||||
}
|
||||
|
||||
static void ExitContestWinnerPainting(void)
|
||||
{
|
||||
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
void ShowContestWinnerPainting(void)
|
||||
{
|
||||
SetMainCallback2(CB2_ContestPainting);
|
||||
gMain.savedCallback = ExitContestWinnerPainting;
|
||||
}
|
||||
|
||||
void SetLinkContestPlayerGfx(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
int version = (u8)gLinkPlayers[i].version;
|
||||
if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
|
||||
{
|
||||
if (gLinkPlayers[i].gender == MALE)
|
||||
gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_BRENDAN;
|
||||
else
|
||||
gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_MAY;
|
||||
}
|
||||
}
|
||||
|
||||
VarSet(VAR_OBJ_GFX_ID_0, gContestMons[0].trainerGfxId);
|
||||
VarSet(VAR_OBJ_GFX_ID_1, gContestMons[1].trainerGfxId);
|
||||
VarSet(VAR_OBJ_GFX_ID_2, gContestMons[2].trainerGfxId);
|
||||
VarSet(VAR_OBJ_GFX_ID_3, gContestMons[3].trainerGfxId);
|
||||
}
|
||||
}
|
||||
|
||||
void LoadLinkContestPlayerPalettes(void)
|
||||
{
|
||||
int i;
|
||||
u8 objectEventId;
|
||||
int version;
|
||||
struct Sprite *sprite;
|
||||
static const u8 sContestantLocalIds[CONTESTANT_COUNT] = { 3, 4, 5, 14 };
|
||||
|
||||
gReservedSpritePaletteCount = 12;
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
objectEventId = GetObjectEventIdByLocalIdAndMap(sContestantLocalIds[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
|
||||
sprite = &gSprites[gObjectEvents[objectEventId].spriteId];
|
||||
sprite->oam.paletteNum = 6 + i;
|
||||
version = (u8)gLinkPlayers[i].version;
|
||||
if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
|
||||
{
|
||||
if (gLinkPlayers[i].gender == MALE)
|
||||
LoadPalette(gObjectEventPalette33, 0x160 + i * 0x10, 0x20);
|
||||
else
|
||||
LoadPalette(gObjectEventPalette34, 0x160 + i * 0x10, 0x20);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkPlayers[i].gender == MALE)
|
||||
LoadPalette(gObjectEventPalette8, 0x160 + i * 0x10, 0x20);
|
||||
else
|
||||
LoadPalette(gObjectEventPalette17, 0x160 + i * 0x10, 0x20);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 GiveMonArtistRibbon(void)
|
||||
{
|
||||
u8 hasArtistRibbon;
|
||||
|
||||
hasArtistRibbon = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
|
||||
if (!hasArtistRibbon
|
||||
&& gContestFinalStandings[gContestPlayerMonIndex] == 0
|
||||
&& gSpecialVar_ContestRank == CONTEST_RANK_MASTER
|
||||
&& gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
|
||||
{
|
||||
hasArtistRibbon = 1;
|
||||
SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon);
|
||||
if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
|
||||
TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 IsContestDebugActive(void)
|
||||
{
|
||||
return FALSE; // gUnknown_0203856C in pokeruby
|
||||
}
|
||||
|
||||
void ShowContestEntryMonPic(void)
|
||||
{
|
||||
const struct CompressedSpritePalette *palette;
|
||||
u32 personality, otId;
|
||||
u16 species;
|
||||
u8 spriteId;
|
||||
u8 taskId;
|
||||
u8 left, top;
|
||||
|
||||
if (FindTaskIdByFunc(Task_ShowContestEntryMonPic) == 0xFF)
|
||||
{
|
||||
AllocateMonSpritesGfx();
|
||||
left = 10;
|
||||
top = 3;
|
||||
species = gContestMons[gSpecialVar_0x8006].species;
|
||||
personality = gContestMons[gSpecialVar_0x8006].personality;
|
||||
otId = gContestMons[gSpecialVar_0x8006].otId;
|
||||
taskId = CreateTask(Task_ShowContestEntryMonPic, 0x50);
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[1] = species;
|
||||
if (gSpecialVar_0x8006 == gContestPlayerMonIndex)
|
||||
HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
|
||||
else
|
||||
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
|
||||
|
||||
palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
|
||||
LoadCompressedSpritePalette(palette);
|
||||
SetMultiuseSpriteTemplateToPokemon(species, 1);
|
||||
gMultiuseSpriteTemplate.paletteTag = palette->tag;
|
||||
spriteId = CreateSprite(&gMultiuseSpriteTemplate, (left + 1) * 8 + 32, (top * 8) + 40, 0);
|
||||
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER))
|
||||
DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
|
||||
}
|
||||
|
||||
gTasks[taskId].data[2] = spriteId;
|
||||
gTasks[taskId].data[3] = left;
|
||||
gTasks[taskId].data[4] = top;
|
||||
gSprites[spriteId].callback = SpriteCallbackDummy;
|
||||
gSprites[spriteId].oam.priority = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void HideContestEntryMonPic(void)
|
||||
{
|
||||
u8 taskId = FindTaskIdByFunc(Task_ShowContestEntryMonPic);
|
||||
if (taskId != 0xFF)
|
||||
{
|
||||
gTasks[taskId].data[0]++;
|
||||
FreeMonSpritesGfx();
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_ShowContestEntryMonPic(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
struct Sprite *sprite;
|
||||
|
||||
switch(task->data[0])
|
||||
{
|
||||
case 0:
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
task->data[5] = CreateWindowFromRect(10, 3, 8, 8);
|
||||
SetStandardWindowBorderStyle(task->data[5], 1);
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
case 3:
|
||||
sprite = &gSprites[task->data[2]];
|
||||
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
|
||||
|
||||
if(sprite->oam.affineMode)
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
|
||||
DestroySprite(sprite);
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 4:
|
||||
ClearToTransparentAndRemoveWindow(gTasks[taskId].data[5]);
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void GetContestMultiplayerId(void)
|
||||
{
|
||||
if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
&& gNumLinkContestPlayers == CONTESTANT_COUNT
|
||||
&& !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
|
||||
gSpecialVar_Result = GetMultiplayerId();
|
||||
else
|
||||
gSpecialVar_Result = MAX_LINK_PLAYERS;
|
||||
}
|
||||
|
||||
void GenerateContestRand(void)
|
||||
{
|
||||
u16 random;
|
||||
u16 *result;
|
||||
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
|
||||
random = gContestRngValue >> 16;
|
||||
result = &gSpecialVar_Result;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = &gSpecialVar_Result;
|
||||
random = Random();
|
||||
}
|
||||
*result = random % *result;
|
||||
}
|
||||
|
||||
u16 GetContestRand(void)
|
||||
{
|
||||
gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
|
||||
return gContestRngValue >> 16;
|
||||
}
|
||||
|
||||
bool8 LinkContestWaitForConnection(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
{
|
||||
CreateTask(Task_LinkContestWaitForConnection, 5);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_LinkContestWaitForConnection(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
SetLinkStandbyCallback();
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
default:
|
||||
if (IsLinkTaskFinished() == 1)
|
||||
{
|
||||
EnableBothScriptContexts();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void LinkContestTryShowWirelessIndicator(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
LoadWirelessStatusIndicatorSpriteGfx();
|
||||
CreateWirelessStatusIndicatorSprite(8, 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LinkContestTryHideWirelessIndicator(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers)
|
||||
DestroyWirelessStatusIndicatorSprite();
|
||||
}
|
||||
}
|
||||
|
||||
bool8 IsContestWithRSPlayer(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void ClearLinkContestFlags(void)
|
||||
{
|
||||
gLinkContestFlags = 0;
|
||||
}
|
||||
|
||||
bool8 IsWirelessContest(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -203,7 +203,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 3,
|
||||
.tough = 4,
|
||||
.sheen = 50,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -232,7 +231,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 1,
|
||||
.tough = 2,
|
||||
.sheen = 60,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -261,7 +259,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 12,
|
||||
.tough = 4,
|
||||
.sheen = 70,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -290,7 +287,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 2,
|
||||
.tough = 7,
|
||||
.sheen = 80,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -319,7 +315,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 5,
|
||||
.tough = 4,
|
||||
.sheen = 90,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -348,7 +343,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 7,
|
||||
.tough = 8,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -377,7 +371,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 2,
|
||||
.tough = 2,
|
||||
.sheen = 50,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -406,7 +399,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 10,
|
||||
.tough = 10,
|
||||
.sheen = 60,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -435,7 +427,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 5,
|
||||
.tough = 18,
|
||||
.sheen = 70,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -464,7 +455,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 2,
|
||||
.tough = 7,
|
||||
.sheen = 80,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -493,7 +483,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 8,
|
||||
.tough = 1,
|
||||
.sheen = 90,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -522,7 +511,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 10,
|
||||
.tough = 2,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -551,7 +539,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 2,
|
||||
.tough = 10,
|
||||
.sheen = 50,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -580,7 +567,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 10,
|
||||
.tough = 5,
|
||||
.sheen = 60,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -609,7 +595,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 1,
|
||||
.tough = 1,
|
||||
.sheen = 70,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -638,7 +623,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 10,
|
||||
.tough = 4,
|
||||
.sheen = 50,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -667,7 +651,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 10,
|
||||
.tough = 4,
|
||||
.sheen = 60,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -696,7 +679,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 2,
|
||||
.tough = 3,
|
||||
.sheen = 70,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -725,7 +707,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 5,
|
||||
.tough = 10,
|
||||
.sheen = 80,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -754,7 +735,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 3,
|
||||
.tough = 10,
|
||||
.sheen = 90,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -783,7 +763,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 1,
|
||||
.tough = 5,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -812,7 +791,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 6,
|
||||
.tough = 2,
|
||||
.sheen = 90,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -841,7 +819,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 5,
|
||||
.tough = 3,
|
||||
.sheen = 80,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -870,7 +847,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 8,
|
||||
.tough = 10,
|
||||
.sheen = 70,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -899,7 +875,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 10,
|
||||
.tough = 20,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -928,7 +903,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 85,
|
||||
.tough = 35,
|
||||
.sheen = 110,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -957,7 +931,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 10,
|
||||
.tough = 25,
|
||||
.sheen = 120,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -986,7 +959,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 65,
|
||||
.tough = 25,
|
||||
.sheen = 130,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1015,7 +987,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 10,
|
||||
.tough = 100,
|
||||
.sheen = 140,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1044,7 +1015,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 35,
|
||||
.tough = 35,
|
||||
.sheen = 150,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1073,7 +1043,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 40,
|
||||
.tough = 40,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1102,7 +1071,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 10,
|
||||
.tough = 25,
|
||||
.sheen = 110,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1131,7 +1099,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 30,
|
||||
.tough = 25,
|
||||
.sheen = 120,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1160,7 +1127,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 40,
|
||||
.tough = 30,
|
||||
.sheen = 130,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1189,7 +1155,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 75,
|
||||
.tough = 35,
|
||||
.sheen = 140,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1218,7 +1183,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 30,
|
||||
.tough = 25,
|
||||
.sheen = 150,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1247,7 +1211,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 25,
|
||||
.tough = 15,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1276,7 +1239,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 60,
|
||||
.tough = 20,
|
||||
.sheen = 110,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1305,7 +1267,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 15,
|
||||
.tough = 75,
|
||||
.sheen = 120,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1334,7 +1295,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 30,
|
||||
.tough = 20,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1363,7 +1323,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 20,
|
||||
.tough = 20,
|
||||
.sheen = 110,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1392,7 +1351,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 20,
|
||||
.tough = 20,
|
||||
.sheen = 120,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1421,7 +1379,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 30,
|
||||
.tough = 45,
|
||||
.sheen = 130,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1450,7 +1407,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 20,
|
||||
.tough = 45,
|
||||
.sheen = 140,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1479,7 +1435,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 20,
|
||||
.tough = 20,
|
||||
.sheen = 150,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1508,7 +1463,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 25,
|
||||
.tough = 25,
|
||||
.sheen = 140,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1537,7 +1491,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 20,
|
||||
.tough = 20,
|
||||
.sheen = 130,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1566,7 +1519,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 45,
|
||||
.tough = 20,
|
||||
.sheen = 120,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1595,7 +1547,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 100,
|
||||
.tough = 90,
|
||||
.sheen = 200,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1624,7 +1575,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 35,
|
||||
.tough = 70,
|
||||
.sheen = 210,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1653,7 +1603,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 70,
|
||||
.tough = 70,
|
||||
.sheen = 220,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1682,7 +1631,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 75,
|
||||
.tough = 40,
|
||||
.sheen = 230,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1711,7 +1659,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 70,
|
||||
.tough = 70,
|
||||
.sheen = 240,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1740,7 +1687,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 80,
|
||||
.tough = 100,
|
||||
.sheen = 250,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1769,7 +1715,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 70,
|
||||
.tough = 90,
|
||||
.sheen = 200,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1798,7 +1743,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 50,
|
||||
.tough = 65,
|
||||
.sheen = 210,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1827,7 +1771,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 60,
|
||||
.tough = 50,
|
||||
.sheen = 220,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1856,7 +1799,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 45,
|
||||
.tough = 70,
|
||||
.sheen = 230,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1885,7 +1827,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 40,
|
||||
.tough = 100,
|
||||
.sheen = 240,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1914,7 +1855,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 50,
|
||||
.tough = 30,
|
||||
.sheen = 250,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1943,7 +1883,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 50,
|
||||
.tough = 160,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -1972,7 +1911,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 70,
|
||||
.tough = 50,
|
||||
.sheen = 210,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2001,7 +1939,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 35,
|
||||
.tough = 35,
|
||||
.sheen = 220,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2030,7 +1967,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 100,
|
||||
.tough = 80,
|
||||
.sheen = 200,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2059,7 +1995,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 35,
|
||||
.tough = 100,
|
||||
.sheen = 210,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2088,7 +2023,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 50,
|
||||
.tough = 100,
|
||||
.sheen = 220,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2117,7 +2051,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 40,
|
||||
.tough = 95,
|
||||
.sheen = 230,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2146,7 +2079,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 50,
|
||||
.tough = 100,
|
||||
.sheen = 240,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2175,7 +2107,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 80,
|
||||
.tough = 80,
|
||||
.sheen = 250,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2204,7 +2135,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 40,
|
||||
.tough = 110,
|
||||
.sheen = 240,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2233,7 +2163,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 25,
|
||||
.tough = 80,
|
||||
.sheen = 230,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2262,7 +2191,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 35,
|
||||
.tough = 40,
|
||||
.sheen = 220,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2291,7 +2219,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 40,
|
||||
.tough = 160,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2320,7 +2247,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 150,
|
||||
.tough = 160,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2349,7 +2275,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 185,
|
||||
.tough = 60,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2378,7 +2303,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 110,
|
||||
.tough = 150,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2407,7 +2331,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 30,
|
||||
.tough = 90,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2436,7 +2359,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 230,
|
||||
.tough = 80,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2465,7 +2387,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 130,
|
||||
.tough = 40,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2494,7 +2415,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 150,
|
||||
.tough = 160,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2523,7 +2443,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 130,
|
||||
.tough = 170,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2552,7 +2471,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 75,
|
||||
.tough = 100,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2581,7 +2499,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 40,
|
||||
.tough = 190,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2610,7 +2527,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 240,
|
||||
.tough = 140,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2639,7 +2555,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 35,
|
||||
.tough = 50,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2668,7 +2583,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 115,
|
||||
.tough = 120,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2697,7 +2611,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 220,
|
||||
.tough = 210,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2726,7 +2639,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 80,
|
||||
.tough = 180,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2755,7 +2667,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 130,
|
||||
.tough = 130,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2784,7 +2695,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 120,
|
||||
.tough = 150,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2813,7 +2723,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 170,
|
||||
.tough = 80,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2842,7 +2751,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 150,
|
||||
.tough = 120,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2871,7 +2779,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 120,
|
||||
.tough = 80,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2900,7 +2807,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 80,
|
||||
.tough = 150,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2929,7 +2835,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 110,
|
||||
.tough = 170,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
@@ -2958,7 +2863,6 @@ const struct ContestPokemon gContestOpponents[] =
|
||||
.smart = 80,
|
||||
.tough = 190,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
}
|
||||
|
||||
@@ -558,7 +558,7 @@ static void sub_8024BC8(u8 taskId)
|
||||
case 2:
|
||||
if (!sub_802A770())
|
||||
{
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
gUnknown_02022C98->unk0C++;
|
||||
}
|
||||
break;
|
||||
@@ -671,7 +671,7 @@ static void sub_8024E38(void)
|
||||
gUnknown_02022C98->unk10++;
|
||||
break;
|
||||
case 1:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
gUnknown_02022C98->unk10++;
|
||||
break;
|
||||
case 2:
|
||||
@@ -690,7 +690,7 @@ static void sub_8024E38(void)
|
||||
case 4:
|
||||
if (++gUnknown_02022C98->unk30 > 5)
|
||||
{
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
gUnknown_02022C98->unk10++;
|
||||
}
|
||||
break;
|
||||
@@ -1081,7 +1081,7 @@ static void sub_8025644(void)
|
||||
switch (gUnknown_02022C98->unk10)
|
||||
{
|
||||
case 0:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
sub_80292E0(7);
|
||||
gUnknown_02022C98->unk10++;
|
||||
break;
|
||||
|
||||
@@ -192,7 +192,7 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1)
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
sub_800ABF4(0);
|
||||
SetCloseLinkCallbackAndType(0);
|
||||
*arg0 = 5;
|
||||
break;
|
||||
case 5:
|
||||
@@ -403,7 +403,7 @@ static void sub_81D5084(u8 taskId)
|
||||
break;
|
||||
case 15:
|
||||
data->unkE = EReader_IsReceivedDataValid((struct EReaderTrainerHillSet *)gDecompressionBuffer);
|
||||
sub_800ABF4(data->unkE);
|
||||
SetCloseLinkCallbackAndType(data->unkE);
|
||||
data->unk8 = 16;
|
||||
break;
|
||||
case 16:
|
||||
|
||||
@@ -194,7 +194,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
|
||||
switch (task->data[0])
|
||||
{
|
||||
case 0:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
@@ -227,7 +227,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId)
|
||||
switch (task->data[0])
|
||||
{
|
||||
case 0:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
@@ -625,7 +625,7 @@ static void Task_ReturnToWorldFromLinkRoom(u8 taskId)
|
||||
case 1:
|
||||
if (!PaletteFadeActive() && BGMusicStopped())
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
data[0]++;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -3864,7 +3864,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
|
||||
case 7:
|
||||
if (IsLinkTaskFinished() == 1)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
@@ -3877,7 +3877,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
|
||||
case 9:
|
||||
if (gWirelessCommType == 0)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
}
|
||||
gBattleTypeFlags = sBattleTowerMultiBattleTypeFlags;
|
||||
EnableBothScriptContexts();
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
#include "battle_tower.h"
|
||||
#include "field_specials.h"
|
||||
#include "battle.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "main.h"
|
||||
#include "window.h"
|
||||
#include "menu.h"
|
||||
|
||||
+2
-2
@@ -461,12 +461,12 @@ const u32 gContestMiscGfx[] = INCBIN_U32("graphics/contest/misc.4bpp.lz");
|
||||
|
||||
const u32 gContestAudienceGfx[] = INCBIN_U32("graphics/contest/audience.4bpp.lz");
|
||||
|
||||
const u32 gUnknown_08C19168[] = INCBIN_U32("graphics/contest/faces.4bpp.lz");
|
||||
const u32 gContestFaces_Gfx[] = INCBIN_U32("graphics/contest/faces.4bpp.lz");
|
||||
|
||||
const u32 gContestJudgeSymbolsGfx[] = INCBIN_U32("graphics/contest/judge_symbols.4bpp.lz");
|
||||
const u32 gContest3Pal[] = INCBIN_U32("graphics/contest/judge_symbols.gbapal.lz");
|
||||
|
||||
const u8 gTiles_8C19450[] = INCBIN_U8("graphics/contest/heart.4bpp");
|
||||
const u8 gContestSliderHeart_Gfx[] = INCBIN_U8("graphics/contest/slider_heart.4bpp");
|
||||
|
||||
const u32 gUnknownGfx_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.4bpp.lz");
|
||||
const u32 gUnknownPal_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.gbapal.lz");
|
||||
|
||||
+78
-78
@@ -75,9 +75,9 @@ u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
|
||||
u32 gLinkStatus;
|
||||
bool8 gLinkDummy1; // Never read
|
||||
bool8 gLinkDummy2; // Never read
|
||||
bool8 gUnknown_030030EC[MAX_LINK_PLAYERS];
|
||||
bool8 gUnknown_030030F0[MAX_LINK_PLAYERS];
|
||||
u16 gUnknown_030030F4;
|
||||
bool8 gReadyToExitStandby[MAX_LINK_PLAYERS];
|
||||
bool8 gReadyToCloseLink[MAX_LINK_PLAYERS];
|
||||
u16 gReadyCloseLinkType; // Never read
|
||||
u8 gSuppressLinkErrorMessage;
|
||||
bool8 gWirelessCommType;
|
||||
bool8 gSavedLinkPlayerCount;
|
||||
@@ -114,7 +114,7 @@ EWRAM_DATA struct {
|
||||
u8 lastSendQueueCount;
|
||||
u8 unk_06;
|
||||
} sLinkErrorBuffer = {};
|
||||
static EWRAM_DATA u16 sUnknown_02022B08 = 0;
|
||||
static EWRAM_DATA u16 sReadyCloseLinkAttempts = 0; // never read
|
||||
static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL;
|
||||
|
||||
// Static ROM declarations
|
||||
@@ -135,12 +135,12 @@ static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
|
||||
static void LinkCB_RequestPlayerDataExchange(void);
|
||||
static void Task_PrintTestData(u8 taskId);
|
||||
|
||||
static void sub_800AC80(void);
|
||||
static void sub_800ACAC(void);
|
||||
static void sub_800AD5C(void);
|
||||
static void sub_800AD88(void);
|
||||
static void sub_800AE30(void);
|
||||
static void sub_800AE5C(void);
|
||||
static void LinkCB_ReadyCloseLink(void);
|
||||
static void LinkCB_WaitCloseLink(void);
|
||||
static void LinkCB_ReadyCloseLinkWithJP(void);
|
||||
static void LinkCB_WaitCloseLinkWithJP(void);
|
||||
static void LinkCB_Standby(void);
|
||||
static void LinkCB_StandbyForAll(void);
|
||||
|
||||
static void CheckErrorStatus(void);
|
||||
static void CB2_PrintErrorMessage(void);
|
||||
@@ -379,7 +379,7 @@ void OpenLink(void)
|
||||
sDummy1 = FALSE;
|
||||
gLinkDummy2 = FALSE;
|
||||
gLinkDummy1 = FALSE;
|
||||
gUnknown_030030F4 = 0;
|
||||
gReadyCloseLinkType = 0;
|
||||
CreateTask(Task_TriggerHandshake, 2);
|
||||
}
|
||||
else
|
||||
@@ -390,8 +390,8 @@ void OpenLink(void)
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
gRemoteLinkPlayersNotReceived[i] = TRUE;
|
||||
gUnknown_030030F0[i] = FALSE;
|
||||
gUnknown_030030EC[i] = FALSE;
|
||||
gReadyToCloseLink[i] = FALSE;
|
||||
gReadyToExitStandby[i] = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -467,7 +467,7 @@ static void LinkTestProcessKeyInput(void)
|
||||
}
|
||||
if (gMain.newKeys & SELECT_BUTTON)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
}
|
||||
if (gLinkTestDebugValuesEnabled)
|
||||
{
|
||||
@@ -630,16 +630,16 @@ static void ProcessRecvCmds(u8 unused)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case LINKCMD_0x5FFF:
|
||||
gUnknown_030030F0[i] = TRUE;
|
||||
case LINKCMD_READY_CLOSE_LINK:
|
||||
gReadyToCloseLink[i] = TRUE;
|
||||
break;
|
||||
case LINKCMD_0x2FFE:
|
||||
gUnknown_030030EC[i] = TRUE;
|
||||
case LINKCMD_READY_EXIT_STANDBY:
|
||||
gReadyToExitStandby[i] = TRUE;
|
||||
break;
|
||||
case LINKCMD_0xAAAA:
|
||||
sub_800A418();
|
||||
break;
|
||||
case LINKCMD_0xCCCC:
|
||||
case LINKCMD_SEND_BLOCK_REQ:
|
||||
SendBlock(0, sBlockRequests[gRecvCmds[i][1]].address, sBlockRequests[gRecvCmds[i][1]].size);
|
||||
break;
|
||||
case LINKCMD_SEND_HELD_KEYS_2:
|
||||
@@ -657,8 +657,8 @@ static void BuildSendCmd(u16 command)
|
||||
gSendCmd[0] = LINKCMD_SEND_LINK_TYPE;
|
||||
gSendCmd[1] = gLinkType;
|
||||
break;
|
||||
case LINKCMD_0x2FFE:
|
||||
gSendCmd[0] = LINKCMD_0x2FFE;
|
||||
case LINKCMD_READY_EXIT_STANDBY:
|
||||
gSendCmd[0] = LINKCMD_READY_EXIT_STANDBY;
|
||||
break;
|
||||
case LINKCMD_SEND_HELD_KEYS:
|
||||
gSendCmd[0] = LINKCMD_SEND_HELD_KEYS;
|
||||
@@ -694,13 +694,13 @@ static void BuildSendCmd(u16 command)
|
||||
gSendCmd[0] = LINKCMD_0xAAAB;
|
||||
gSendCmd[1] = gSpecialVar_ItemId;
|
||||
break;
|
||||
case LINKCMD_0xCCCC:
|
||||
gSendCmd[0] = LINKCMD_0xCCCC;
|
||||
case LINKCMD_SEND_BLOCK_REQ:
|
||||
gSendCmd[0] = LINKCMD_SEND_BLOCK_REQ;
|
||||
gSendCmd[1] = gBlockRequestType;
|
||||
break;
|
||||
case LINKCMD_0x5FFF:
|
||||
gSendCmd[0] = LINKCMD_0x5FFF;
|
||||
gSendCmd[1] = gUnknown_030030F4;
|
||||
case LINKCMD_READY_CLOSE_LINK:
|
||||
gSendCmd[0] = LINKCMD_READY_CLOSE_LINK;
|
||||
gSendCmd[1] = gReadyCloseLinkType;
|
||||
break;
|
||||
case LINKCMD_0x5566:
|
||||
gSendCmd[0] = LINKCMD_0x5566;
|
||||
@@ -1065,16 +1065,16 @@ bool8 SendBlock(u8 unused, const void *src, u16 size)
|
||||
return InitBlockSend(src, size);
|
||||
}
|
||||
|
||||
bool8 sub_800A4D8(u8 a0)
|
||||
bool8 SendBlockRequest(u8 blockReqType)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
return sub_8010100(a0);
|
||||
return Rfu_SendBlockRequest(blockReqType);
|
||||
}
|
||||
if (gLinkCallback == NULL)
|
||||
{
|
||||
gBlockRequestType = a0;
|
||||
BuildSendCmd(LINKCMD_0xCCCC);
|
||||
gBlockRequestType = blockReqType;
|
||||
BuildSendCmd(LINKCMD_SEND_BLOCK_REQ);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
@@ -1423,70 +1423,70 @@ static u8 GetDummy2(void)
|
||||
return sDummy2;
|
||||
}
|
||||
|
||||
void sub_800ABF4(u16 a0)
|
||||
void SetCloseLinkCallbackAndType(u16 type)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_SetCloseLinkCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkCallback == NULL)
|
||||
{
|
||||
gLinkCallback = sub_800AC80;
|
||||
gLinkCallback = LinkCB_ReadyCloseLink;
|
||||
gLinkDummy1 = FALSE;
|
||||
gUnknown_030030F4 = a0;
|
||||
gReadyCloseLinkType = type;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800AC34(void)
|
||||
void SetCloseLinkCallback(void)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_SetCloseLinkCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkCallback != NULL)
|
||||
{
|
||||
sUnknown_02022B08++;
|
||||
sReadyCloseLinkAttempts++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gLinkCallback = sub_800AC80;
|
||||
gLinkCallback = LinkCB_ReadyCloseLink;
|
||||
gLinkDummy1 = FALSE;
|
||||
gUnknown_030030F4 = 0;
|
||||
gReadyCloseLinkType = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AC80(void)
|
||||
static void LinkCB_ReadyCloseLink(void)
|
||||
{
|
||||
if (gLastRecvQueueCount == 0)
|
||||
{
|
||||
BuildSendCmd(LINKCMD_0x5FFF);
|
||||
gLinkCallback = sub_800ACAC;
|
||||
BuildSendCmd(LINKCMD_READY_CLOSE_LINK);
|
||||
gLinkCallback = LinkCB_WaitCloseLink;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800ACAC(void)
|
||||
static void LinkCB_WaitCloseLink(void)
|
||||
{
|
||||
int i;
|
||||
unsigned count;
|
||||
u8 linkPlayerCount;
|
||||
|
||||
linkPlayerCount = GetLinkPlayerCount();
|
||||
// Wait for all players to be ready
|
||||
u8 linkPlayerCount = GetLinkPlayerCount();
|
||||
count = 0;
|
||||
for (i = 0; i < linkPlayerCount; i++)
|
||||
{
|
||||
if (gUnknown_030030F0[i])
|
||||
{
|
||||
if (gReadyToCloseLink[i])
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
if (count == linkPlayerCount)
|
||||
{
|
||||
// All ready, close link
|
||||
gBattleTypeFlags &= ~BATTLE_TYPE_20;
|
||||
gLinkVSyncDisabled = TRUE;
|
||||
CloseLink();
|
||||
@@ -1495,37 +1495,38 @@ static void sub_800ACAC(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800AD10(void)
|
||||
// Used instead of SetCloseLinkCallback when disconnecting from an attempt to link with a foreign game
|
||||
void SetCloseLinkCallbackHandleJP(void)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_SetCloseLinkCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkCallback != NULL)
|
||||
{
|
||||
sUnknown_02022B08++;
|
||||
sReadyCloseLinkAttempts++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gLinkCallback = sub_800AD5C;
|
||||
gLinkCallback = LinkCB_ReadyCloseLinkWithJP;
|
||||
gLinkDummy1 = FALSE;
|
||||
gUnknown_030030F4 = 0;
|
||||
gReadyCloseLinkType = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AD5C(void)
|
||||
static void LinkCB_ReadyCloseLinkWithJP(void)
|
||||
{
|
||||
if (gLastRecvQueueCount == 0)
|
||||
{
|
||||
BuildSendCmd(LINKCMD_0x5FFF);
|
||||
gLinkCallback = sub_800AD88;
|
||||
BuildSendCmd(LINKCMD_READY_CLOSE_LINK);
|
||||
gLinkCallback = LinkCB_WaitCloseLinkWithJP;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AD88(void)
|
||||
static void LinkCB_WaitCloseLinkWithJP(void)
|
||||
{
|
||||
int i;
|
||||
unsigned count;
|
||||
@@ -1533,19 +1534,21 @@ static void sub_800AD88(void)
|
||||
|
||||
linkPlayerCount = GetLinkPlayerCount();
|
||||
count = 0;
|
||||
|
||||
// Wait for all non-foreign players to be ready
|
||||
for (i = 0; i < linkPlayerCount; i++)
|
||||
{
|
||||
// Rather than communicate with the foreign game
|
||||
// just assume they're ready to disconnect
|
||||
if (gLinkPlayers[i].language == LANGUAGE_JAPANESE)
|
||||
{
|
||||
count++;
|
||||
}
|
||||
else if (gUnknown_030030F0[i])
|
||||
{
|
||||
else if (gReadyToCloseLink[i])
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
if (count == linkPlayerCount)
|
||||
{
|
||||
// All ready, close link
|
||||
gBattleTypeFlags &= ~BATTLE_TYPE_20;
|
||||
gLinkVSyncDisabled = TRUE;
|
||||
CloseLink();
|
||||
@@ -1554,50 +1557,47 @@ static void sub_800AD88(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800ADF8(void)
|
||||
void SetLinkStandbyCallback(void)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkCallback == NULL)
|
||||
{
|
||||
gLinkCallback = sub_800AE30;
|
||||
gLinkCallback = LinkCB_Standby;
|
||||
}
|
||||
gLinkDummy1 = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AE30(void)
|
||||
static void LinkCB_Standby(void)
|
||||
{
|
||||
if (gLastRecvQueueCount == 0)
|
||||
{
|
||||
BuildSendCmd(LINKCMD_0x2FFE);
|
||||
gLinkCallback = sub_800AE5C;
|
||||
BuildSendCmd(LINKCMD_READY_EXIT_STANDBY);
|
||||
gLinkCallback = LinkCB_StandbyForAll;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AE5C(void)
|
||||
static void LinkCB_StandbyForAll(void)
|
||||
{
|
||||
u8 i;
|
||||
u8 linkPlayerCount;
|
||||
|
||||
linkPlayerCount = GetLinkPlayerCount();
|
||||
u8 linkPlayerCount = GetLinkPlayerCount();
|
||||
for (i = 0; i < linkPlayerCount; i++)
|
||||
{
|
||||
if (!gUnknown_030030EC[i])
|
||||
{
|
||||
if (!gReadyToExitStandby[i])
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If true, all players ready to exit standby
|
||||
if (i == linkPlayerCount)
|
||||
{
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
gUnknown_030030EC[i] = FALSE;
|
||||
}
|
||||
gReadyToExitStandby[i] = FALSE;
|
||||
|
||||
gLinkCallback = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
+56
-53
@@ -148,10 +148,7 @@ static const u8 sUnknown_082ED6A5[] = {
|
||||
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
|
||||
};
|
||||
|
||||
static const struct {
|
||||
u8 *buffer;
|
||||
u32 size;
|
||||
} sUnknown_082ED6B8[] = {
|
||||
static const struct BlockRequest sBlockRequests[] = {
|
||||
{ gBlockSendBuffer, 200 },
|
||||
{ gBlockSendBuffer, 200 },
|
||||
{ gBlockSendBuffer, 100 },
|
||||
@@ -1072,15 +1069,15 @@ static void RfuHandleReceiveCommand(u8 unused)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RFU_COMMAND_0xA100:
|
||||
Rfu_InitBlockSend(sUnknown_082ED6B8[gRecvCmds[i][1]].buffer, (u16)sUnknown_082ED6B8[gRecvCmds[i][1]].size);
|
||||
case RFU_COMMAND_SEND_BLOCK_REQ:
|
||||
Rfu_InitBlockSend(sBlockRequests[gRecvCmds[i][1]].address, (u16)sBlockRequests[gRecvCmds[i][1]].size);
|
||||
break;
|
||||
case RFU_COMMAND_0x5F00:
|
||||
Rfu.unk_e4[i] = 1;
|
||||
case RFU_COMMAND_READY_CLOSE_LINK:
|
||||
Rfu.readyCloseLink[i] = TRUE;
|
||||
break;
|
||||
case RFU_COMMAND_0x6600:
|
||||
case RFU_COMMAND_READY_EXIT_STANDBY:
|
||||
if (Rfu.unk_100 == gRecvCmds[i][1])
|
||||
Rfu.unk_e9[i] = 1;
|
||||
Rfu.readyExitStandby[i] = TRUE;
|
||||
break;
|
||||
case RFU_COMMAND_0xED00:
|
||||
if (Rfu.parentChild == MODE_CHILD)
|
||||
@@ -1194,9 +1191,9 @@ static void RfuPrepareSendBuffer(u16 command)
|
||||
gSendCmd[1] = Rfu.sendBlock.count;
|
||||
gSendCmd[2] = Rfu.sendBlock.owner + 0x80;
|
||||
break;
|
||||
case RFU_COMMAND_0xA100:
|
||||
case RFU_COMMAND_SEND_BLOCK_REQ:
|
||||
if (AreNoPlayersReceiving())
|
||||
gSendCmd[1] = Rfu.unk_5a;
|
||||
gSendCmd[1] = Rfu.blockRequestType;
|
||||
break;
|
||||
case RFU_COMMAND_0x7700:
|
||||
case RFU_COMMAND_0x7800:
|
||||
@@ -1207,8 +1204,8 @@ static void RfuPrepareSendBuffer(u16 command)
|
||||
for (i = 0; i < RFU_CHILD_MAX; i++)
|
||||
buff[i] = Rfu.linkPlayerIdx[i];
|
||||
break;
|
||||
case RFU_COMMAND_0x6600:
|
||||
case RFU_COMMAND_0x5F00:
|
||||
case RFU_COMMAND_READY_EXIT_STANDBY:
|
||||
case RFU_COMMAND_READY_CLOSE_LINK:
|
||||
gSendCmd[1] = Rfu.unk_100;
|
||||
break;
|
||||
case RFU_COMMAND_0x4400:
|
||||
@@ -1327,10 +1324,10 @@ static void SendLastBlock(void)
|
||||
Rfu.callback = NULL;
|
||||
}
|
||||
|
||||
bool8 sub_8010100(u8 blockRequestType)
|
||||
bool8 Rfu_SendBlockRequest(u8 type)
|
||||
{
|
||||
Rfu.unk_5a = blockRequestType;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0xA100);
|
||||
Rfu.blockRequestType = type;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_SEND_BLOCK_REQ);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1343,14 +1340,14 @@ static void sub_801011C(void)
|
||||
Rfu.callback = NULL;
|
||||
}
|
||||
|
||||
static void sub_8010148(void)
|
||||
static void DisconnectRfu(void)
|
||||
{
|
||||
rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
|
||||
rfu_waitREQComplete();
|
||||
sub_801011C();
|
||||
}
|
||||
|
||||
static void sub_8010168(void)
|
||||
static void TryDisconnectRfu(void)
|
||||
{
|
||||
if (Rfu.parentChild == MODE_CHILD)
|
||||
{
|
||||
@@ -1358,7 +1355,7 @@ static void sub_8010168(void)
|
||||
Rfu.unk_ce4 = 2;
|
||||
}
|
||||
else
|
||||
Rfu.callback = sub_8010148;
|
||||
Rfu.callback = DisconnectRfu;
|
||||
}
|
||||
|
||||
void LinkRfu_FatalError(void)
|
||||
@@ -1368,131 +1365,137 @@ void LinkRfu_FatalError(void)
|
||||
Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
|
||||
}
|
||||
|
||||
static void sub_80101CC(void)
|
||||
// RFU equivalent of LinkCB_WaitCloseLink
|
||||
static void WaitAllReadyToCloseLink(void)
|
||||
{
|
||||
s32 i;
|
||||
u8 playerCount = Rfu.playerCount;
|
||||
s32 count = 0;
|
||||
|
||||
// Wait for all players to be ready
|
||||
for (i = 0; i < MAX_RFU_PLAYERS; i++)
|
||||
{
|
||||
if (Rfu.unk_e4[i])
|
||||
if (Rfu.readyCloseLink[i])
|
||||
count++;
|
||||
}
|
||||
if (count == playerCount)
|
||||
{
|
||||
// All ready, close link
|
||||
gBattleTypeFlags &= ~BATTLE_TYPE_20;
|
||||
if (Rfu.parentChild == MODE_CHILD)
|
||||
{
|
||||
Rfu.errorState = 3;
|
||||
sub_8010168();
|
||||
TryDisconnectRfu();
|
||||
}
|
||||
else
|
||||
Rfu.callback = sub_8010168;
|
||||
Rfu.callback = TryDisconnectRfu;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_801022C(void)
|
||||
static void SendReadyCloseLink(void)
|
||||
{
|
||||
if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0)
|
||||
{
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0x5F00);
|
||||
Rfu.callback = sub_80101CC;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_READY_CLOSE_LINK);
|
||||
Rfu.callback = WaitAllReadyToCloseLink;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8010264(u8 taskId)
|
||||
static void Task_TryReadyCloseLink(u8 taskId)
|
||||
{
|
||||
if (Rfu.callback == NULL)
|
||||
{
|
||||
Rfu.unk_cd9 = 1;
|
||||
Rfu.callback = sub_801022C;
|
||||
Rfu.callback = SendReadyCloseLink;
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
void task_add_05_task_del_08FA224_when_no_RfuFunc(void)
|
||||
void Rfu_SetCloseLinkCallback(void)
|
||||
{
|
||||
if (!FuncIsActiveTask(sub_8010264))
|
||||
CreateTask(sub_8010264, 5);
|
||||
if (!FuncIsActiveTask(Task_TryReadyCloseLink))
|
||||
CreateTask(Task_TryReadyCloseLink, 5);
|
||||
}
|
||||
|
||||
static void sub_80102B8(void)
|
||||
static void SendReadyExitStandbyUntilAllReady(void)
|
||||
{
|
||||
u8 playerCount;
|
||||
u8 i;
|
||||
|
||||
if (GetMultiplayerId() != 0)
|
||||
{
|
||||
if (Rfu.recvQueue.count == 0 && Rfu.unk_fe > 60)
|
||||
if (Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60)
|
||||
{
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
|
||||
Rfu.unk_fe = 0;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
|
||||
Rfu.resendExitStandbyTimer = 0;
|
||||
}
|
||||
}
|
||||
playerCount = GetLinkPlayerCount();
|
||||
for (i = 0; i < playerCount; i++)
|
||||
{
|
||||
if (Rfu.unk_e9[i] == 0)
|
||||
if (!Rfu.readyExitStandby[i])
|
||||
break;
|
||||
}
|
||||
if (i == playerCount)
|
||||
{
|
||||
for (i = 0; i < MAX_RFU_PLAYERS; i++)
|
||||
Rfu.unk_e9[i] = 0;
|
||||
Rfu.readyExitStandby[i] = FALSE;
|
||||
Rfu.unk_100++;
|
||||
Rfu.callback = NULL;
|
||||
}
|
||||
Rfu.unk_fe++;
|
||||
Rfu.resendExitStandbyTimer++;
|
||||
}
|
||||
|
||||
static void sub_8010358(void)
|
||||
static void LinkLeaderReadyToExitStandby(void)
|
||||
{
|
||||
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
|
||||
{
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
|
||||
Rfu.callback = sub_80102B8;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
|
||||
Rfu.callback = SendReadyExitStandbyUntilAllReady;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8010390(void)
|
||||
// RFU equivalent of LinkCB_Standby and LinkCB_StandbyForAll
|
||||
static void Rfu_LinkStandby(void)
|
||||
{
|
||||
u8 i;
|
||||
u8 playerCount;
|
||||
|
||||
if (GetMultiplayerId() != 0)
|
||||
{
|
||||
// Not link leader, send exit standby when ready
|
||||
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
|
||||
{
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
|
||||
Rfu.callback = sub_80102B8;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
|
||||
Rfu.callback = SendReadyExitStandbyUntilAllReady;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Link leader, wait for all members to send exit ready
|
||||
playerCount = GetLinkPlayerCount();
|
||||
for (i = 1; i < playerCount; i++)
|
||||
{
|
||||
if (Rfu.unk_e9[i] == 0)
|
||||
if (!Rfu.readyExitStandby[i])
|
||||
break;
|
||||
}
|
||||
if (i == playerCount)
|
||||
{
|
||||
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
|
||||
{
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
|
||||
Rfu.callback = sub_8010358;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
|
||||
Rfu.callback = LinkLeaderReadyToExitStandby;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8010434(void)
|
||||
void Rfu_SetLinkStandbyCallback(void)
|
||||
{
|
||||
if (Rfu.callback == NULL)
|
||||
{
|
||||
Rfu.callback = sub_8010390;
|
||||
Rfu.unk_fe = 0;
|
||||
Rfu.callback = Rfu_LinkStandby;
|
||||
Rfu.resendExitStandbyTimer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1724,8 +1727,8 @@ static void sub_801084C(u8 taskId)
|
||||
{
|
||||
if (AreNoPlayersReceiving())
|
||||
{
|
||||
Rfu.unk_5a = 0;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0xA100);
|
||||
Rfu.blockRequestType = 0;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_SEND_BLOCK_REQ);
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -208,7 +208,7 @@ static void CB2_MysteryEventMenu(void)
|
||||
{
|
||||
if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == EXCHANGE_DIFF_SELECTIONS)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
GetEventLoadMessage(gStringVar4, 1);
|
||||
PrintMysteryMenuText(0, gStringVar4, 1, 2, 1);
|
||||
gMain.state = 13;
|
||||
@@ -249,7 +249,7 @@ static void CB2_MysteryEventMenu(void)
|
||||
gMain.state++;
|
||||
break;
|
||||
case 10:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gMain.state++;
|
||||
break;
|
||||
case 11:
|
||||
|
||||
+2
-2
@@ -1284,7 +1284,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
switch (mevent_client_do_exec(&data->curPromptWindowId))
|
||||
{
|
||||
case 6:
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_SetCloseLinkCallback();
|
||||
data->prevPromptWindowId = data->curPromptWindowId;
|
||||
data->state = 13;
|
||||
break;
|
||||
@@ -1647,7 +1647,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 33:
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_SetCloseLinkCallback();
|
||||
StringCopy(gStringVar1, gLinkPlayers[1].name);
|
||||
data->state = 34;
|
||||
break;
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@
|
||||
#include "save.h"
|
||||
#include "save_location.h"
|
||||
#include "script.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "secret_base.h"
|
||||
#include "sound.h"
|
||||
#include "start_menu.h"
|
||||
|
||||
+2
-2
@@ -4499,8 +4499,8 @@ void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord)
|
||||
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * 4 + j]);
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * 4 + j]].pp);
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * MAX_MON_MOVES + j]);
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * MAX_MON_MOVES + j]].pp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1463,7 +1463,7 @@ static bool32 sub_802BC60(void)
|
||||
case 4:
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gUnknown_02022CFC->unkA++;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "hall_of_fame.h"
|
||||
#include "load_save.h"
|
||||
#include "overworld.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "tv.h"
|
||||
#include "constants/heal_locations.h"
|
||||
#include "constants/tv.h"
|
||||
|
||||
+3
-3
@@ -501,7 +501,7 @@ static void Task_SendPacket(u8 taskId)
|
||||
break;
|
||||
case 1:
|
||||
if (GetMultiplayerId() == 0)
|
||||
sub_800A4D8(1);
|
||||
SendBlockRequest(1);
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 2:
|
||||
@@ -973,7 +973,7 @@ static void Task_DoRecordMixing(u8 taskId)
|
||||
case 4: // Wait 10 frames
|
||||
if (++task->data[1] > 10)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
task->data[0] ++;
|
||||
}
|
||||
break;
|
||||
@@ -1005,7 +1005,7 @@ static void Task_DoRecordMixing(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
task->data[0] ++;
|
||||
break;
|
||||
case 9:
|
||||
|
||||
+3
-3
@@ -912,7 +912,7 @@ void Task_LinkSave(u8 taskId)
|
||||
tState = 1;
|
||||
break;
|
||||
case 1:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
tState = 2;
|
||||
break;
|
||||
case 2:
|
||||
@@ -949,7 +949,7 @@ void Task_LinkSave(u8 taskId)
|
||||
case 7:
|
||||
if (!tPartialSave)
|
||||
ClearContinueGameWarpStatus2();
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
tState = 8;
|
||||
break;
|
||||
case 8:
|
||||
@@ -960,7 +960,7 @@ void Task_LinkSave(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
tState = 10;
|
||||
break;
|
||||
case 10:
|
||||
|
||||
+2
-2
@@ -38,7 +38,7 @@
|
||||
#include "script.h"
|
||||
#include "script_menu.h"
|
||||
#include "script_movement.h"
|
||||
#include "script_pokemon_80F8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "shop.h"
|
||||
#include "slot_machine.h"
|
||||
#include "sound.h"
|
||||
@@ -1475,7 +1475,7 @@ bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx)
|
||||
if (contestWinnerId != CONTEST_WINNER_ARTIST)
|
||||
SetContestWinnerForPainting(contestWinnerId);
|
||||
|
||||
ShowContestWinner();
|
||||
ShowContestWinnerPainting();
|
||||
ScriptContext1_Stop();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Executable
+224
@@ -0,0 +1,224 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_gfx_sfx_util.h"
|
||||
#include "berry.h"
|
||||
#include "data.h"
|
||||
#include "daycare.h"
|
||||
#include "decompress.h"
|
||||
#include "event_data.h"
|
||||
#include "international_string_util.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "main.h"
|
||||
#include "menu.h"
|
||||
#include "overworld.h"
|
||||
#include "palette.h"
|
||||
#include "party_menu.h"
|
||||
#include "pokedex.h"
|
||||
#include "pokemon.h"
|
||||
#include "random.h"
|
||||
#include "script.h"
|
||||
#include "sprite.h"
|
||||
#include "string_util.h"
|
||||
#include "tv.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/tv.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
|
||||
static void CB2_ReturnFromChooseHalfParty(void);
|
||||
static void CB2_ReturnFromChooseBattleFrontierParty(void);
|
||||
|
||||
void HealPlayerParty(void)
|
||||
{
|
||||
u8 i, j;
|
||||
u8 ppBonuses;
|
||||
u8 arg[4];
|
||||
|
||||
// restore HP.
|
||||
for(i = 0; i < gPlayerPartyCount; i++)
|
||||
{
|
||||
u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
|
||||
arg[0] = maxHP;
|
||||
arg[1] = maxHP >> 8;
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_HP, arg);
|
||||
ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES);
|
||||
|
||||
// restore PP.
|
||||
for(j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j);
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg);
|
||||
}
|
||||
|
||||
// since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData.
|
||||
arg[0] = 0;
|
||||
arg[1] = 0;
|
||||
arg[2] = 0;
|
||||
arg[3] = 0;
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg);
|
||||
}
|
||||
}
|
||||
|
||||
u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3)
|
||||
{
|
||||
u16 nationalDexNum;
|
||||
int sentToPc;
|
||||
u8 heldItem[2];
|
||||
struct Pokemon mon;
|
||||
|
||||
CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
heldItem[0] = item;
|
||||
heldItem[1] = item >> 8;
|
||||
SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem);
|
||||
sentToPc = GiveMonToPlayer(&mon);
|
||||
nationalDexNum = SpeciesToNationalPokedexNum(species);
|
||||
|
||||
switch(sentToPc)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
|
||||
GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
|
||||
break;
|
||||
}
|
||||
return sentToPc;
|
||||
}
|
||||
|
||||
u8 ScriptGiveEgg(u16 species)
|
||||
{
|
||||
struct Pokemon mon;
|
||||
u8 isEgg;
|
||||
|
||||
CreateEgg(&mon, species, TRUE);
|
||||
isEgg = TRUE;
|
||||
SetMonData(&mon, MON_DATA_IS_EGG, &isEgg);
|
||||
|
||||
return GiveMonToPlayer(&mon);
|
||||
}
|
||||
|
||||
void HasEnoughMonsForDoubleBattle(void)
|
||||
{
|
||||
switch (GetMonsStateToDoubles())
|
||||
{
|
||||
case PLAYER_HAS_TWO_USABLE_MONS:
|
||||
gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS;
|
||||
break;
|
||||
case PLAYER_HAS_ONE_MON:
|
||||
gSpecialVar_Result = PLAYER_HAS_ONE_MON;
|
||||
break;
|
||||
case PLAYER_HAS_ONE_USABLE_MON:
|
||||
gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 CheckPartyMonHasHeldItem(u16 item)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
|
||||
if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item)
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 DoesPartyHaveEnigmaBerry(void)
|
||||
{
|
||||
bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
|
||||
if (hasItem == TRUE)
|
||||
GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1);
|
||||
|
||||
return hasItem;
|
||||
}
|
||||
|
||||
void CreateScriptedWildMon(u16 species, u8 level, u16 item)
|
||||
{
|
||||
u8 heldItem[2];
|
||||
|
||||
ZeroEnemyPartyMons();
|
||||
CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
if (item)
|
||||
{
|
||||
heldItem[0] = item;
|
||||
heldItem[1] = item >> 8;
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
|
||||
{
|
||||
if (monIndex > PARTY_SIZE)
|
||||
monIndex = gPlayerPartyCount - 1;
|
||||
|
||||
SetMonMoveSlot(&gPlayerParty[monIndex], move, slot);
|
||||
}
|
||||
|
||||
// Note: When control returns to the event script, gSpecialVar_Result will be
|
||||
// TRUE if the party selection was successful.
|
||||
void ChooseHalfPartyForBattle(void)
|
||||
{
|
||||
gMain.savedCallback = CB2_ReturnFromChooseHalfParty;
|
||||
VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER);
|
||||
InitChooseHalfPartyForBattle(0);
|
||||
}
|
||||
|
||||
static void CB2_ReturnFromChooseHalfParty(void)
|
||||
{
|
||||
switch (gSelectedOrderFromParty[0])
|
||||
{
|
||||
case 0:
|
||||
gSpecialVar_Result = FALSE;
|
||||
break;
|
||||
default:
|
||||
gSpecialVar_Result = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
void ChoosePartyForBattleFrontier(void)
|
||||
{
|
||||
gMain.savedCallback = CB2_ReturnFromChooseBattleFrontierParty;
|
||||
InitChooseHalfPartyForBattle(gSpecialVar_0x8004 + 1);
|
||||
}
|
||||
|
||||
static void CB2_ReturnFromChooseBattleFrontierParty(void)
|
||||
{
|
||||
switch (gSelectedOrderFromParty[0])
|
||||
{
|
||||
case 0:
|
||||
gSpecialVar_Result = FALSE;
|
||||
break;
|
||||
default:
|
||||
gSpecialVar_Result = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
void ReducePlayerPartyToSelectedMons(void)
|
||||
{
|
||||
struct Pokemon party[MAX_FRONTIER_PARTY_SIZE];
|
||||
int i;
|
||||
|
||||
CpuFill32(0, party, sizeof party);
|
||||
|
||||
// copy the selected pokemon according to the order.
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
|
||||
party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal
|
||||
|
||||
CpuFill32(0, gPlayerParty, sizeof gPlayerParty);
|
||||
|
||||
// overwrite the first 4 with the order copied to.
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
gPlayerParty[i] = party[i];
|
||||
|
||||
CalculatePlayerPartyCount();
|
||||
}
|
||||
@@ -1,725 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_gfx_sfx_util.h"
|
||||
#include "berry.h"
|
||||
#include "contest.h"
|
||||
#include "contest_util.h"
|
||||
#include "contest_painting.h"
|
||||
#include "data.h"
|
||||
#include "daycare.h"
|
||||
#include "decompress.h"
|
||||
#include "event_data.h"
|
||||
#include "event_object_movement.h"
|
||||
#include "international_string_util.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "main.h"
|
||||
#include "menu.h"
|
||||
#include "overworld.h"
|
||||
#include "palette.h"
|
||||
#include "party_menu.h"
|
||||
#include "pokedex.h"
|
||||
#include "pokemon.h"
|
||||
#include "random.h"
|
||||
#include "script.h"
|
||||
#include "script_menu.h"
|
||||
#include "sprite.h"
|
||||
#include "string_util.h"
|
||||
#include "tv.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/tv.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
|
||||
extern const u16 gObjectEventPalette8[];
|
||||
extern const u16 gObjectEventPalette17[];
|
||||
extern const u16 gObjectEventPalette33[];
|
||||
extern const u16 gObjectEventPalette34[];
|
||||
|
||||
static const u8 gUnknown_0858D8EC[] = { 3, 4, 5, 14 };
|
||||
|
||||
static void Task_ShowContestEntryMonPic(u8 taskId);
|
||||
static void Task_LinkContestWaitForConnection(u8 taskId);
|
||||
static void CB2_ReturnFromChooseHalfParty(void);
|
||||
static void CB2_ReturnFromChooseBattleFrontierParty(void);
|
||||
|
||||
void SetContestTrainerGfxIds(void)
|
||||
{
|
||||
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId;
|
||||
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_1 - VARS_START] = gContestMons[1].trainerGfxId;
|
||||
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId;
|
||||
}
|
||||
|
||||
// Unused
|
||||
void sub_80F8814(void)
|
||||
{
|
||||
u16 var1;
|
||||
u8 var0 = gSpecialVar_0x8005;
|
||||
switch (var0)
|
||||
{
|
||||
case 0:
|
||||
var1 = 3;
|
||||
break;
|
||||
case 1:
|
||||
var1 = 4;
|
||||
break;
|
||||
case 2:
|
||||
var1 = 5;
|
||||
break;
|
||||
default:
|
||||
var1 = 100;
|
||||
break;
|
||||
}
|
||||
|
||||
gSpecialVar_0x8004 = var1;
|
||||
}
|
||||
|
||||
void BufferContestTrainerAndMonNames(void)
|
||||
{
|
||||
BufferContestantTrainerName();
|
||||
BufferContestantMonNickname();
|
||||
BufferContestantMonSpecies();
|
||||
}
|
||||
|
||||
// Unused
|
||||
void DoesContestCategoryHaveWinner(void)
|
||||
{
|
||||
int contestWinner;
|
||||
switch (gSpecialVar_ContestCategory)
|
||||
{
|
||||
case CONTEST_CATEGORY_COOL:
|
||||
contestWinner = 8;
|
||||
break;
|
||||
case CONTEST_CATEGORY_BEAUTY:
|
||||
contestWinner = 9;
|
||||
break;
|
||||
case CONTEST_CATEGORY_CUTE:
|
||||
contestWinner = 10;
|
||||
break;
|
||||
case CONTEST_CATEGORY_SMART:
|
||||
contestWinner = 11;
|
||||
break;
|
||||
case CONTEST_CATEGORY_TOUGH:
|
||||
default:
|
||||
contestWinner = 12;
|
||||
break;
|
||||
}
|
||||
|
||||
if (gSaveBlock1Ptr->contestWinners[contestWinner].species == SPECIES_NONE)
|
||||
gSpecialVar_0x8004 = FALSE;
|
||||
else
|
||||
gSpecialVar_0x8004 = TRUE;
|
||||
}
|
||||
|
||||
void SaveMuseumContestPainting(void)
|
||||
{
|
||||
sub_80DEDA8(0xFF);
|
||||
}
|
||||
|
||||
void ShouldReadyContestArtist(void)
|
||||
{
|
||||
if (gContestFinalStandings[gContestPlayerMonIndex] == 0
|
||||
&& gSpecialVar_ContestRank == CONTEST_RANK_MASTER
|
||||
&& gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
|
||||
{
|
||||
gSpecialVar_0x8004 = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
gSpecialVar_0x8004 = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
u8 CountPlayerContestPaintings(void)
|
||||
{
|
||||
int i;
|
||||
u8 count = 0;
|
||||
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
if (gSaveBlock1Ptr->contestWinners[8 + i].species)
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
// Unused
|
||||
void sub_80F8970(void)
|
||||
{
|
||||
s16 conditions[CONTESTANT_COUNT];
|
||||
int i, j;
|
||||
s16 condition;
|
||||
s8 var0;
|
||||
u8 var2;
|
||||
u8 r8;
|
||||
u8 r7;
|
||||
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
conditions[i] = gContestMonConditions[i];
|
||||
|
||||
for (i = 0; i < CONTESTANT_COUNT - 1; i++)
|
||||
{
|
||||
for (j = CONTESTANT_COUNT - 1; j > i; j--)
|
||||
{
|
||||
if (conditions[j - 1] < conditions[j])
|
||||
{
|
||||
int temp;
|
||||
SWAP(conditions[j], conditions[j - 1], temp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
condition = conditions[gSpecialVar_0x8006];
|
||||
var0 = 0;
|
||||
r8 = 0;
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (conditions[i] == condition)
|
||||
{
|
||||
var0++;
|
||||
if (i == gSpecialVar_0x8006)
|
||||
r8 = var0;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (conditions[i] == condition)
|
||||
break;
|
||||
}
|
||||
|
||||
r7 = i;
|
||||
var2 = r8;
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (condition == gContestMonConditions[i])
|
||||
{
|
||||
if (var2 == 1)
|
||||
break;
|
||||
var2--;
|
||||
}
|
||||
}
|
||||
|
||||
StringCopy(gStringVar1, gContestMons[i].nickname);
|
||||
StringCopy(gStringVar2, gContestMons[i].trainerName);
|
||||
sub_81DB5AC(gStringVar2);
|
||||
|
||||
if (var0 == 1)
|
||||
gSpecialVar_0x8006 = r7;
|
||||
else if (r8 == var0)
|
||||
gSpecialVar_0x8006 = r7;
|
||||
else
|
||||
gSpecialVar_0x8006 = r7 + 4;
|
||||
}
|
||||
|
||||
static void ShowContestWinnerCleanup(void)
|
||||
{
|
||||
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
void ShowContestWinner(void)
|
||||
{
|
||||
/*
|
||||
if(gUnknown_0203856C)
|
||||
{
|
||||
sub_80AAF30();
|
||||
gBattleStruct->unk15DDF = 1;
|
||||
gBattleStruct->unk15DDE = sub_80B2C4C(254, 0);
|
||||
Contest_SaveWinner(3);
|
||||
gUnknown_0203856C = 0;
|
||||
}
|
||||
*/
|
||||
|
||||
SetMainCallback2(CB2_ContestPainting);
|
||||
gMain.savedCallback = ShowContestWinnerCleanup;
|
||||
}
|
||||
|
||||
void SetLinkContestPlayerGfx(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
int version = (u8)gLinkPlayers[i].version;
|
||||
if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
|
||||
{
|
||||
if (gLinkPlayers[i].gender == MALE)
|
||||
gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_BRENDAN;
|
||||
else
|
||||
gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_MAY;
|
||||
}
|
||||
}
|
||||
|
||||
VarSet(VAR_OBJ_GFX_ID_0, gContestMons[0].trainerGfxId);
|
||||
VarSet(VAR_OBJ_GFX_ID_1, gContestMons[1].trainerGfxId);
|
||||
VarSet(VAR_OBJ_GFX_ID_2, gContestMons[2].trainerGfxId);
|
||||
VarSet(VAR_OBJ_GFX_ID_3, gContestMons[3].trainerGfxId);
|
||||
}
|
||||
}
|
||||
|
||||
void LoadLinkContestPlayerPalettes(void)
|
||||
{
|
||||
int i;
|
||||
u8 objectEventId;
|
||||
int version;
|
||||
struct Sprite *sprite;
|
||||
|
||||
gReservedSpritePaletteCount = 12;
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
objectEventId = GetObjectEventIdByLocalIdAndMap(gUnknown_0858D8EC[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
|
||||
sprite = &gSprites[gObjectEvents[objectEventId].spriteId];
|
||||
sprite->oam.paletteNum = 6 + i;
|
||||
version = (u8)gLinkPlayers[i].version;
|
||||
if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
|
||||
{
|
||||
if (gLinkPlayers[i].gender == MALE)
|
||||
LoadPalette(gObjectEventPalette33, 0x160 + i * 0x10, 0x20);
|
||||
else
|
||||
LoadPalette(gObjectEventPalette34, 0x160 + i * 0x10, 0x20);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkPlayers[i].gender == MALE)
|
||||
LoadPalette(gObjectEventPalette8, 0x160 + i * 0x10, 0x20);
|
||||
else
|
||||
LoadPalette(gObjectEventPalette17, 0x160 + i * 0x10, 0x20);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u8 GiveMonArtistRibbon(void)
|
||||
{
|
||||
u8 hasArtistRibbon;
|
||||
|
||||
hasArtistRibbon = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
|
||||
if (!hasArtistRibbon
|
||||
&& gContestFinalStandings[gContestPlayerMonIndex] == 0
|
||||
&& gSpecialVar_ContestRank == CONTEST_RANK_MASTER
|
||||
&& gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
|
||||
{
|
||||
hasArtistRibbon = 1;
|
||||
SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon);
|
||||
if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
|
||||
TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
|
||||
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 IsContestDebugActive(void)
|
||||
{
|
||||
return FALSE; // gUnknown_0203856C in pokeruby
|
||||
}
|
||||
|
||||
void ShowContestEntryMonPic(void)
|
||||
{
|
||||
const struct CompressedSpritePalette *palette;
|
||||
u32 personality, otId;
|
||||
u16 species;
|
||||
u8 spriteId;
|
||||
u8 taskId;
|
||||
u8 left, top;
|
||||
|
||||
if (FindTaskIdByFunc(Task_ShowContestEntryMonPic) == 0xFF)
|
||||
{
|
||||
AllocateMonSpritesGfx();
|
||||
left = 10;
|
||||
top = 3;
|
||||
species = gContestMons[gSpecialVar_0x8006].species;
|
||||
personality = gContestMons[gSpecialVar_0x8006].personality;
|
||||
otId = gContestMons[gSpecialVar_0x8006].otId;
|
||||
taskId = CreateTask(Task_ShowContestEntryMonPic, 0x50);
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[1] = species;
|
||||
if (gSpecialVar_0x8006 == gContestPlayerMonIndex)
|
||||
HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
|
||||
else
|
||||
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
|
||||
|
||||
palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
|
||||
LoadCompressedSpritePalette(palette);
|
||||
SetMultiuseSpriteTemplateToPokemon(species, 1);
|
||||
gMultiuseSpriteTemplate.paletteTag = palette->tag;
|
||||
spriteId = CreateSprite(&gMultiuseSpriteTemplate, (left + 1) * 8 + 32, (top * 8) + 40, 0);
|
||||
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER))
|
||||
DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
|
||||
}
|
||||
|
||||
gTasks[taskId].data[2] = spriteId;
|
||||
gTasks[taskId].data[3] = left;
|
||||
gTasks[taskId].data[4] = top;
|
||||
gSprites[spriteId].callback = SpriteCallbackDummy;
|
||||
gSprites[spriteId].oam.priority = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void HideContestEntryMonPic(void)
|
||||
{
|
||||
u8 taskId = FindTaskIdByFunc(Task_ShowContestEntryMonPic);
|
||||
if (taskId != 0xFF)
|
||||
{
|
||||
gTasks[taskId].data[0]++;
|
||||
FreeMonSpritesGfx();
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_ShowContestEntryMonPic(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
struct Sprite *sprite;
|
||||
|
||||
switch(task->data[0])
|
||||
{
|
||||
case 0:
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
task->data[5] = CreateWindowFromRect(10, 3, 8, 8);
|
||||
SetStandardWindowBorderStyle(task->data[5], 1);
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
case 3:
|
||||
sprite = &gSprites[task->data[2]];
|
||||
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
|
||||
|
||||
if(sprite->oam.affineMode)
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
|
||||
DestroySprite(sprite);
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 4:
|
||||
ClearToTransparentAndRemoveWindow(gTasks[taskId].data[5]);
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptGetMultiplayerId(void)
|
||||
{
|
||||
if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
&& gNumLinkContestPlayers == CONTESTANT_COUNT
|
||||
&& !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
|
||||
gSpecialVar_Result = GetMultiplayerId();
|
||||
else
|
||||
gSpecialVar_Result = MAX_LINK_PLAYERS;
|
||||
}
|
||||
|
||||
void ScriptRandom(void)
|
||||
{
|
||||
u16 random;
|
||||
u16 *scriptPtr;
|
||||
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
|
||||
random = gContestRngValue >> 16;
|
||||
scriptPtr = &gSpecialVar_Result;
|
||||
}
|
||||
else
|
||||
{
|
||||
scriptPtr = &gSpecialVar_Result;
|
||||
random = Random();
|
||||
}
|
||||
*scriptPtr = random % *scriptPtr;
|
||||
}
|
||||
|
||||
u16 GetContestRand(void)
|
||||
{
|
||||
gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
|
||||
return gContestRngValue >> 16;
|
||||
}
|
||||
|
||||
bool8 LinkContestWaitForConnection(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
{
|
||||
CreateTask(Task_LinkContestWaitForConnection, 5);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_LinkContestWaitForConnection(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
sub_800ADF8();
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
default:
|
||||
if (IsLinkTaskFinished() == 1)
|
||||
{
|
||||
EnableBothScriptContexts();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void LinkContestTryShowWirelessIndicator(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
LoadWirelessStatusIndicatorSpriteGfx();
|
||||
CreateWirelessStatusIndicatorSprite(8, 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LinkContestTryHideWirelessIndicator(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers)
|
||||
DestroyWirelessStatusIndicatorSprite();
|
||||
}
|
||||
}
|
||||
|
||||
bool8 IsContestWithRSPlayer(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void ClearLinkContestFlags(void)
|
||||
{
|
||||
gLinkContestFlags = 0;
|
||||
}
|
||||
|
||||
bool8 IsWirelessContest(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void HealPlayerParty(void)
|
||||
{
|
||||
u8 i, j;
|
||||
u8 ppBonuses;
|
||||
u8 arg[4];
|
||||
|
||||
// restore HP.
|
||||
for(i = 0; i < gPlayerPartyCount; i++)
|
||||
{
|
||||
u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
|
||||
arg[0] = maxHP;
|
||||
arg[1] = maxHP >> 8;
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_HP, arg);
|
||||
ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES);
|
||||
|
||||
// restore PP.
|
||||
for(j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j);
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg);
|
||||
}
|
||||
|
||||
// since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData.
|
||||
arg[0] = 0;
|
||||
arg[1] = 0;
|
||||
arg[2] = 0;
|
||||
arg[3] = 0;
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg);
|
||||
}
|
||||
}
|
||||
|
||||
u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3)
|
||||
{
|
||||
u16 nationalDexNum;
|
||||
int sentToPc;
|
||||
u8 heldItem[2];
|
||||
struct Pokemon mon;
|
||||
|
||||
CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
heldItem[0] = item;
|
||||
heldItem[1] = item >> 8;
|
||||
SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem);
|
||||
sentToPc = GiveMonToPlayer(&mon);
|
||||
nationalDexNum = SpeciesToNationalPokedexNum(species);
|
||||
|
||||
switch(sentToPc)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
|
||||
GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
|
||||
break;
|
||||
}
|
||||
return sentToPc;
|
||||
}
|
||||
|
||||
u8 ScriptGiveEgg(u16 species)
|
||||
{
|
||||
struct Pokemon mon;
|
||||
u8 isEgg;
|
||||
|
||||
CreateEgg(&mon, species, TRUE);
|
||||
isEgg = TRUE;
|
||||
SetMonData(&mon, MON_DATA_IS_EGG, &isEgg);
|
||||
|
||||
return GiveMonToPlayer(&mon);
|
||||
}
|
||||
|
||||
void HasEnoughMonsForDoubleBattle(void)
|
||||
{
|
||||
switch (GetMonsStateToDoubles())
|
||||
{
|
||||
case PLAYER_HAS_TWO_USABLE_MONS:
|
||||
gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS;
|
||||
break;
|
||||
case PLAYER_HAS_ONE_MON:
|
||||
gSpecialVar_Result = PLAYER_HAS_ONE_MON;
|
||||
break;
|
||||
case PLAYER_HAS_ONE_USABLE_MON:
|
||||
gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 CheckPartyMonHasHeldItem(u16 item)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
|
||||
if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item)
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 DoesPartyHaveEnigmaBerry(void)
|
||||
{
|
||||
bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
|
||||
if (hasItem == TRUE)
|
||||
GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1);
|
||||
|
||||
return hasItem;
|
||||
}
|
||||
|
||||
void CreateScriptedWildMon(u16 species, u8 level, u16 item)
|
||||
{
|
||||
u8 heldItem[2];
|
||||
|
||||
ZeroEnemyPartyMons();
|
||||
CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
if (item)
|
||||
{
|
||||
heldItem[0] = item;
|
||||
heldItem[1] = item >> 8;
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
|
||||
{
|
||||
if (monIndex > PARTY_SIZE)
|
||||
monIndex = gPlayerPartyCount - 1;
|
||||
|
||||
SetMonMoveSlot(&gPlayerParty[monIndex], move, slot);
|
||||
}
|
||||
|
||||
// Note: When control returns to the event script, gSpecialVar_Result will be
|
||||
// TRUE if the party selection was successful.
|
||||
void ChooseHalfPartyForBattle(void)
|
||||
{
|
||||
gMain.savedCallback = CB2_ReturnFromChooseHalfParty;
|
||||
VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER);
|
||||
InitChooseHalfPartyForBattle(0);
|
||||
}
|
||||
|
||||
static void CB2_ReturnFromChooseHalfParty(void)
|
||||
{
|
||||
switch (gSelectedOrderFromParty[0])
|
||||
{
|
||||
case 0:
|
||||
gSpecialVar_Result = FALSE;
|
||||
break;
|
||||
default:
|
||||
gSpecialVar_Result = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
void ChoosePartyForBattleFrontier(void)
|
||||
{
|
||||
gMain.savedCallback = CB2_ReturnFromChooseBattleFrontierParty;
|
||||
InitChooseHalfPartyForBattle(gSpecialVar_0x8004 + 1);
|
||||
}
|
||||
|
||||
static void CB2_ReturnFromChooseBattleFrontierParty(void)
|
||||
{
|
||||
switch (gSelectedOrderFromParty[0])
|
||||
{
|
||||
case 0:
|
||||
gSpecialVar_Result = FALSE;
|
||||
break;
|
||||
default:
|
||||
gSpecialVar_Result = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
void ReducePlayerPartyToSelectedMons(void)
|
||||
{
|
||||
struct Pokemon party[MAX_FRONTIER_PARTY_SIZE];
|
||||
int i;
|
||||
|
||||
CpuFill32(0, party, sizeof party);
|
||||
|
||||
// copy the selected pokemon according to the order.
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
|
||||
party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal
|
||||
|
||||
CpuFill32(0, gPlayerParty, sizeof gPlayerParty);
|
||||
|
||||
// overwrite the first 4 with the order copied to.
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
gPlayerParty[i] = party[i];
|
||||
|
||||
CalculatePlayerPartyCount();
|
||||
}
|
||||
+23
-23
@@ -246,9 +246,9 @@ static bool8 SendLinkData(const void *linkData, u32 size)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80771AC(u8 a0)
|
||||
static void RequestLinkData(u8 type)
|
||||
{
|
||||
sub_800A4D8(a0);
|
||||
SendBlockRequest(type);
|
||||
}
|
||||
|
||||
static bool32 sub_80771BC(void)
|
||||
@@ -295,9 +295,9 @@ static bool32 IsWirelessTrade(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_8077288(u8 unused)
|
||||
static void SetTradeLinkStandbyCallback(u8 unused)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
}
|
||||
|
||||
static bool32 _IsLinkTaskFinished(void)
|
||||
@@ -445,7 +445,7 @@ static void CB2_CreateTradeMenu(void)
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
sub_801048C(TRUE);
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -825,7 +825,7 @@ static void LinkTradeWaitForFade(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800ABF4(32);
|
||||
SetCloseLinkCallbackAndType(32);
|
||||
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
|
||||
}
|
||||
}
|
||||
@@ -983,7 +983,7 @@ static bool8 BufferTradeParties(void)
|
||||
case 3:
|
||||
if (id == 0)
|
||||
{
|
||||
sub_80771AC(1);
|
||||
RequestLinkData(1);
|
||||
}
|
||||
sTradeMenuData->bufferPartyState++;
|
||||
break;
|
||||
@@ -1002,7 +1002,7 @@ static bool8 BufferTradeParties(void)
|
||||
case 7:
|
||||
if (id == 0)
|
||||
{
|
||||
sub_80771AC(1);
|
||||
RequestLinkData(1);
|
||||
}
|
||||
sTradeMenuData->bufferPartyState++;
|
||||
break;
|
||||
@@ -1021,7 +1021,7 @@ static bool8 BufferTradeParties(void)
|
||||
case 11:
|
||||
if (id == 0)
|
||||
{
|
||||
sub_80771AC(1);
|
||||
RequestLinkData(1);
|
||||
}
|
||||
sTradeMenuData->bufferPartyState++;
|
||||
break;
|
||||
@@ -1040,7 +1040,7 @@ static bool8 BufferTradeParties(void)
|
||||
case 15:
|
||||
if (id == 0)
|
||||
{
|
||||
sub_80771AC(3);
|
||||
RequestLinkData(3);
|
||||
}
|
||||
sTradeMenuData->bufferPartyState++;
|
||||
break;
|
||||
@@ -1059,7 +1059,7 @@ static bool8 BufferTradeParties(void)
|
||||
case 19:
|
||||
if (id == 0)
|
||||
{
|
||||
sub_80771AC(4);
|
||||
RequestLinkData(4);
|
||||
}
|
||||
sTradeMenuData->bufferPartyState++;
|
||||
break;
|
||||
@@ -1652,11 +1652,11 @@ static void CancelTrade_1(void)
|
||||
{
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800ABF4(12);
|
||||
SetCloseLinkCallbackAndType(12);
|
||||
}
|
||||
|
||||
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_2;
|
||||
@@ -1692,7 +1692,7 @@ static void LinkTradeWaitForQueue(void)
|
||||
{
|
||||
if (!sub_801048C(FALSE) && GetNumQueuedActions() == 0)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
|
||||
}
|
||||
}
|
||||
@@ -4566,7 +4566,7 @@ static void CB2_SaveAndEndTrade(void)
|
||||
DrawTextOnTradeWindow(0, gStringVar4, 0);
|
||||
break;
|
||||
case 1:
|
||||
sub_8077288(0);
|
||||
SetTradeLinkStandbyCallback(0);
|
||||
gMain.state = 100;
|
||||
sTradeData->timer = 0;
|
||||
break;
|
||||
@@ -4644,7 +4644,7 @@ static void CB2_SaveAndEndTrade(void)
|
||||
case 41:
|
||||
if (sTradeData->timer == 0)
|
||||
{
|
||||
sub_8077288(1);
|
||||
SetTradeLinkStandbyCallback(1);
|
||||
gMain.state = 42;
|
||||
}
|
||||
else
|
||||
@@ -4663,7 +4663,7 @@ static void CB2_SaveAndEndTrade(void)
|
||||
if (++sTradeData->timer > 60)
|
||||
{
|
||||
gMain.state++;
|
||||
sub_8077288(2);
|
||||
SetTradeLinkStandbyCallback(2);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
@@ -4685,11 +4685,11 @@ static void CB2_SaveAndEndTrade(void)
|
||||
{
|
||||
if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu)
|
||||
{
|
||||
sub_8077288(3);
|
||||
SetTradeLinkStandbyCallback(3);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
}
|
||||
gMain.state++;
|
||||
}
|
||||
@@ -4902,7 +4902,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
|
||||
DrawTextOnTradeWindow(0, gStringVar4, 0);
|
||||
break;
|
||||
case 1:
|
||||
sub_8077288(0);
|
||||
SetTradeLinkStandbyCallback(0);
|
||||
gMain.state = 2;
|
||||
sTradeData->timer = 0;
|
||||
break;
|
||||
@@ -4950,7 +4950,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
|
||||
case 7:
|
||||
if (sTradeData->timer == 0)
|
||||
{
|
||||
sub_8077288(1);
|
||||
SetTradeLinkStandbyCallback(1);
|
||||
gMain.state = 8;
|
||||
}
|
||||
else
|
||||
@@ -4969,7 +4969,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
|
||||
if (++sTradeData->timer > 60)
|
||||
{
|
||||
gMain.state++;
|
||||
sub_8077288(2);
|
||||
SetTradeLinkStandbyCallback(2);
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
@@ -4983,7 +4983,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
|
||||
case 11:
|
||||
if (!gPaletteFade.active && IsBGMStopped() == TRUE)
|
||||
{
|
||||
sub_8077288(3);
|
||||
SetTradeLinkStandbyCallback(3);
|
||||
gMain.state = 12;
|
||||
}
|
||||
break;
|
||||
|
||||
+2
-2
@@ -25,7 +25,7 @@
|
||||
#include "graphics.h"
|
||||
#include "pokemon_icon.h"
|
||||
#include "trainer_pokemon_sprites.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "contest_util.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/game_stat.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
@@ -497,7 +497,7 @@ static void Task_TrainerCard(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case STATE_WAIT_LINK_PARTNER:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
DrawDialogueFrame(0, 1);
|
||||
AddTextPrinterParameterized(0, 1, gText_WaitingTrainerFinishReading, 0, 1, 255, 0);
|
||||
CopyWindowToVram(0, 3);
|
||||
|
||||
@@ -387,39 +387,39 @@ static const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = {
|
||||
};
|
||||
|
||||
static const u8 *const sTVContestLiveUpdatesTextGroup[] = {
|
||||
gTVContestLiveUpdatesText00,
|
||||
gTVContestLiveUpdatesText01,
|
||||
gTVContestLiveUpdatesText02,
|
||||
gTVContestLiveUpdatesText03,
|
||||
gTVContestLiveUpdatesText04,
|
||||
gTVContestLiveUpdatesText05,
|
||||
gTVContestLiveUpdatesText06,
|
||||
gTVContestLiveUpdatesText07,
|
||||
gTVContestLiveUpdatesText08,
|
||||
gTVContestLiveUpdatesText09,
|
||||
gTVContestLiveUpdatesText10,
|
||||
gTVContestLiveUpdatesText11,
|
||||
gTVContestLiveUpdatesText12,
|
||||
gTVContestLiveUpdatesText13,
|
||||
gTVContestLiveUpdatesText14,
|
||||
gTVContestLiveUpdatesText15,
|
||||
gTVContestLiveUpdatesText16,
|
||||
gTVContestLiveUpdatesText17,
|
||||
gTVContestLiveUpdatesText18,
|
||||
gTVContestLiveUpdatesText19,
|
||||
gTVContestLiveUpdatesText20,
|
||||
gTVContestLiveUpdatesText21,
|
||||
gTVContestLiveUpdatesText22,
|
||||
gTVContestLiveUpdatesText23,
|
||||
gTVContestLiveUpdatesText24,
|
||||
gTVContestLiveUpdatesText25,
|
||||
gTVContestLiveUpdatesText26,
|
||||
gTVContestLiveUpdatesText27,
|
||||
gTVContestLiveUpdatesText28,
|
||||
gTVContestLiveUpdatesText29,
|
||||
gTVContestLiveUpdatesText30,
|
||||
gTVContestLiveUpdatesText31,
|
||||
gTVContestLiveUpdatesText32
|
||||
[CONTESTLIVE_STATE_INTRO] = ContestLiveUpdates_Text_Intro,
|
||||
[CONTESTLIVE_STATE_WON_BOTH_ROUNDS] = ContestLiveUpdates_Text_WonBothRounds,
|
||||
[CONTESTLIVE_STATE_BETTER_ROUND2] = ContestLiveUpdates_Text_BetterRound2,
|
||||
[CONTESTLIVE_STATE_EQUAL_ROUNDS] = ContestLiveUpdates_Text_EqualRounds,
|
||||
[CONTESTLIVE_STATE_BETTER_ROUND1] = ContestLiveUpdates_Text_BetterRound1,
|
||||
[CONTESTLIVE_STATE_GOT_NERVOUS] = ContestLiveUpdates_Text_GotNervous,
|
||||
[CONTESTLIVE_STATE_STARTLED_OTHER] = ContestLiveUpdates_Text_StartledFoes,
|
||||
[CONTESTLIVE_STATE_USED_COMBO] = ContestLiveUpdates_Text_UsedCombo,
|
||||
[CONTESTLIVE_STATE_EXCITING_APPEAL] = ContestLiveUpdates_Text_ExcitingAppeal,
|
||||
[CONTESTLIVE_STATE_COOL] = ContestLiveUpdates_Text_WasCool,
|
||||
[CONTESTLIVE_STATE_BEAUTIFUL] = ContestLiveUpdates_Text_WasBeautiful,
|
||||
[CONTESTLIVE_STATE_CUTE] = ContestLiveUpdates_Text_WasCute,
|
||||
[CONTESTLIVE_STATE_SMART] = ContestLiveUpdates_Text_WasSmart,
|
||||
[CONTESTLIVE_STATE_TOUGH] = ContestLiveUpdates_Text_WasTough,
|
||||
[CONTESTLIVE_STATE_VERY_EXCITING_APPEAL] = ContestLiveUpdates_Text_VeryExcitingAppeal,
|
||||
[CONTESTLIVE_STATE_VERY_COOL] = ContestLiveUpdates_Text_VeryCool,
|
||||
[CONTESTLIVE_STATE_VERY_BEAUTIFUL] = ContestLiveUpdates_Text_VeryBeautiful,
|
||||
[CONTESTLIVE_STATE_VERY_CUTE] = ContestLiveUpdates_Text_VeryCute,
|
||||
[CONTESTLIVE_STATE_VERY_SMART] = ContestLiveUpdates_Text_VerySmart,
|
||||
[CONTESTLIVE_STATE_VERY_TOUGH] = ContestLiveUpdates_Text_VeryTough,
|
||||
[CONTESTLIVE_STATE_TOOK_BREAK] = ContestLiveUpdates_Text_TookBreak,
|
||||
[CONTESTLIVE_STATE_GOT_STARTLED] = ContestLiveUpdates_Text_GotStartled,
|
||||
[CONTESTLIVE_STATE_USED_MOVE] = ContestLiveUpdates_Text_MoveWonderful,
|
||||
[CONTESTLIVE_STATE_TALK_ABOUT_LOSER] = ContestLiveUpdates_Text_TalkAboutAnotherMon,
|
||||
[CONTESTLIVE_STATE_NO_APPEALS] = ContestLiveUpdates_Text_FailedToAppeal,
|
||||
[CONTESTLIVE_STATE_LAST_BOTH] = ContestLiveUpdates_Text_LastInBothRounds,
|
||||
[CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH] = ContestLiveUpdates_Text_NotExcitingEnough,
|
||||
[CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN] = ContestLiveUpdates_Text_LostAfterWinningRound1,
|
||||
[CONTESTLIVE_STATE_NO_EXCITING_APPEALS] = ContestLiveUpdates_Text_NeverExciting,
|
||||
[CONTESTLIVE_STATE_LOST_SMALL_MARGIN] = ContestLiveUpdates_Text_LostBySmallMargin,
|
||||
[CONTESTLIVE_STATE_REPEATED_APPEALS] = ContestLiveUpdates_Text_RepeatedAppeals,
|
||||
[CONTESTLIVE_STATE_LOST] = ContestLiveUpdates_Text_ValiantEffortButLost,
|
||||
[CONTESTLIVE_STATE_OUTRO] = ContestLiveUpdates_Text_Outro
|
||||
};
|
||||
|
||||
static const u8 *const sTVPokemonBattleUpdateTextGroup[] = {
|
||||
@@ -1268,19 +1268,19 @@ static void InterviewAfter_ContestLiveUpdates(void)
|
||||
show2 = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
|
||||
show2->contestLiveUpdates.kind = TVSHOW_CONTEST_LIVE_UPDATES;
|
||||
show2->contestLiveUpdates.active = TRUE;
|
||||
StringCopy(show2->contestLiveUpdates.playerName, gSaveBlock2Ptr->playerName);
|
||||
StringCopy(show2->contestLiveUpdates.winningTrainerName, gSaveBlock2Ptr->playerName); // Show only begins running if player won, so always load players name
|
||||
show2->contestLiveUpdates.category = gSpecialVar_ContestCategory;
|
||||
show2->contestLiveUpdates.species = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL);
|
||||
show2->contestLiveUpdates.winningSpecies = show->contestLiveUpdates.winningSpecies;
|
||||
show2->contestLiveUpdates.appealFlags2 = show->contestLiveUpdates.appealFlags2;
|
||||
show2->contestLiveUpdates.round1Rank = show->contestLiveUpdates.round1Rank;
|
||||
show2->contestLiveUpdates.round2Rank = show->contestLiveUpdates.round2Rank;
|
||||
show2->contestLiveUpdates.winningSpecies = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL);
|
||||
show2->contestLiveUpdates.losingSpecies = show->contestLiveUpdates.losingSpecies;
|
||||
show2->contestLiveUpdates.loserAppealFlag = show->contestLiveUpdates.loserAppealFlag;
|
||||
show2->contestLiveUpdates.round1Placing = show->contestLiveUpdates.round1Placing;
|
||||
show2->contestLiveUpdates.round2Placing = show->contestLiveUpdates.round2Placing;
|
||||
show2->contestLiveUpdates.move = show->contestLiveUpdates.move;
|
||||
show2->contestLiveUpdates.appealFlags1 = show->contestLiveUpdates.appealFlags1;
|
||||
StringCopy(show2->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerName);
|
||||
show2->contestLiveUpdates.winnerAppealFlag = show->contestLiveUpdates.winnerAppealFlag;
|
||||
StringCopy(show2->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerName);
|
||||
tv_store_id_2x(show2);
|
||||
show2->contestLiveUpdates.language = gGameLanguage;
|
||||
show2->contestLiveUpdates.winningTrainerLanguage = show->contestLiveUpdates.winningTrainerLanguage;
|
||||
show2->contestLiveUpdates.winningTrainerLanguage = gGameLanguage;
|
||||
show2->contestLiveUpdates.losingTrainerLanguage = show->contestLiveUpdates.losingTrainerLanguage;
|
||||
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX);
|
||||
}
|
||||
}
|
||||
@@ -1399,7 +1399,7 @@ void PutFanClubSpecialOnTheAir(void)
|
||||
}
|
||||
}
|
||||
|
||||
void ContestLiveUpdates_BeforeInterview_1(u8 a0)
|
||||
void ContestLiveUpdates_Init(u8 round1Placing)
|
||||
{
|
||||
TVShow *show;
|
||||
|
||||
@@ -1408,12 +1408,12 @@ void ContestLiveUpdates_BeforeInterview_1(u8 a0)
|
||||
if (sCurTVShowSlot != -1)
|
||||
{
|
||||
show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
|
||||
show->contestLiveUpdates.round1Rank = a0;
|
||||
show->contestLiveUpdates.round1Placing = round1Placing;
|
||||
show->contestLiveUpdates.kind = TVSHOW_CONTEST_LIVE_UPDATES;
|
||||
}
|
||||
}
|
||||
|
||||
void ContestLiveUpdates_BeforeInterview_2(u8 a0)
|
||||
void ContestLiveUpdates_SetRound2Placing(u8 round2Placing)
|
||||
{
|
||||
TVShow *show;
|
||||
|
||||
@@ -1421,11 +1421,11 @@ void ContestLiveUpdates_BeforeInterview_2(u8 a0)
|
||||
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
|
||||
if (sCurTVShowSlot != -1)
|
||||
{
|
||||
show->contestLiveUpdates.round2Rank = a0;
|
||||
show->contestLiveUpdates.round2Placing = round2Placing;
|
||||
}
|
||||
}
|
||||
|
||||
void ContestLiveUpdates_BeforeInterview_3(u8 a0)
|
||||
void ContestLiveUpdates_SetWinnerAppealFlag(u8 flag)
|
||||
{
|
||||
TVShow *show;
|
||||
|
||||
@@ -1433,11 +1433,11 @@ void ContestLiveUpdates_BeforeInterview_3(u8 a0)
|
||||
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
|
||||
if (sCurTVShowSlot != -1)
|
||||
{
|
||||
show->contestLiveUpdates.appealFlags1 = a0;
|
||||
show->contestLiveUpdates.winnerAppealFlag = flag;
|
||||
}
|
||||
}
|
||||
|
||||
void ContestLiveUpdates_BeforeInterview_4(u16 a0)
|
||||
void ContestLiveUpdates_SetWinnerMoveUsed(u16 move)
|
||||
{
|
||||
TVShow *show;
|
||||
|
||||
@@ -1445,11 +1445,11 @@ void ContestLiveUpdates_BeforeInterview_4(u16 a0)
|
||||
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
|
||||
if (sCurTVShowSlot != -1)
|
||||
{
|
||||
show->contestLiveUpdates.move = a0;
|
||||
show->contestLiveUpdates.move = move;
|
||||
}
|
||||
}
|
||||
|
||||
void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1)
|
||||
void ContestLiveUpdates_SetLoserData(u8 flag, u8 loser)
|
||||
{
|
||||
TVShow *show;
|
||||
|
||||
@@ -1457,21 +1457,21 @@ void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1)
|
||||
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
|
||||
if (sCurTVShowSlot != -1)
|
||||
{
|
||||
show->contestLiveUpdates.winningSpecies = gContestMons[a1].species;
|
||||
StringCopy(show->contestLiveUpdates.winningTrainerName, gContestMons[a1].trainerName);
|
||||
StripExtCtrlCodes(show->contestLiveUpdates.winningTrainerName);
|
||||
show->contestLiveUpdates.appealFlags2 = a0;
|
||||
if (a1 + 1 > gNumLinkContestPlayers)
|
||||
show->contestLiveUpdates.losingSpecies = gContestMons[loser].species;
|
||||
StringCopy(show->contestLiveUpdates.losingTrainerName, gContestMons[loser].trainerName);
|
||||
StripExtCtrlCodes(show->contestLiveUpdates.losingTrainerName);
|
||||
show->contestLiveUpdates.loserAppealFlag = flag;
|
||||
if (loser + 1 > gNumLinkContestPlayers)
|
||||
{
|
||||
show->contestLiveUpdates.winningTrainerLanguage = gLinkPlayers[0].language;
|
||||
show->contestLiveUpdates.losingTrainerLanguage = gLinkPlayers[0].language;
|
||||
}
|
||||
else if (gGameLanguage == LANGUAGE_JAPANESE || gLinkPlayers[a1].language == LANGUAGE_JAPANESE)
|
||||
else if (gGameLanguage == LANGUAGE_JAPANESE || gLinkPlayers[loser].language == LANGUAGE_JAPANESE)
|
||||
{
|
||||
show->contestLiveUpdates.winningTrainerLanguage = LANGUAGE_JAPANESE;
|
||||
show->contestLiveUpdates.losingTrainerLanguage = LANGUAGE_JAPANESE;
|
||||
}
|
||||
else
|
||||
{
|
||||
show->contestLiveUpdates.winningTrainerLanguage = gLinkPlayers[a1].language;
|
||||
show->contestLiveUpdates.losingTrainerLanguage = gLinkPlayers[loser].language;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3804,10 +3804,10 @@ static void sub_80F0708(void) // FIXME: register allocation shenanigans
|
||||
switch (gSaveBlock1Ptr->tvShows[i].common.kind)
|
||||
{
|
||||
case TVSHOW_CONTEST_LIVE_UPDATES:
|
||||
j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.species;
|
||||
sub_80F0B24(j, i);
|
||||
j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.winningSpecies;
|
||||
sub_80F0B24(j, i);
|
||||
j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.losingSpecies;
|
||||
sub_80F0B24(j, i);
|
||||
break;
|
||||
case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
|
||||
break;
|
||||
@@ -4301,8 +4301,8 @@ static void sub_80F12A4(TVShow *shows)
|
||||
curShow->bravoTrainerTower.pokemonNameLanguage = TV_GetStringLanguage(curShow->bravoTrainerTower.pokemonName);
|
||||
break;
|
||||
case TVSHOW_CONTEST_LIVE_UPDATES:
|
||||
curShow->contestLiveUpdates.language = TV_GetStringLanguage(curShow->contestLiveUpdates.playerName);
|
||||
curShow->contestLiveUpdates.winningTrainerLanguage = TV_GetStringLanguage(curShow->contestLiveUpdates.winningTrainerName);
|
||||
curShow->contestLiveUpdates.losingTrainerLanguage = TV_GetStringLanguage(curShow->contestLiveUpdates.losingTrainerName);
|
||||
break;
|
||||
case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
|
||||
curShow->threeCheers.language = TV_GetStringLanguage(curShow->threeCheers.playerName);
|
||||
@@ -5167,6 +5167,12 @@ static void DoTVShowPokemonNewsMassOutbreak(void)
|
||||
ShowFieldMessage(sTVMassOutbreakTextGroup[sTVShowState]);
|
||||
}
|
||||
|
||||
// TV Show that plays after a Link Contest.
|
||||
// First talks about the winner and something they did, then about a losing player and something they did
|
||||
// The show is only generated when the player wins, but can be record mixed to other games
|
||||
// Each state buffers any needed data for a message to print from sTVContestLiveUpdatesTextGroup
|
||||
// Many cases in this function are identical, and its size can be reduced a good deal by collapsing them
|
||||
// Can't get this to match while collapsing them though
|
||||
static void DoTVShowPokemonContestLiveUpdates(void)
|
||||
{
|
||||
TVShow *show;
|
||||
@@ -5177,339 +5183,338 @@ static void DoTVShowPokemonContestLiveUpdates(void)
|
||||
state = sTVShowState;
|
||||
switch (state)
|
||||
{
|
||||
case 0:
|
||||
BufferContestName(gStringVar1, show->contestLiveUpdates.category);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
|
||||
if (show->contestLiveUpdates.round1Rank == show->contestLiveUpdates.round2Rank)
|
||||
case CONTESTLIVE_STATE_INTRO:
|
||||
BufferContestName(gStringVar1, show->contestLiveUpdates.category);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
if (show->contestLiveUpdates.round1Placing == show->contestLiveUpdates.round2Placing)
|
||||
{
|
||||
if (show->contestLiveUpdates.round1Placing == 0)
|
||||
{
|
||||
if (show->contestLiveUpdates.round1Rank == 0)
|
||||
{
|
||||
sTVShowState = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sTVShowState = 3;
|
||||
}
|
||||
}
|
||||
else if (show->contestLiveUpdates.round1Rank > show->contestLiveUpdates.round2Rank)
|
||||
{
|
||||
sTVShowState = 2;
|
||||
sTVShowState = CONTESTLIVE_STATE_WON_BOTH_ROUNDS;
|
||||
}
|
||||
else
|
||||
{
|
||||
sTVShowState = 4;
|
||||
sTVShowState = CONTESTLIVE_STATE_EQUAL_ROUNDS;
|
||||
}
|
||||
}
|
||||
else if (show->contestLiveUpdates.round1Placing > show->contestLiveUpdates.round2Placing)
|
||||
{
|
||||
sTVShowState = CONTESTLIVE_STATE_BETTER_ROUND2;
|
||||
}
|
||||
else
|
||||
{
|
||||
sTVShowState = CONTESTLIVE_STATE_BETTER_ROUND1;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_WON_BOTH_ROUNDS:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
switch (show->contestLiveUpdates.winnerAppealFlag)
|
||||
{
|
||||
case CONTESTLIVE_FLAG_EXCITING_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
|
||||
break;
|
||||
case 1:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
switch (show->contestLiveUpdates.appealFlags1)
|
||||
{
|
||||
case 0x01:
|
||||
sTVShowState = 8;
|
||||
break;
|
||||
case 0x02:
|
||||
sTVShowState = 5;
|
||||
break;
|
||||
case 0x04:
|
||||
sTVShowState = 14;
|
||||
break;
|
||||
case 0x08:
|
||||
sTVShowState = 7;
|
||||
break;
|
||||
case 0x10:
|
||||
sTVShowState = 6;
|
||||
break;
|
||||
case 0x20:
|
||||
sTVShowState = 20;
|
||||
break;
|
||||
case 0x40:
|
||||
sTVShowState = 21;
|
||||
break;
|
||||
case 0x80:
|
||||
sTVShowState = 22;
|
||||
break;
|
||||
}
|
||||
case CONTESTLIVE_FLAG_GOT_NERVOUS:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
|
||||
break;
|
||||
case 2:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
switch (show->contestLiveUpdates.appealFlags1)
|
||||
{
|
||||
case 0x01:
|
||||
sTVShowState = 8;
|
||||
break;
|
||||
case 0x02:
|
||||
sTVShowState = 5;
|
||||
break;
|
||||
case 0x04:
|
||||
sTVShowState = 14;
|
||||
break;
|
||||
case 0x08:
|
||||
sTVShowState = 7;
|
||||
break;
|
||||
case 0x10:
|
||||
sTVShowState = 6;
|
||||
break;
|
||||
case 0x20:
|
||||
sTVShowState = 20;
|
||||
break;
|
||||
case 0x40:
|
||||
sTVShowState = 21;
|
||||
break;
|
||||
case 0x80:
|
||||
sTVShowState = 22;
|
||||
break;
|
||||
}
|
||||
case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
|
||||
break;
|
||||
case 3:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
|
||||
switch (show->contestLiveUpdates.appealFlags1)
|
||||
{
|
||||
case 0x01:
|
||||
sTVShowState = 8;
|
||||
break;
|
||||
case 0x02:
|
||||
sTVShowState = 5;
|
||||
break;
|
||||
case 0x04:
|
||||
sTVShowState = 14;
|
||||
break;
|
||||
case 0x08:
|
||||
sTVShowState = 7;
|
||||
break;
|
||||
case 0x10:
|
||||
sTVShowState = 6;
|
||||
break;
|
||||
case 0x20:
|
||||
sTVShowState = 20;
|
||||
break;
|
||||
case 0x40:
|
||||
sTVShowState = 21;
|
||||
break;
|
||||
case 0x80:
|
||||
sTVShowState = 22;
|
||||
break;
|
||||
}
|
||||
case CONTESTLIVE_FLAG_USED_COMBO:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
|
||||
break;
|
||||
case 4:
|
||||
switch (show->contestLiveUpdates.category)
|
||||
{
|
||||
case 0:
|
||||
StringCopy(gStringVar1, gText_Cool);
|
||||
break;
|
||||
case 1:
|
||||
StringCopy(gStringVar1, gText_Beauty);
|
||||
break;
|
||||
case 2:
|
||||
StringCopy(gStringVar1, gText_Cute);
|
||||
break;
|
||||
case 3:
|
||||
StringCopy(gStringVar1, gText_Smart);
|
||||
break;
|
||||
case 4:
|
||||
StringCopy(gStringVar1, gText_Tough);
|
||||
break;
|
||||
}
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
switch (show->contestLiveUpdates.appealFlags1)
|
||||
{
|
||||
case 0x01:
|
||||
sTVShowState = 8;
|
||||
break;
|
||||
case 0x02:
|
||||
sTVShowState = 5;
|
||||
break;
|
||||
case 0x04:
|
||||
sTVShowState = 14;
|
||||
break;
|
||||
case 0x08:
|
||||
sTVShowState = 7;
|
||||
break;
|
||||
case 0x10:
|
||||
sTVShowState = 6;
|
||||
break;
|
||||
case 0x20:
|
||||
sTVShowState = 20;
|
||||
break;
|
||||
case 0x40:
|
||||
sTVShowState = 21;
|
||||
break;
|
||||
case 0x80:
|
||||
sTVShowState = 22;
|
||||
break;
|
||||
}
|
||||
case CONTESTLIVE_FLAG_STARTLED_OTHER:
|
||||
sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
|
||||
break;
|
||||
case 5:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_SKIPPED_TURN:
|
||||
sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
|
||||
break;
|
||||
case 6:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_GOT_STARTLED:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
|
||||
break;
|
||||
case 7:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_MADE_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
|
||||
break;
|
||||
case 8:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
switch (show->contestLiveUpdates.category)
|
||||
{
|
||||
case 0:
|
||||
sTVShowState = 9;
|
||||
break;
|
||||
case 1:
|
||||
sTVShowState = 10;
|
||||
break;
|
||||
case 2:
|
||||
sTVShowState = 11;
|
||||
break;
|
||||
case 3:
|
||||
sTVShowState = 12;
|
||||
break;
|
||||
case 4:
|
||||
sTVShowState = 13;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_BETTER_ROUND2:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
switch (show->contestLiveUpdates.winnerAppealFlag)
|
||||
{
|
||||
case CONTESTLIVE_FLAG_EXCITING_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
|
||||
break;
|
||||
case 9:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_GOT_NERVOUS:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
|
||||
break;
|
||||
case 10:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
|
||||
break;
|
||||
case 11:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_USED_COMBO:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
|
||||
break;
|
||||
case 12:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_STARTLED_OTHER:
|
||||
sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
|
||||
break;
|
||||
case 13:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_SKIPPED_TURN:
|
||||
sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
|
||||
break;
|
||||
case 14:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
switch (show->contestLiveUpdates.category)
|
||||
{
|
||||
case 0:
|
||||
sTVShowState = 15;
|
||||
break;
|
||||
case 1:
|
||||
sTVShowState = 16;
|
||||
break;
|
||||
case 2:
|
||||
sTVShowState = 17;
|
||||
break;
|
||||
case 3:
|
||||
sTVShowState = 18;
|
||||
break;
|
||||
case 4:
|
||||
sTVShowState = 19;
|
||||
break;
|
||||
}
|
||||
case CONTESTLIVE_FLAG_GOT_STARTLED:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
|
||||
break;
|
||||
case 15:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_MADE_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
|
||||
break;
|
||||
case 16:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_EQUAL_ROUNDS:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
switch (show->contestLiveUpdates.winnerAppealFlag)
|
||||
{
|
||||
case CONTESTLIVE_FLAG_EXCITING_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
|
||||
break;
|
||||
case 17:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_GOT_NERVOUS:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
|
||||
break;
|
||||
case 18:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
|
||||
break;
|
||||
case 19:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_USED_COMBO:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
|
||||
break;
|
||||
case 20:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_STARTLED_OTHER:
|
||||
sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
|
||||
break;
|
||||
case 21:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_SKIPPED_TURN:
|
||||
sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
|
||||
break;
|
||||
case 22:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
StringCopy(gStringVar3, gMoveNames[show->contestLiveUpdates.move]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_GOT_STARTLED:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
|
||||
break;
|
||||
case 23:
|
||||
StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
TVShowConvertInternationalString(gStringVar2, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
StringCopy(gStringVar3, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
switch (show->contestLiveUpdates.appealFlags2)
|
||||
{
|
||||
case 0x01:
|
||||
sTVShowState = 31;
|
||||
break;
|
||||
case 0x02:
|
||||
sTVShowState = 30;
|
||||
break;
|
||||
case 0x04:
|
||||
sTVShowState = 29;
|
||||
break;
|
||||
case 0x08:
|
||||
sTVShowState = 28;
|
||||
break;
|
||||
case 0x10:
|
||||
sTVShowState = 27;
|
||||
break;
|
||||
case 0x20:
|
||||
sTVShowState = 26;
|
||||
break;
|
||||
case 0x40:
|
||||
sTVShowState = 25;
|
||||
break;
|
||||
case 0x80:
|
||||
sTVShowState = 24;
|
||||
break;
|
||||
}
|
||||
case CONTESTLIVE_FLAG_MADE_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
|
||||
break;
|
||||
case 24:
|
||||
StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = 32;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_BETTER_ROUND1:
|
||||
switch (show->contestLiveUpdates.category)
|
||||
{
|
||||
case CONTEST_CATEGORY_COOL:
|
||||
StringCopy(gStringVar1, gText_Cool);
|
||||
break;
|
||||
case 25:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = 32;
|
||||
case CONTEST_CATEGORY_BEAUTY:
|
||||
StringCopy(gStringVar1, gText_Beauty);
|
||||
break;
|
||||
case 28:
|
||||
sTVShowState = 32;
|
||||
case CONTEST_CATEGORY_CUTE:
|
||||
StringCopy(gStringVar1, gText_Cute);
|
||||
break;
|
||||
case 29:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
sTVShowState = 32;
|
||||
case CONTEST_CATEGORY_SMART:
|
||||
StringCopy(gStringVar1, gText_Smart);
|
||||
break;
|
||||
case 26:
|
||||
case 27:
|
||||
case 30:
|
||||
case 31:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
sTVShowState = 32;
|
||||
case CONTEST_CATEGORY_TOUGH:
|
||||
StringCopy(gStringVar1, gText_Tough);
|
||||
break;
|
||||
case 32:
|
||||
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
TVShowDone();
|
||||
}
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
switch (show->contestLiveUpdates.winnerAppealFlag)
|
||||
{
|
||||
case CONTESTLIVE_FLAG_EXCITING_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_GOT_NERVOUS:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_USED_COMBO:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_STARTLED_OTHER:
|
||||
sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_SKIPPED_TURN:
|
||||
sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_GOT_STARTLED:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_MADE_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_GOT_NERVOUS:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_STARTLED_OTHER:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_USED_COMBO:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_EXCITING_APPEAL:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
switch (show->contestLiveUpdates.category)
|
||||
{
|
||||
case CONTEST_CATEGORY_COOL:
|
||||
sTVShowState = CONTESTLIVE_STATE_COOL;
|
||||
break;
|
||||
case CONTEST_CATEGORY_BEAUTY:
|
||||
sTVShowState = CONTESTLIVE_STATE_BEAUTIFUL;
|
||||
break;
|
||||
case CONTEST_CATEGORY_CUTE:
|
||||
sTVShowState = CONTESTLIVE_STATE_CUTE;
|
||||
break;
|
||||
case CONTEST_CATEGORY_SMART:
|
||||
sTVShowState = CONTESTLIVE_STATE_SMART;
|
||||
break;
|
||||
case CONTEST_CATEGORY_TOUGH:
|
||||
sTVShowState = CONTESTLIVE_STATE_TOUGH;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_COOL:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_BEAUTIFUL:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_CUTE:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_SMART:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_TOUGH:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_VERY_EXCITING_APPEAL:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
switch (show->contestLiveUpdates.category)
|
||||
{
|
||||
case CONTEST_CATEGORY_COOL:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_COOL;
|
||||
break;
|
||||
case CONTEST_CATEGORY_BEAUTY:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_BEAUTIFUL;
|
||||
break;
|
||||
case CONTEST_CATEGORY_CUTE:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_CUTE;
|
||||
break;
|
||||
case CONTEST_CATEGORY_SMART:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_SMART;
|
||||
break;
|
||||
case CONTEST_CATEGORY_TOUGH:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_TOUGH;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_VERY_COOL:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_VERY_BEAUTIFUL:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_VERY_CUTE:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_VERY_SMART:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_VERY_TOUGH:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_TOOK_BREAK:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_GOT_STARTLED:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_USED_MOVE:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
StringCopy(gStringVar3, gMoveNames[show->contestLiveUpdates.move]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_TALK_ABOUT_LOSER:
|
||||
StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
TVShowConvertInternationalString(gStringVar2, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
|
||||
StringCopy(gStringVar3, gSpeciesNames[show->contestLiveUpdates.losingSpecies]);
|
||||
switch (show->contestLiveUpdates.loserAppealFlag)
|
||||
{
|
||||
case CONTESTLIVE_FLAG_LOST:
|
||||
sTVShowState = CONTESTLIVE_STATE_LOST;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_REPEATED_MOVE:
|
||||
sTVShowState = CONTESTLIVE_STATE_REPEATED_APPEALS;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_LOST_SMALL_MARGIN:
|
||||
sTVShowState = CONTESTLIVE_STATE_LOST_SMALL_MARGIN;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_NO_EXCITEMENT:
|
||||
sTVShowState = CONTESTLIVE_STATE_NO_EXCITING_APPEALS;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_BLEW_LEAD:
|
||||
sTVShowState = CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_MISSED_EXCITEMENT:
|
||||
sTVShowState = CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_LAST_BOTH_ROUNDS:
|
||||
sTVShowState = CONTESTLIVE_STATE_LAST_BOTH;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_NO_APPEALS:
|
||||
sTVShowState = CONTESTLIVE_STATE_NO_APPEALS;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_NO_APPEALS:
|
||||
StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.losingSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_OUTRO;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_LAST_BOTH:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.losingSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_OUTRO;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_NO_EXCITING_APPEALS:
|
||||
sTVShowState = CONTESTLIVE_STATE_OUTRO;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_LOST_SMALL_MARGIN:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
|
||||
sTVShowState = CONTESTLIVE_STATE_OUTRO;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH:
|
||||
case CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN:
|
||||
case CONTESTLIVE_STATE_REPEATED_APPEALS:
|
||||
case CONTESTLIVE_STATE_LOST:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
|
||||
sTVShowState = CONTESTLIVE_STATE_OUTRO;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_OUTRO:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
TVShowDone();
|
||||
break;
|
||||
}
|
||||
ShowFieldMessage(sTVContestLiveUpdatesTextGroup[state]);
|
||||
}
|
||||
|
||||
+12
-12
@@ -32,7 +32,7 @@
|
||||
#include "random.h"
|
||||
#include "save_location.h"
|
||||
#include "script.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "sound.h"
|
||||
#include "start_menu.h"
|
||||
#include "string_util.h"
|
||||
@@ -1483,7 +1483,7 @@ static void Task_ExchangeCards(u8 taskId)
|
||||
{
|
||||
case 0:
|
||||
if (GetMultiplayerId() == 0)
|
||||
sub_800A4D8(2);
|
||||
SendBlockRequest(2);
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
@@ -1759,7 +1759,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
data[0] = 3;
|
||||
}
|
||||
}
|
||||
@@ -1795,7 +1795,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
case 7:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
data[0] = 8;
|
||||
break;
|
||||
case 8:
|
||||
@@ -2018,7 +2018,7 @@ static void Task_MEvent_Leader(u8 taskId)
|
||||
Free(data->field_8);
|
||||
Free(data->field_0);
|
||||
Free(data->field_4);
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
data->state++;
|
||||
break;
|
||||
case 17:
|
||||
@@ -2188,7 +2188,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId)
|
||||
break;
|
||||
case 11:
|
||||
data->state++;
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
break;
|
||||
case 12:
|
||||
if (IsLinkTaskFinished())
|
||||
@@ -2367,7 +2367,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId)
|
||||
break;
|
||||
case 13:
|
||||
data->state++;
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
break;
|
||||
case 14:
|
||||
if (IsLinkTaskFinished())
|
||||
@@ -2714,7 +2714,7 @@ static void Task_RunUnionRoom(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case UR_STATE_REQUEST_DECLINED:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
|
||||
break;
|
||||
case UR_STATE_SEND_TRADE_REQUST:
|
||||
@@ -2763,7 +2763,7 @@ static void Task_RunUnionRoom(u8 taskId)
|
||||
if (PrintOnTextbox(&uroom->textState, gStringVar4))
|
||||
{
|
||||
uroom->state = UR_STATE_WAIT_FINISH_READING_CARD;
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
uroom->partnerYesNoResponse = 0;
|
||||
uroom->recvActivityRequest[0] = 0;
|
||||
}
|
||||
@@ -2940,7 +2940,7 @@ static void Task_RunUnionRoom(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case UR_STATE_DECLINE_ACTIVITY_REQUEST:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
|
||||
break;
|
||||
case UR_STATE_CANCEL_REQUEST_PRINT_MSG:
|
||||
@@ -2962,7 +2962,7 @@ static void Task_RunUnionRoom(u8 taskId)
|
||||
ScheduleFieldMessageWithFollowupState(UR_STATE_START_ACTIVITY_LINK, gStringVar4);
|
||||
break;
|
||||
case UR_STATE_START_ACTIVITY_LINK:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
uroom->state = UR_STATE_START_ACTIVITY_WAIT_FOR_LINK;
|
||||
break;
|
||||
case UR_STATE_START_ACTIVITY_WAIT_FOR_LINK:
|
||||
@@ -3231,7 +3231,7 @@ static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom *
|
||||
else if (id == 2) // No activity
|
||||
{
|
||||
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,7 +174,7 @@ void CB2_UnionRoomBattle(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | IN_UNION_ROOM))
|
||||
{
|
||||
gMain.state = 6;
|
||||
@@ -190,7 +190,7 @@ void CB2_UnionRoomBattle(void)
|
||||
case 50:
|
||||
if (!UpdatePaletteFade())
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
gMain.state++;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1267,7 +1267,7 @@ static void Chat_Exit(void)
|
||||
case 5:
|
||||
if (IsLinkTaskFinished() && !sub_8011A9C())
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
sChat->exitDelayTimer = 0;
|
||||
sChat->funcState++;
|
||||
}
|
||||
@@ -1302,7 +1302,7 @@ static void Chat_Drop(void)
|
||||
case 1:
|
||||
if (!IsDisplaySubtaskActive(0) && IsLinkTaskFinished() && !sub_8011A9C())
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
sChat->exitDelayTimer = 0;
|
||||
sChat->funcState++;
|
||||
}
|
||||
@@ -1348,7 +1348,7 @@ static void Chat_Disbanded(void)
|
||||
case 2:
|
||||
if (IsDisplaySubtaskActive(0) != TRUE && IsLinkTaskFinished() && !sub_8011A9C())
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
sChat->exitDelayTimer = 0;
|
||||
sChat->funcState++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user