Fixed macro + Jaw Lock test

This commit is contained in:
Nephrite 2023-11-25 23:06:51 +09:00
parent 98b2c93b3f
commit 0e23160f2e
3 changed files with 33 additions and 32 deletions

View file

@ -399,44 +399,22 @@ struct BattleMove
const struct AdditionalEffect *additionalEffects;
};
// for some reason struct arguments are counted as 2?
#define ADDITIONAL_EFFECTS(...)\
.numAdditionalEffects = NARG_8(__VA_ARGS__) / 2,\
.additionalEffects = (const struct AdditionalEffect[]){\
VARARG_8(ADDITIONAL_EFFECTS_, __VA_ARGS__)\
}
#define ADDITIONAL_EFFECTS_0()
#define ADDITIONAL_EFFECTS_2(a, b) a, b
#define ADDITIONAL_EFFECTS_4(a, b, c, d) a, b, c, d
#define ADDITIONAL_EFFECTS_6(a, b, c, d, e, f) a, b, c, d, e, f
#define ADDITIONAL_EFFECTS(...) \
.numAdditionalEffects = NARG_8(__VA_ARGS__) / 3, \
.additionalEffects = (const struct AdditionalEffect[]) { __VA_ARGS__ }
#define PRIMARY_EFFECT(_moveEffect, ...){.moveEffect = _moveEffect}
#define PRIMARY_EFFECT_SELF(_moveEffect, ...){.self = TRUE, .moveEffect = _moveEffect}
#define SECONDARY_EFFECT(_moveEffect, _chance, ...){.chance = _chance, .moveEffect = _moveEffect}
#define SECONDARY_EFFECT_SELF(_moveEffect, _chance, ...){.self = TRUE, .chance = _chance, .moveEffect = _moveEffect}
#define PRIMARY_EFFECT(_moveEffect) {.self = FALSE, .chance = 0, .moveEffect = _moveEffect}
#define PRIMARY_EFFECT_SELF(_moveEffect) {.self = TRUE, .chance = 0, .moveEffect = _moveEffect}
#define SECONDARY_EFFECT(_moveEffect, _chance) {.self = FALSE, .chance = _chance, .moveEffect = _moveEffect}
#define SECONDARY_EFFECT_SELF(_moveEffect, _chance) {.self = TRUE, .chance = _chance, .moveEffect = _moveEffect}
struct AdditionalEffect
{
bool8 self;
u8 chance; // 0% = effect certain, primary effect
u16 moveEffect;
// union {
// u32 data; // status effect etc. (not sure what to call this)
// // struct StatChange *statChange; // will include when stat changer overhaul is merged
// };
};
// struct StatChange
// {
// s8 atk;
// s8 def;
// s8 spa;
// s8 spd;
// s8 spe;
// s8 acc;
// s8 eva;
// };
#define SPINDA_SPOT_WIDTH 16
#define SPINDA_SPOT_HEIGHT 16

View file

@ -12176,9 +12176,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.zMoveEffect = Z_EFFECT_NONE,
.makesContact = TRUE,
.bitingMove = TRUE,
// ADDITIONAL_EFFECTS( // broke it oops
// PRIMARY_EFFECT(MOVE_EFFECT_TRAP_BOTH),
// )
ADDITIONAL_EFFECTS(
PRIMARY_EFFECT(MOVE_EFFECT_TRAP_BOTH),
),
},
[MOVE_STUFF_CHEEKS] =

View file

@ -0,0 +1,23 @@
#include "global.h"
#include "test/battle.h"
ASSUMPTIONS
{
ASSUME(gBattleMoves[MOVE_JAW_LOCK].additionalEffects[0].moveEffect == MOVE_EFFECT_TRAP_BOTH);
}
SINGLE_BATTLE_TEST("Jaw Lock traps both opponents")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_JAW_LOCK); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_JAW_LOCK, player);
MESSAGE("Neither Pokémon can run away!");
} THEN { // Can't find good way to test trapping
EXPECT(opponent->status2 & STATUS2_ESCAPE_PREVENTION);
EXPECT(player->status2 & STATUS2_ESCAPE_PREVENTION);
}
}