WITH_CONFIG Refactor (#7584)
This commit is contained in:
parent
22492a6494
commit
67e95e28e9
@ -68,6 +68,7 @@
|
|||||||
#define GEN_7 6
|
#define GEN_7 6
|
||||||
#define GEN_8 7
|
#define GEN_8 7
|
||||||
#define GEN_9 8
|
#define GEN_9 8
|
||||||
|
#define GEN_COUNT 9
|
||||||
// Changing GEN_LATEST's value to a different Generation will change every default setting that uses it at once.
|
// Changing GEN_LATEST's value to a different Generation will change every default setting that uses it at once.
|
||||||
#define GEN_LATEST GEN_9
|
#define GEN_LATEST GEN_9
|
||||||
|
|
||||||
|
|||||||
@ -1,59 +1,210 @@
|
|||||||
#ifndef GUARD_CONSTANTS_GENERATIONAL_CHANGES_H
|
#ifndef GUARD_CONSTANTS_GENERATIONAL_CHANGES_H
|
||||||
#define GUARD_CONSTANTS_GENERATIONAL_CHANGES_H
|
#define GUARD_CONSTANTS_GENERATIONAL_CHANGES_H
|
||||||
|
|
||||||
|
/* Config definitions */
|
||||||
|
#define CONFIG_DEFINITIONS(F) \
|
||||||
|
/* Calculation settings */ \
|
||||||
|
F(CRIT_CHANCE, critChance, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(CRIT_MULTIPLIER, critMultiplier, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(PARALYSIS_SPEED, paralysisSpeed, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(CONFUSION_SELF_DMG_CHANCE, confusionSelfDmgChance, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(MULTI_HIT_CHANCE, multiHitChance, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(WHITEOUT_MONEY, whiteoutMoney, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(LIGHT_BALL_ATTACK_BOOST, lightBallAttackBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
/* Experience settings */ \
|
||||||
|
F(EXP_CATCH, expCatch, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(TRAINER_EXP_MULTIPLIER, trainerExpMultiplier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SPLIT_EXP, splitExp, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SCALED_EXP, scaledExp, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(UNEVOLVED_EXP_MULTIPLIER, unevolvedExpMultiplier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(LEVEL_UP_NOTIFICATION, levelUpNotification, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
/* Stat settings */ \
|
||||||
|
F(BADGE_BOOST, badgeBoost, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(FRIENDSHIP_BOOST, friendshipBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(MAX_LEVEL_EV_GAINS, maxLevelEvGains, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(RECALCULATE_STATS, recalculateStats, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
/* Damage settings */ \
|
||||||
|
F(BURN_DAMAGE, burnDamage, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(BURN_FACADE_DMG, burnFacadeDmg, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(BINDING_DAMAGE, bindingDamage, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(PSYWAVE_DMG, psywaveDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(PAYBACK_SWITCH_BOOST, paybackSwitchBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(HIDDEN_POWER_DMG, hiddenPowerDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(ROUGH_SKIN_DMG, roughSkinDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(KNOCK_OFF_DMG, knockOffDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SPORT_DMG_REDUCTION, sportDmgReduction, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(EXPLOSION_DEFENSE, explosionDefense, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(PARENTAL_BOND_DMG, parentalBondDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(MULTIPLE_TARGETS_DMG, multipleTargetsDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
/* Type settings */ \
|
||||||
|
F(GHOSTS_ESCAPE, ghostsEscape, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(PARALYZE_ELECTRIC, paralyzeElectric, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(POWDER_GRASS, powderGrass, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(POWDER_OVERCOAT, powderOvercoat, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(UPDATED_TYPE_MATCHUPS, updatedTypeMatchups, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(PRANKSTER_DARK_TYPES, pranksterDarkTypes, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(SHEER_COLD_IMMUNITY, sheerColdImmunity, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(ROOST_PURE_FLYING, roostPureFlying, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(STATUS_TYPE_IMMUNITY, statusTypeImmunity, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
/* Turn settings */ \
|
||||||
|
F(BINDING_TURNS, bindingTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(UPROAR_TURNS, uproarTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(UPROAR_IGNORE_SOUNDPROOF, uproarIgnoreSoundproof, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(DISABLE_TURNS, disableTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(TAILWIND_TURNS, tailwindTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SLEEP_TURNS, sleepTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(TAUNT_TURNS, tauntTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SPORT_TURNS, sportTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(MEGA_EVO_TURN_ORDER, megaEvoTurnOrder, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(RECALC_TURN_AFTER_ACTIONS, recalcTurnAfterActions, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(FAINT_SWITCH_IN, faintSwitchIn, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
/* Move data settings */ \
|
||||||
|
F(UPDATED_MOVE_DATA, updatedMoveData, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(UPDATED_MOVE_TYPES, updatedMoveTypes, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(UPDATED_MOVE_FLAGS, updatedMoveFlags, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(PHYSICAL_SPECIAL_SPLIT, physicalSpecialSplit, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(RECOIL_IF_MISS_DMG, recoilIfMissDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(KLUTZ_FLING_INTERACTION, klutzFlingInteraction, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(UPDATED_CONVERSION, updatedConversion, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(UPDATED_CONVERSION_2, updatedConversion2, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(PP_REDUCED_BY_SPITE, ppReducedBySpite, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(EXTRAPOLATED_MOVE_FLAGS, extrapolatedMoveFlags, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
/* Ability data settings */ \
|
||||||
|
F(UPDATED_ABILITY_DATA, updatedAbilityData, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
/* Move accuracy settings */ \
|
||||||
|
F(TOXIC_NEVER_MISS, toxicNeverMiss, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(MINIMIZE_DMG_ACC, minimizeDmgAcc, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(BLIZZARD_HAIL, blizzardHail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SHEER_COLD_ACC, sheerColdAcc, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
/* Move stat change settings */ \
|
||||||
|
F(FELL_STINGER_STAT_RAISE, fellStingerStatRaise, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(KINGS_SHIELD_LOWER_ATK, kingsShieldLowerAtk, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SPEED_BUFFING_RAPID_SPIN, speedBuffingRapidSpin, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(CHARGE_SPDEF_RAISE, chargeSpDefRaise, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(MINIMIZE_EVASION, minimizeEvasion, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(GROWTH_STAT_RAISE, growthStatRaise, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(FOCUS_ENERGY_CRIT_RATIO, focusEnergyCritRatio, (u32, GEN_COUNT - 1)) \
|
||||||
|
/* Other move settings */ \
|
||||||
|
F(INCINERATE_GEMS, incinerateGems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(CAN_SPITE_FAIL, canSpiteFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(CRASH_IF_TARGET_IMMUNE, crashIfTargetImmune, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(MEMENTO_FAIL, mementoFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(GLARE_GHOST, glareGhost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SKILL_SWAP, skillSwap, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(BRICK_BREAK, brickBreak, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(WISH_HP_SOURCE, wishHpSource, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(RAMPAGE_CANCELLING, rampageCancelling, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(HEAL_BLOCKING, healBlocking, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(ROOTED_GROUNDING, rootedGrounding, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(METRONOME_MOVES, metronomeMoves, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(TELEPORT_BEHAVIOR, teleportBehavior, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(BEAT_UP, beatUp, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(DARK_VOID_FAIL, darkVoidFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(BURN_HIT_THAW, burnHitThaw, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(HEALING_WISH_SWITCH, healingWishSwitch, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(DEFOG_EFFECT_CLEARING, defogEffectClearing, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(STOCKPILE_RAISES_DEFS, stockpileRaisesDefs, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(TRANSFORM_SHINY, transformShiny, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(TRANSFORM_FORM_CHANGES, transformFormChanges, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(WIDE_GUARD, wideGuard, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(QUICK_GUARD, quickGuard, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(IMPRISON, imprison, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(ALLY_SWITCH_FAIL_CHANCE, allySwitchFailChance, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(SKETCH_BANS, sketchBans, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(KNOCK_OFF_REMOVAL, knockOffRemoval, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(HEAL_BELL_SOUNDPROOF, healBellSoundproof, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(CHARGE, charge, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(POWDER_RAIN, powderRain, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(AFTER_YOU_TURN_ORDER, afterYouTurnOrder, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(QUASH_TURN_ORDER, quashTurnOrder, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(DESTINY_BOND_FAIL, destinyBondFail, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(PURSUIT_TARGET, pursuitTarget, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SKIP_RECHARGE, skipRecharge, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(ENCORE_TARGET, encoreTarget, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(TIME_OF_DAY_HEALING_MOVES, timeOfDayHealingMoves, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(DREAM_EATER_LIQUID_OOZE, dreamEaterLiquidOoze, (u32, GEN_COUNT - 1)) \
|
||||||
|
/* Ability settings */ \
|
||||||
|
F(GALE_WINGS, galeWings, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(STANCE_CHANGE_FAIL, stanceChangeFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SHADOW_TAG_ESCAPE, shadowTagEscape, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(MOODY_ACC_EVASION, moodyAccEvasion, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(FLASH_FIRE_FROZEN, flashFireFrozen, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SYNCHRONIZE_TOXIC, synchronizeToxic, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(UPDATED_INTIMIDATE, updatedIntimidate, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(OBLIVIOUS_TAUNT, obliviousTaunt, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(STURDY, sturdy, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(PLUS_MINUS_INTERACTION, plusMinusInteraction, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(WEATHER_FORMS, weatherForms, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SYMBIOSIS_GEMS, symbiosisGems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(ABSORBING_ABILITY_STRING, absorbingAbilityString, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(REDIRECT_ABILITY_IMMUNITY, redirectAbilityImmunity, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(REDIRECT_ABILITY_ALLIES, redirectAbilityAllies, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(LEAF_GUARD_PREVENTS_REST, leafGuardPreventsRest, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(TRANSISTOR_BOOST, transistorBoost, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(ILLUMINATE_EFFECT, illuminateEffect, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(WEAK_ARMOR_SPEED, weakArmorSpeed, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(PROTEAN_LIBERO, proteanLibero, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(INTREPID_SWORD, intrepidSword, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(DAUNTLESS_SHIELD, dauntlessShield, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(DISGUISE_HP_LOSS, disguiseHpLoss, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(ABILITY_TRIGGER_CHANCE, abilityTriggerChance, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(PICKUP_WILD, pickupWild, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(MAGIC_GUARD, magicGuard, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(BATTLE_BOND, battleBond, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(ATE_MULTIPLIER, ateMultiplier, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(DEFIANT_STICKY_WEB, defiantStickyWeb, (u32, GEN_COUNT - 1)) \
|
||||||
|
/* Item settings */ \
|
||||||
|
F(CONFUSE_BERRIES_HEAL, confuseBerriesHeal, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(X_ITEMS_BUFF, xItemsBuff, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(MENTAL_HERB, mentalHerb, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(TRAINERS_KNOCK_OFF_ITEMS, trainersKnockOffItems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(RETURN_STOLEN_NPC_ITEMS, returnStolenNpcItems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(STEAL_WILD_ITEMS, stealWildItems, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(RESTORE_HELD_BATTLE_ITEMS, restoreHeldBattleItems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SOUL_DEW_BOOST, soulDewBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(NET_BALL_MODIFIER, netBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(DIVE_BALL_MODIFIER, diveBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(NEST_BALL_MODIFIER, nestBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(REPEAT_BALL_MODIFIER, repeatBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(TIMER_BALL_MODIFIER, timerBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(DUSK_BALL_MODIFIER, duskBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(QUICK_BALL_MODIFIER, quickBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(LURE_BALL_MODIFIER, lureBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(HEAVY_BALL_MODIFIER, heavyBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(DREAM_BALL_MODIFIER, dreamBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SPORT_BALL_MODIFIER, sportBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SAFARI_BALL_MODIFIER, safariBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(FRIEND_BALL_MODIFIER, friendBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SERENE_GRACE_BOOST, sereneGraceBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(IRON_BALL, ironBall, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
/* Weather settings */ \
|
||||||
|
F(ABILITY_WEATHER, abilityWeather, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(SANDSTORM_SPDEF_BOOST, sandstormSpDefBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(OVERWORLD_FOG, overworldFog, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(OVERWORLD_SNOW, overworldSnow, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SNOW_WARNING, snowWarning, (u32, GEN_COUNT - 1)) \
|
||||||
|
F(PREFERRED_ICE_WEATHER, preferredIceWeather, (u32, B_ICE_WEATHER_SNOW)) /* TODO: use in tests */ \
|
||||||
|
/* Terrain settings */ \
|
||||||
|
F(TERRAIN_TYPE_BOOST, terrainTypeBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SECRET_POWER_EFFECT, secretPowerEffect, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(SECRET_POWER_ANIMATION, secretPowerAnimation, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(NATURE_POWER_MOVES, naturePowerMoves, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(CAMOUFLAGE_TYPES, camouflageTypes, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
/* Other settings */ \
|
||||||
|
F(WILD_NATURAL_ENEMIES, wildNaturalEnemies, (u32, TRUE)) /* TODO: use in tests */ \
|
||||||
|
F(AFFECTION_MECHANICS, affectionMechanics, (u32, TRUE)) /* TODO: use in tests */ \
|
||||||
|
F(OBEDIENCE_MECHANICS, obedienceMechanics, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
F(USE_FROSTBITE, useFrostbite, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
|
|
||||||
|
|
||||||
|
#define GET_CONFIG_MAXIMUM(_typeMaxValue, ...) INVOKE_WITH_B(GET_CONFIG_MAXIMUM_, _typeMaxValue)
|
||||||
|
#define GET_CONFIG_MAXIMUM_(_type, ...) FIRST(__VA_OPT__(FIRST(__VA_ARGS__),) MAX_BITS((sizeof(_type) * 8)))
|
||||||
|
|
||||||
|
#define UNPACK_CONFIG_ENUMS(_name, ...) CONFIG_##_name,
|
||||||
|
|
||||||
enum ConfigTag
|
enum ConfigTag
|
||||||
{
|
{
|
||||||
CONFIG_CRIT_CHANCE,
|
CONFIG_DEFINITIONS(UNPACK_CONFIG_ENUMS)
|
||||||
CONFIG_CRIT_MULTIPLIER,
|
|
||||||
CONFIG_FOCUS_ENERGY_CRIT_RATIO,
|
|
||||||
CONFIG_PARALYSIS_SPEED,
|
|
||||||
CONFIG_CONFUSION_SELF_DMG_CHANCE,
|
|
||||||
CONFIG_MULTI_HIT_CHANCE,
|
|
||||||
CONFIG_GALE_WINGS,
|
|
||||||
CONFIG_HEAL_BELL_SOUNDPROOF,
|
|
||||||
CONFIG_TELEPORT_BEHAVIOR,
|
|
||||||
CONFIG_ABILITY_WEATHER,
|
|
||||||
CONFIG_MOODY_STATS,
|
|
||||||
CONFIG_BATTLE_BOND,
|
|
||||||
CONFIG_ATE_MULTIPLIER,
|
|
||||||
CONFIG_FELL_STINGER_STAT_RAISE,
|
|
||||||
CONFIG_DEFIANT_STICKY_WEB,
|
|
||||||
CONFIG_ENCORE_TARGET,
|
|
||||||
CONFIG_TIME_OF_DAY_HEALING_MOVES,
|
|
||||||
CONFIG_PICKUP_WILD,
|
|
||||||
CONFIG_PROTEAN_LIBERO,
|
|
||||||
CONFIG_INTREPID_SWORD,
|
|
||||||
CONFIG_DAUNTLESS_SHIELD,
|
|
||||||
CONFIG_ILLUMINATE_EFFECT,
|
|
||||||
CONFIG_STEAL_WILD_ITEMS,
|
|
||||||
CONFIG_SNOW_WARNING,
|
|
||||||
CONFIG_ALLY_SWITCH_FAIL_CHANCE,
|
|
||||||
CONFIG_DREAM_EATER_LIQUID_OOZE,
|
|
||||||
CONFIG_TRANSISTOR_BOOST,
|
|
||||||
CONFIG_RECALC_TURN_AFTER_ACTIONS,
|
|
||||||
CONFIG_UPDATED_INTIMIDATE,
|
|
||||||
CONFIG_DISGUISE_HP_LOSS,
|
|
||||||
CONFIG_AFTER_YOU_TURN_ORDER,
|
|
||||||
CONFIG_HEALING_WISH_SWITCH,
|
|
||||||
CONFIG_MEGA_EVO_TURN_ORDER,
|
|
||||||
CONFIG_SHEER_COLD_IMMUNITY,
|
|
||||||
CONFIG_WEAK_ARMOR_SPEED,
|
|
||||||
CONFIG_PRANKSTER_DARK_TYPES,
|
|
||||||
CONFIG_DESTINY_BOND_FAIL,
|
|
||||||
CONFIG_POWDER_RAIN,
|
|
||||||
CONFIG_POWDER_GRASS,
|
|
||||||
CONFIG_POWDER_OVERCOAT,
|
|
||||||
CONFIG_OBLIVIOUS_TAUNT,
|
|
||||||
CONFIG_TOXIC_NEVER_MISS,
|
|
||||||
CONFIG_PARALYZE_ELECTRIC,
|
|
||||||
CONFIG_BADGE_BOOST,
|
|
||||||
CONFIG_LEAF_GUARD_PREVENTS_REST,
|
|
||||||
CONFIG_BEAT_UP,
|
|
||||||
CONFIG_WIDE_GUARD,
|
|
||||||
CONFIG_QUICK_GUARD,
|
|
||||||
CONFIG_DEFOG_EFFECT_CLEARING,
|
|
||||||
CONFIG_BURN_HIT_THAW,
|
|
||||||
CONFIG_BURN_FACADE_DMG,
|
|
||||||
CONFIG_COUNT
|
CONFIG_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -4,88 +4,20 @@
|
|||||||
#include "constants/generational_changes.h"
|
#include "constants/generational_changes.h"
|
||||||
#include "config/battle.h"
|
#include "config/battle.h"
|
||||||
|
|
||||||
static const u8 sConfigChanges[CONFIG_COUNT] =
|
#define UNPACK_CONFIG_STRUCT(_name, _field, _typeMaxValue, ...) INVOKE_WITH_(UNPACK_CONFIG_STRUCT_, _field, UNPACK_B(_typeMaxValue));
|
||||||
|
#define UNPACK_CONFIG_STRUCT_(_field, _type, ...) _type FIRST(__VA_OPT__(_field:BIT_SIZE(FIRST(__VA_ARGS__)),) _field)
|
||||||
|
|
||||||
|
struct GenChanges
|
||||||
{
|
{
|
||||||
[CONFIG_CRIT_CHANCE] = B_CRIT_CHANCE,
|
CONFIG_DEFINITIONS(UNPACK_CONFIG_STRUCT)
|
||||||
[CONFIG_CRIT_MULTIPLIER] = B_CRIT_MULTIPLIER,
|
// Expands to:
|
||||||
[CONFIG_FOCUS_ENERGY_CRIT_RATIO] = B_FOCUS_ENERGY_CRIT_RATIO,
|
// u32 critChance:4;
|
||||||
[CONFIG_PARALYSIS_SPEED] = B_PARALYSIS_SPEED,
|
// u32 critMultiplier:4;
|
||||||
[CONFIG_CONFUSION_SELF_DMG_CHANCE] = B_CONFUSION_SELF_DMG_CHANCE,
|
// ...
|
||||||
[CONFIG_MULTI_HIT_CHANCE] = B_MULTI_HIT_CHANCE,
|
|
||||||
[CONFIG_GALE_WINGS] = B_GALE_WINGS,
|
|
||||||
[CONFIG_HEAL_BELL_SOUNDPROOF] = B_HEAL_BELL_SOUNDPROOF,
|
|
||||||
[CONFIG_TELEPORT_BEHAVIOR] = B_TELEPORT_BEHAVIOR,
|
|
||||||
[CONFIG_ABILITY_WEATHER] = B_ABILITY_WEATHER,
|
|
||||||
[CONFIG_MOODY_STATS] = B_MOODY_ACC_EVASION,
|
|
||||||
[CONFIG_BATTLE_BOND] = B_BATTLE_BOND,
|
|
||||||
[CONFIG_ATE_MULTIPLIER] = B_ATE_MULTIPLIER,
|
|
||||||
[CONFIG_FELL_STINGER_STAT_RAISE] = B_FELL_STINGER_STAT_RAISE,
|
|
||||||
[CONFIG_DEFIANT_STICKY_WEB] = B_DEFIANT_STICKY_WEB,
|
|
||||||
[CONFIG_ENCORE_TARGET] = B_ENCORE_TARGET,
|
|
||||||
[CONFIG_TIME_OF_DAY_HEALING_MOVES] = B_TIME_OF_DAY_HEALING_MOVES,
|
|
||||||
[CONFIG_PICKUP_WILD] = B_PICKUP_WILD,
|
|
||||||
[CONFIG_PROTEAN_LIBERO] = B_PROTEAN_LIBERO,
|
|
||||||
[CONFIG_INTREPID_SWORD] = B_INTREPID_SWORD,
|
|
||||||
[CONFIG_DAUNTLESS_SHIELD] = B_DAUNTLESS_SHIELD,
|
|
||||||
[CONFIG_ILLUMINATE_EFFECT] = B_ILLUMINATE_EFFECT,
|
|
||||||
[CONFIG_STEAL_WILD_ITEMS] = B_STEAL_WILD_ITEMS,
|
|
||||||
[CONFIG_SNOW_WARNING] = B_SNOW_WARNING,
|
|
||||||
[CONFIG_ALLY_SWITCH_FAIL_CHANCE] = B_ALLY_SWITCH_FAIL_CHANCE,
|
|
||||||
[CONFIG_DREAM_EATER_LIQUID_OOZE] = B_DREAM_EATER_LIQUID_OOZE,
|
|
||||||
[CONFIG_TRANSISTOR_BOOST] = B_TRANSISTOR_BOOST,
|
|
||||||
[CONFIG_RECALC_TURN_AFTER_ACTIONS] = B_RECALC_TURN_AFTER_ACTIONS,
|
|
||||||
[CONFIG_UPDATED_INTIMIDATE] = B_UPDATED_INTIMIDATE,
|
|
||||||
[CONFIG_DISGUISE_HP_LOSS] = B_DISGUISE_HP_LOSS,
|
|
||||||
[CONFIG_AFTER_YOU_TURN_ORDER] = B_AFTER_YOU_TURN_ORDER,
|
|
||||||
[CONFIG_HEALING_WISH_SWITCH] = B_HEALING_WISH_SWITCH,
|
|
||||||
[CONFIG_MEGA_EVO_TURN_ORDER] = B_MEGA_EVO_TURN_ORDER,
|
|
||||||
[CONFIG_SHEER_COLD_IMMUNITY] = B_SHEER_COLD_IMMUNITY,
|
|
||||||
[CONFIG_WEAK_ARMOR_SPEED] = B_WEAK_ARMOR_SPEED,
|
|
||||||
[CONFIG_PRANKSTER_DARK_TYPES] = B_PRANKSTER_DARK_TYPES,
|
|
||||||
[CONFIG_DESTINY_BOND_FAIL] = B_DESTINY_BOND_FAIL,
|
|
||||||
[CONFIG_POWDER_RAIN] = B_POWDER_RAIN,
|
|
||||||
[CONFIG_POWDER_GRASS] = B_POWDER_GRASS,
|
|
||||||
[CONFIG_POWDER_OVERCOAT] = B_POWDER_OVERCOAT,
|
|
||||||
[CONFIG_OBLIVIOUS_TAUNT] = B_OBLIVIOUS_TAUNT,
|
|
||||||
[CONFIG_TOXIC_NEVER_MISS] = B_TOXIC_NEVER_MISS,
|
|
||||||
[CONFIG_PARALYZE_ELECTRIC] = B_PARALYZE_ELECTRIC,
|
|
||||||
[CONFIG_BADGE_BOOST] = B_BADGE_BOOST,
|
|
||||||
[CONFIG_LEAF_GUARD_PREVENTS_REST] = B_LEAF_GUARD_PREVENTS_REST,
|
|
||||||
[CONFIG_BEAT_UP] = B_BEAT_UP,
|
|
||||||
[CONFIG_WIDE_GUARD] = B_WIDE_GUARD,
|
|
||||||
[CONFIG_QUICK_GUARD] = B_QUICK_GUARD,
|
|
||||||
[CONFIG_DEFOG_EFFECT_CLEARING] = B_DEFOG_EFFECT_CLEARING,
|
|
||||||
[CONFIG_BURN_HIT_THAW] = B_BURN_HIT_THAW,
|
|
||||||
[CONFIG_BURN_FACADE_DMG] = B_BURN_FACADE_DMG,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#if TESTING
|
u32 GetConfig(enum ConfigTag configTag);
|
||||||
extern u8 *gConfigChangesTestOverride;
|
void SetConfig(enum ConfigTag configTag, u32 value);
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline u32 GetConfig(enum ConfigTag configTag)
|
|
||||||
{
|
|
||||||
if (configTag >= CONFIG_COUNT)
|
|
||||||
return 0;
|
|
||||||
#if TESTING
|
|
||||||
if (gConfigChangesTestOverride == NULL)
|
|
||||||
return sConfigChanges[configTag];
|
|
||||||
return gConfigChangesTestOverride[configTag];
|
|
||||||
#else
|
|
||||||
return sConfigChanges[configTag];
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void SetConfig(enum ConfigTag configTag, u32 value)
|
|
||||||
{
|
|
||||||
#if TESTING
|
|
||||||
if (configTag >= CONFIG_COUNT)
|
|
||||||
return;
|
|
||||||
if (gConfigChangesTestOverride == NULL)
|
|
||||||
return;
|
|
||||||
gConfigChangesTestOverride[configTag] = value;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#if TESTING
|
#if TESTING
|
||||||
void TestInitConfigData(void);
|
void TestInitConfigData(void);
|
||||||
|
|||||||
@ -4708,7 +4708,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
|
|||||||
if (gDisableStructs[battler].isFirstTurn != 2)
|
if (gDisableStructs[battler].isFirstTurn != 2)
|
||||||
{
|
{
|
||||||
u32 validToRaise = 0, validToLower = 0;
|
u32 validToRaise = 0, validToLower = 0;
|
||||||
u32 statsNum = GetConfig(CONFIG_MOODY_STATS) >= GEN_8 ? NUM_STATS : NUM_BATTLE_STATS;
|
u32 statsNum = GetConfig(CONFIG_MOODY_ACC_EVASION) >= GEN_8 ? NUM_STATS : NUM_BATTLE_STATS;
|
||||||
|
|
||||||
for (i = STAT_ATK; i < statsNum; i++)
|
for (i = STAT_ATK; i < statsNum; i++)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -3,13 +3,109 @@
|
|||||||
#include "malloc.h"
|
#include "malloc.h"
|
||||||
#include "constants/generational_changes.h"
|
#include "constants/generational_changes.h"
|
||||||
|
|
||||||
#if TESTING
|
#define UNPACK_CONFIG_GEN_CHANGES2(_name, _field, ...) ._field = B_##_name,
|
||||||
EWRAM_DATA u8 *gConfigChangesTestOverride = NULL;
|
|
||||||
|
|
||||||
|
const struct GenChanges sConfigChanges =
|
||||||
|
{
|
||||||
|
CONFIG_DEFINITIONS(UNPACK_CONFIG_GEN_CHANGES2)
|
||||||
|
/* Expands to:
|
||||||
|
.critChance = B_CRIT_CHANCE,
|
||||||
|
.critMultiplier = B_CRIT_MULTIPLIER,
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
#if TESTING
|
||||||
|
EWRAM_DATA struct GenChanges *gConfigChangesTestOverride = NULL;
|
||||||
|
#define UNPACK_CONFIG_OVERRIDE_GETTERS(_name, _field, ...) case CONFIG_##_name: return gConfigChangesTestOverride->_field;
|
||||||
|
#define UNPACK_CONFIG_GETTERS(_name, _field, ...) case CONFIG_##_name: return sConfigChanges._field;
|
||||||
|
#define UNPACK_CONFIG_CLAMPER(_name, _field, _typeMaxValue, ...) case CONFIG_##_name: clampedValue = min(GET_CONFIG_MAXIMUM(_typeMaxValue), newValue); break;
|
||||||
|
#define UNPACK_CONFIG_SETTERS(_name, _field, _typeMaxValue, ...) case CONFIG_##_name: gConfigChangesTestOverride->_field = clampedValue; break;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define UNPACK_CONFIG_OVERRIDE_GETTERS(_name, _field, ...) case CONFIG_##_name: return sConfigChanges._field;
|
||||||
|
#define UNPACK_CONFIG_GETTERS(_name, _field, ...) case CONFIG_##_name: return sConfigChanges._field;
|
||||||
|
#define UNPACK_CONFIG_CLAMPER(_name, _field, ...) case CONFIG_##_name: return 0;
|
||||||
|
#define UNPACK_CONFIG_SETTERS(_name, _field, ...) case CONFIG_##_name: return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Gets the value of a volatile status flag for a certain battler
|
||||||
|
// Primarily used for the debug menu and scripts. Outside of it explicit references are preferred
|
||||||
|
u32 GetConfig(enum ConfigTag _genConfig)
|
||||||
|
{
|
||||||
|
#if TESTING
|
||||||
|
if (gConfigChangesTestOverride == NULL)
|
||||||
|
{
|
||||||
|
switch (_genConfig)
|
||||||
|
{
|
||||||
|
CONFIG_DEFINITIONS(UNPACK_CONFIG_GETTERS)
|
||||||
|
/* Expands to:
|
||||||
|
case CONFIG_CRIT_CHANCE:
|
||||||
|
return gConfigChangesTestOverride->critChance;
|
||||||
|
*/
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
switch (_genConfig)
|
||||||
|
{
|
||||||
|
CONFIG_DEFINITIONS(UNPACK_CONFIG_OVERRIDE_GETTERS)
|
||||||
|
/* Expands to:
|
||||||
|
case CONFIG_CRIT_CHANCE:
|
||||||
|
return sConfigChanges.critChance;
|
||||||
|
*/
|
||||||
|
default: // Invalid config tag
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if TESTING
|
||||||
|
u32 GetClampedValue(enum ConfigTag _genConfig, u32 newValue)
|
||||||
|
{
|
||||||
|
u32 clampedValue = 0;
|
||||||
|
switch(_genConfig)
|
||||||
|
{
|
||||||
|
CONFIG_DEFINITIONS(UNPACK_CONFIG_CLAMPER)
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return clampedValue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void SetConfig(enum ConfigTag _genConfig, u32 _value)
|
||||||
|
{
|
||||||
|
#if TESTING
|
||||||
|
// Clamping is done here instead of the switch due to an internal compiler error!
|
||||||
|
u32 clampedValue = GetClampedValue(_genConfig, _value);
|
||||||
|
switch (_genConfig)
|
||||||
|
{
|
||||||
|
CONFIG_DEFINITIONS(UNPACK_CONFIG_SETTERS)
|
||||||
|
/* Expands to:
|
||||||
|
#if TESTING
|
||||||
|
case CONFIG_CRIT_CHANCE:
|
||||||
|
gConfigChangesTestOverride->critChance = clampedValue;
|
||||||
|
break;
|
||||||
|
#else
|
||||||
|
case CONFIG_CRIT_CHANCE:
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
default: // Invalid config tag
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if TESTING
|
||||||
void TestInitConfigData(void)
|
void TestInitConfigData(void)
|
||||||
{
|
{
|
||||||
gConfigChangesTestOverride = Alloc(sizeof(sConfigChanges));
|
gConfigChangesTestOverride = Alloc(sizeof(sConfigChanges));
|
||||||
memcpy(gConfigChangesTestOverride, sConfigChanges, sizeof(sConfigChanges));
|
memcpy(gConfigChangesTestOverride, &sConfigChanges, sizeof(sConfigChanges));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestFreeConfigData(void)
|
void TestFreeConfigData(void)
|
||||||
|
|||||||
@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Moody randomly raises the user's Attack, Defense, Sp. Atk, S
|
|||||||
// HP is not included
|
// HP is not included
|
||||||
PASSES_RANDOMLY(1, statsNum - 1, RNG_MOODY_INCREASE);
|
PASSES_RANDOMLY(1, statsNum - 1, RNG_MOODY_INCREASE);
|
||||||
GIVEN {
|
GIVEN {
|
||||||
WITH_CONFIG(CONFIG_MOODY_STATS, config);
|
WITH_CONFIG(CONFIG_MOODY_ACC_EVASION, config);
|
||||||
PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); }
|
PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); }
|
||||||
OPPONENT(SPECIES_WOBBUFFET);
|
OPPONENT(SPECIES_WOBBUFFET);
|
||||||
} WHEN {
|
} WHEN {
|
||||||
@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Moody randomly lowers the user's Attack, Defense, Sp. Atk, S
|
|||||||
// One stat becomes unavailable due to it already increasing
|
// One stat becomes unavailable due to it already increasing
|
||||||
PASSES_RANDOMLY(1, statsNum - 2, RNG_MOODY_DECREASE);
|
PASSES_RANDOMLY(1, statsNum - 2, RNG_MOODY_DECREASE);
|
||||||
GIVEN {
|
GIVEN {
|
||||||
WITH_CONFIG(CONFIG_MOODY_STATS, config);
|
WITH_CONFIG(CONFIG_MOODY_ACC_EVASION, config);
|
||||||
PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); }
|
PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); }
|
||||||
OPPONENT(SPECIES_WOBBUFFET);
|
OPPONENT(SPECIES_WOBBUFFET);
|
||||||
} WHEN {
|
} WHEN {
|
||||||
@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Moody randomly raises the holder's Attack, Defense, Sp. Atk,
|
|||||||
|
|
||||||
PASSES_RANDOMLY(statsNum - 1, statsNum - 1, RNG_MOODY_DECREASE);
|
PASSES_RANDOMLY(statsNum - 1, statsNum - 1, RNG_MOODY_DECREASE);
|
||||||
GIVEN {
|
GIVEN {
|
||||||
WITH_CONFIG(CONFIG_MOODY_STATS, config);
|
WITH_CONFIG(CONFIG_MOODY_ACC_EVASION, config);
|
||||||
PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); }
|
PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); }
|
||||||
OPPONENT(SPECIES_WOBBUFFET);
|
OPPONENT(SPECIES_WOBBUFFET);
|
||||||
} WHEN {
|
} WHEN {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user