Fix some move animations leaking VRAM and freeing already freed tags (#7977)

Co-authored-by: Hedara <hedara90@gmail.com>
This commit is contained in:
hedara90 2025-11-20 14:19:48 +01:00 committed by GitHub
parent 6095e2e85a
commit cd6d293ad1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 85 additions and 40 deletions

View File

@ -11932,7 +11932,6 @@ gBattleAnimMove_PrismaticLaser::
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation
loadspritegfx ANIM_TAG_TEAL_ALERT @straight lines
loadspritegfx ANIM_TAG_GREEN_SPIKE @needle arm animation
loadspritegfx ANIM_TAG_NEEDLE @sting
monbg ANIM_ATTACKER
setalpha 14, 8
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_BLACK
@ -11961,6 +11960,7 @@ gBattleAnimMove_PrismaticLaser::
unloadspritegfx ANIM_TAG_GREEN_SPIKE
unloadspritegfx ANIM_TAG_ICE_CHUNK
unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_NEEDLE @sting
delay 30
createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 10, 0x32
createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 0x32
@ -15059,6 +15059,7 @@ gBattleAnimMove_Poltergeist::
waitbgfadein
clearmonbg 0x3
blendoff
unloadspritegfx ANIM_TAG_ITEM_BAG
end
@Credits to Skeli
@ -32845,7 +32846,6 @@ gBattleAnimMove_SavageSpinOut::
blendoff
waitforvisualfinish
unloadspritegfx ANIM_TAG_STRING
unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_COCOON
loadspritegfx ANIM_TAG_IMPACT @hit
delay 1
@ -33315,7 +33315,6 @@ FinishInfernoOverdrive:
delay 16
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 8, 0, 16, 1
playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 79, 1
call InfernoOverdriveExplosion
delay 6
@ -34495,7 +34494,6 @@ gBattleAnimMove_BlackHoleEclipse::
unloadspritegfx ANIM_TAG_VERTICAL_HEX @red
unloadspritegfx ANIM_TAG_SHADOW_BALL
unloadspritegfx ANIM_TAG_BLACK_BALL_2
unloadspritegfx ANIM_TAG_FOCUS_ENERGY
loadspritegfx ANIM_TAG_EXPLOSION_2
call BlackHoleEclipseExplosion
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 0, 16, RGB_WHITE @ bg to white pal
@ -36727,8 +36725,6 @@ gBattleAnimMove_ClangorousSoulblaze::
playsewithpan SE_SHINY, SOUND_PAN_ATTACKER
createsprite gClangorousSoulRedRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0
waitforvisualfinish
unloadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST
unloadspritegfx ANIM_TAG_SPARKLE_2 @stars
loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly
playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
createsprite gClangoorousSoulblazeWhiteFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150
@ -37206,8 +37202,6 @@ SearingSunrazeSmashImpact:
loadspritegfx ANIM_TAG_CROSS_IMPACT @x
delay 0
unloadspritegfx ANIM_TAG_METEOR @superpower
unloadspritegfx ANIM_TAG_DRAGON_ASCENT @dragon ascent 1
unloadspritegfx ANIM_TAG_DRAGON_ASCENT_FOE @dragon ascent 2
createsprite gSearingSunrazeSmashCrossImpactSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1, 0x24
playsewithpan SE_M_LEER, SOUND_PAN_TARGET
visible ANIM_ATTACKER
@ -37769,7 +37763,6 @@ gBattleAnimMove_SoulStealing7StarStrike::
call SoulStealingSevenStarStrikeBlueParalysis
waitforvisualfinish
visible ANIM_ATTACKER
unloadspritegfx ANIM_TAG_ROUND_SHADOW
loadspritegfx ANIM_TAG_SPARKLE_4 @ detect
loadspritegfx ANIM_TAG_EXPLOSION @ explosion
playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER

View File

@ -1180,6 +1180,8 @@ struct MapPosition
#if T_SHOULD_RUN_MOVE_ANIM
extern bool32 gLoadFail;
extern bool32 gCountAllocs;
extern s32 gSpriteAllocs;
#endif // T_SHOULD_RUN_MOVE_ANIM
#endif // GUARD_GLOBAL_H

View File

@ -2228,6 +2228,10 @@ static void Cmd_attackanimation(void)
gBattleMons[gBattlerAttacker].friendship,
&gDisableStructs[gBattlerAttacker],
multihit);
#if T_SHOULD_RUN_MOVE_ANIM
gCountAllocs = TRUE;
gSpriteAllocs = 0;
#endif
gBattleScripting.animTurn++;
gBattleScripting.animTargetsHit++;
MarkBattlerForControllerExec(gBattlerAttacker);
@ -2246,7 +2250,12 @@ static void Cmd_waitanimation(void)
CMD_ARGS();
if (gBattleControllerExecFlags == 0 && gBattleStruct->battlerKOAnimsRunning == 0)
{
#if T_SHOULD_RUN_MOVE_ANIM
gCountAllocs = FALSE;
#endif
gBattlescriptCurrInstr = cmd->nextInstr;
}
}
static void DoublesHPBarReduction(void)

View File

@ -28,6 +28,8 @@
#if T_SHOULD_RUN_MOVE_ANIM
EWRAM_DATA bool32 gLoadFail = FALSE;
EWRAM_DATA bool32 gCountAllocs = FALSE;
EWRAM_DATA s32 gSpriteAllocs = 0;
#endif // T_SHOULD_RUN_MOVE_ANIM
struct SpriteCopyRequest
@ -1501,6 +1503,10 @@ void LoadSpriteSheets(const struct SpriteSheet *sheets)
void FreeSpriteTilesByTag(u16 tag)
{
#if T_SHOULD_RUN_MOVE_ANIM
if (gCountAllocs)
gSpriteAllocs--;
#endif
u8 index = IndexOfSpriteTileTag(tag);
if (index != 0xFF)
{
@ -1566,6 +1572,10 @@ u16 GetSpriteTileTagByTileStart(u16 start)
void AllocSpriteTileRange(u16 tag, u16 start, u16 count)
{
#if T_SHOULD_RUN_MOVE_ANIM
if (gCountAllocs)
gSpriteAllocs++;
#endif
u8 freeIndex = IndexOfSpriteTileTag(TAG_NONE);
sSpriteTileRangeTags[freeIndex] = tag;
SET_SPRITE_TILE_RANGE(freeIndex, start, count);

View File

@ -409,9 +409,10 @@ SINGLE_BATTLE_TEST("Move Animations don't leak when used - Singles (player to op
SceneSingles(move, player);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -447,9 +448,10 @@ SINGLE_BATTLE_TEST("Move Animations don't leak when used - Singles (opponent to
SceneSingles(move, opponent);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -505,9 +507,10 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerLeft t
DoublesScene(move, attacker);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -564,9 +567,10 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentLeft
DoublesScene(move, attacker);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -623,9 +627,10 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerLeft t
DoublesScene(move, attacker);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -682,9 +687,10 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentRigh
DoublesScene(move, attacker);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -741,9 +747,10 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerRight
DoublesScene(move, attacker);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -800,9 +807,10 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentLeft
DoublesScene(move, attacker);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -859,9 +867,10 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerRight
DoublesScene(move, attacker);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -918,9 +927,10 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentRigh
DoublesScene(move, attacker);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1205,9 +1215,10 @@ SINGLE_BATTLE_TEST("Move Animations occur before their stat change animations -
SceneSingles(move, player);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1273,9 +1284,10 @@ SINGLE_BATTLE_TEST("Z-Moves don't leak when used - Singles (player to opponent)"
ANIMATION(ANIM_TYPE_MOVE, zmove, player);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1302,9 +1314,10 @@ SINGLE_BATTLE_TEST("Z-Moves don't leak when used - Singles (opponent to player)"
ANIMATION(ANIM_TYPE_MOVE, zmove, opponent);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1333,9 +1346,10 @@ DOUBLE_BATTLE_TEST("Z-Moves don't leak when used - Doubles (playerLeft to oppone
ANIMATION(ANIM_TYPE_MOVE, zmove, playerLeft);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1364,9 +1378,10 @@ DOUBLE_BATTLE_TEST("Z-Moves don't leak when used - Doubles (playerLeft to oppone
ANIMATION(ANIM_TYPE_MOVE, zmove, playerLeft);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1395,9 +1410,10 @@ DOUBLE_BATTLE_TEST("Z-Moves don't leak when used - Doubles (playerRight to oppon
ANIMATION(ANIM_TYPE_MOVE, zmove, playerRight);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1426,9 +1442,10 @@ DOUBLE_BATTLE_TEST("Z-Moves don't leak when used - Doubles (playerRight to oppon
ANIMATION(ANIM_TYPE_MOVE, zmove, playerRight);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1457,9 +1474,10 @@ DOUBLE_BATTLE_TEST("Z-Moves don't leak when used - Doubles (opponentLeft to play
ANIMATION(ANIM_TYPE_MOVE, zmove, opponentLeft);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1488,9 +1506,10 @@ DOUBLE_BATTLE_TEST("Z-Moves don't leak when used - Doubles (opponentLeft to play
ANIMATION(ANIM_TYPE_MOVE, zmove, opponentLeft);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1519,9 +1538,10 @@ DOUBLE_BATTLE_TEST("Z-Moves don't leak when used - Doubles (opponentRight to pla
ANIMATION(ANIM_TYPE_MOVE, zmove, opponentRight);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1550,9 +1570,10 @@ DOUBLE_BATTLE_TEST("Z-Moves don't leak when used - Doubles (opponentRight to pla
ANIMATION(ANIM_TYPE_MOVE, zmove, opponentRight);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1595,9 +1616,10 @@ SINGLE_BATTLE_TEST("Tera Blast doesn't leak when used - Singles (player to oppon
ANIMATION(ANIM_TYPE_MOVE, move, player);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1617,9 +1639,10 @@ SINGLE_BATTLE_TEST("Tera Blast doesn't leak when used - Singles (opponent to pla
ANIMATION(ANIM_TYPE_MOVE, move, opponent);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1641,9 +1664,10 @@ DOUBLE_BATTLE_TEST("Tera Blast doesn't leak when used - Doubles (playerLeft to o
ANIMATION(ANIM_TYPE_MOVE, move, playerLeft);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1665,9 +1689,10 @@ DOUBLE_BATTLE_TEST("Tera Blast doesn't leak when used - Doubles (playerLeft to o
ANIMATION(ANIM_TYPE_MOVE, move, playerLeft);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1689,9 +1714,10 @@ DOUBLE_BATTLE_TEST("Tera Blast doesn't leak when used - Doubles (playerRight to
ANIMATION(ANIM_TYPE_MOVE, move, playerRight);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1713,9 +1739,10 @@ DOUBLE_BATTLE_TEST("Tera Blast doesn't leak when used - Doubles (playerRight to
ANIMATION(ANIM_TYPE_MOVE, move, playerRight);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1737,9 +1764,10 @@ DOUBLE_BATTLE_TEST("Tera Blast doesn't leak when used - Doubles (opponentLeft to
ANIMATION(ANIM_TYPE_MOVE, move, opponentLeft);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1761,9 +1789,10 @@ DOUBLE_BATTLE_TEST("Tera Blast doesn't leak when used - Doubles (opponentLeft to
ANIMATION(ANIM_TYPE_MOVE, move, opponentLeft);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1785,9 +1814,10 @@ DOUBLE_BATTLE_TEST("Tera Blast doesn't leak when used - Doubles (opponentRight t
ANIMATION(ANIM_TYPE_MOVE, move, opponentRight);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}
@ -1809,9 +1839,10 @@ DOUBLE_BATTLE_TEST("Tera Blast doesn't leak when used - Doubles (opponentRight t
ANIMATION(ANIM_TYPE_MOVE, move, opponentRight);
} THEN {
FORCE_MOVE_ANIM(FALSE);
if (gLoadFail)
if (gLoadFail || gSpriteAllocs != 0)
DebugPrintf("Move failed: %S (%u)", GetMoveName(move), move);
EXPECT_EQ(gLoadFail, FALSE);
EXPECT_EQ(gSpriteAllocs, 0);
}
}