added some 'test' tests

This commit is contained in:
AgustinGDLV 2023-03-12 15:28:34 -07:00
parent d0dc564da8
commit ca75fcb50c
3 changed files with 140 additions and 0 deletions

136
test/dynamax.c Normal file
View file

@ -0,0 +1,136 @@
#include "global.h"
#include "test_battle.h"
// DYNAMAX FEATURES
/*
SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax increases HP and max HP by 1.5x")
{
GIVEN { // TODO: Dynamax level
PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(80); }
OPPONENT(SPECIES_WOBBUFFET)
} WHEN {
TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player);
MESSAGE("Wobbuffet used Max Strike!");
MESSAGE("Foe Wobbuffet used Celebrate!");
}
}
*/
/*
SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax expires after three turns.")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(80); }
OPPONENT(SPECIES_WOBBUFFET)
} WHEN {
TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); } // 1st max move
TURN { MOVE(player, MOVE_TACKLE); } // 2nd max move
TURN { MOVE(player, MOVE_TACKLE); } // 3rd max move
} SCENE {
int i;
for (i = 0; i < DYNAMAX_TURNS; ++i) {
MESSAGE("Wobbuffet used Max Strike!");
MESSAGE("Foe Wobbuffet used Celebrate!");
}
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
} FINALLY {
EXPECT_EQ(player->hp, 80)
EXPECT_EQ(player->maxHP, 100)
}
}
*/
// MAX MOVE EFFECTS
SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed")
{
GIVEN {
// Fails?: ASSUME(GetMaxMove(B_POSITION_PLAYER_LEFT, MOVE_TACKLE) == MOVE_MAX_STRIKE);
ASSUME(gBattleMoves[MOVE_MAX_STRIKE].argument == MAX_EFFECT_LOWER_SPEED);
OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }
PLAYER(SPECIES_WOBBUFFET) { Speed(80); }
} WHEN {
TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_TACKLE, dynamax: TRUE); }
TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); }
} SCENE {
// turn 1
MESSAGE("Foe Wobbuffet used Tackle!");
MESSAGE("Wobbuffet used Max Strike!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
MESSAGE("Foe Wobbuffet's speed fell!");
// turn 2
MESSAGE("Wobbuffet used Max Strike!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
MESSAGE("Foe Wobbuffet's speed fell!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent);
}
}
DOUBLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers both opponents' speed")
{
GIVEN {
// Fails? ASSUME(GetMaxMove(B_POSITION_PLAYER_LEFT, MOVE_TACKLE) == MOVE_MAX_STRIKE);
ASSUME(gBattleMoves[MOVE_MAX_STRIKE].argument == MAX_EFFECT_LOWER_SPEED);
PLAYER(SPECIES_WOBBUFFET) { Speed(80); }
PLAYER(SPECIES_WOBBUFFET) { Speed(79); }
OPPONENT(SPECIES_WOBBUFFET) {Speed(100); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(99); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, dynamax: TRUE); \
MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); \
MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); }
TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); \
MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); \
MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); }
} SCENE {
// turn 1
MESSAGE("Foe Wobbuffet used Tackle!");
MESSAGE("Foe Wobbuffet used Tackle!");
MESSAGE("Wobbuffet used Max Strike!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
MESSAGE("Foe Wobbuffet's speed fell!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
MESSAGE("Foe Wobbuffet's speed fell!");
// turn 2
MESSAGE("Wobbuffet used Max Strike!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
MESSAGE("Foe Wobbuffet's speed fell!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
MESSAGE("Foe Wobbuffet's speed fell!");
MESSAGE("Foe Wobbuffet used Tackle!");
MESSAGE("Foe Wobbuffet used Tackle!");
}
}
SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight.")
{
GIVEN {
ASSUME(gBattleMoves[MOVE_MAX_FLARE].argument == MAX_EFFECT_SUN);
OPPONENT(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_EMBER, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
MESSAGE("Wobbuffet used Max Flare!");
MESSAGE("The sunlight got bright!");
MESSAGE("Foe Wobbuffet used Celebrate!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SUN_CONTINUES);
}
}
SINGLE_BATTLE_TEST("(DYNAMAX) Max Overgrowth sets up Grassy Terrain.")
{
KNOWN_FAILING
GIVEN {
ASSUME(gBattleMoves[MOVE_MAX_OVERGROWTH].argument == MAX_EFFECT_GRASSY_TERRAIN);
OPPONENT(SPECIES_WOBBUFFET) { MaxHP(256); HP(128); }
PLAYER(SPECIES_WOBBUFFET) { MaxHP(256); HP(128); }
} WHEN {
TURN { MOVE(player, MOVE_VINE_WHIP, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); }
TURN {}
} SCENE {
MESSAGE("Wobbuffet used Max Overgrowth!");
MESSAGE("Foe Wobbuffet used Celebrate!");
//HP_BAR(player, damage: -player->maxHP / 16);
}
}

View file

@ -722,6 +722,7 @@ struct MoveContext
u16 megaEvolve:1;
u16 explicitMegaEvolve:1;
// TODO: u8 zMove:1;
u16 dynamax:1;
u16 allowed:1;
u16 explicitAllowed:1;
struct BattlePokemon *target;

View file

@ -1217,6 +1217,9 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx)
if (ctx.explicitMegaEvolve && ctx.megaEvolve)
moveSlot |= RET_MEGA_EVOLUTION;
if (ctx.dynamax)
moveSlot |= RET_DYNAMAX;
if (ctx.explicitTarget)
{