Merge branch 'master' of https://github.com/rh-hideout/pokeemerald-expansion into rh-hideout-master

This commit is contained in:
RoamerX 2025-12-29 23:03:47 +08:00
commit dc41d1cab9
56 changed files with 905 additions and 1082 deletions

View File

@ -122,21 +122,20 @@ Once all items on the merge checklist are true, the branch will be merged in.
## Maintainers
This list was last updated 2025 April 1.
This list was last updated 2025 Dec 23.
| Name | Discord | Currently Active | Areas of Expertise |
| --- | --- | --- | --- |
| [Alex](https://github.com/AlexOn1ine) | rainonline | ✅ | Battle Engine, Battle AI
| [Egg](https://github.com/DizzyEggg) | egg9255 | ✅ | Battle Engine, Battle AI
| [ghoulslash](https://github.com/ghoulslash) | ghoulslash | ✅ | Dexnav, Overworld, Battle Engine
| [Jasper](https://github.com/Bassoonian) | bassoonian | ✅ | Berries, Day / Night System, Followers, Feature Branches
| [MGriffin](https://github.com/mrgriffin) | mgriffin | ✅ | Tests, Trainer Control
| [psf](https://github.com/pkmnsnfrn) | pkmnsnfrn | ✅ | Rematches, Difficulty, Trainer Slides, Fake RTC, Fishing Minigames, Imperial / Metric, OW Item Balls, Sky Battles
| [Hedara](https://github.com/hedara90) | hedara | ✅ | Compression, Sprites
| [Pawkkie](https://github.com/Pawkkie) | pawkkie | ✅ | Battle AI
| [SBird](https://github.com/SBird1337) | karathan | ✅ | Dynamic Multichoice, Damage Calculation, Animations, Trainer Control, Tests
| [Agustin](https://github.com/AgustinGDLV) | agustingdlv | Inactive | Gimmicks, Battle Engine, Tests, Items
| [tertu](https://github.com/tertu-m) | tertu | Inactive | Randomizer
| [Jamie](https://github.com/FosterProgramming) | foster_harmony | ✅ | Overworld, Tests, Day / Night System, Dexnav, Battle Frontier, HGSS Dex, Pokerus, Learnsets, Mon Generation, Vs Seeker
| [grintoul](https://github.com/grintoul1) | grintoul | ✅ | Tests, Battle AI, Battle Engine, Overworld, Trainer Slides, Follower NPCs, Multi Battles
## Attribution
This guide is based on the [contributing.md](https://contributing.md/generator)!

View File

@ -140,7 +140,7 @@ git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion
2. Pull your desired branch
There are three different options to pull from.
```console
git pull RHH master # if you've chosen to use the upcoming branch, replace the word master with upcoming.
git pull RHH master # if you've chosen to use the upcoming branch, replace the word master with upcoming.
# If you've chosen the latest patch, replace the word master with expansion
# If you've chosen Latest Patch, replace the word master with expansion/1.11.0 where 1.11.0 is replaced with whatever the latest released version is.
```
@ -173,7 +173,7 @@ For example, if your version is 1.7.0, you should update to 1.7.4.
git pull RHH expansion/X.Y.Z # Replace X, Y and Z with the target version, such as `1.9.3`, `master`, or `upcoming`.
```
You may have merge conflicts that you need to resolve.
You may have merge conflicts that you need to resolve.
If you targeted a specific version that is not the latest version listed on the [tags](https://github.com/rh-hideout/pokeemerald-expansion/tags) page, you should repeat steps 3 and 4 until you are.

View File

@ -2464,3 +2464,8 @@
.byte \gen
.4byte \jumpInstr
.endm
@ Absorbs Toxic Spikes when a grounded Poison-type faints to entry hazards.
.macro tryabsorbtoxicspikesonfaint
callnative BS_TryAbsorbToxicSpikesOnFaint
.endm

View File

@ -5147,6 +5147,7 @@ BattleScript_DmgHazardsOnAttackerFainted::
setbyte sGIVEEXP_STATE, 0
getexp BS_ATTACKER
moveendall
tryabsorbtoxicspikesonfaint
goto BattleScript_HandleFaintedMon
BattleScript_DmgHazardsOnTarget::
@ -5161,6 +5162,7 @@ BattleScript_DmgHazardsOnTargetFainted::
setbyte sGIVEEXP_STATE, 0
getexp BS_TARGET
moveendall
tryabsorbtoxicspikesonfaint
goto BattleScript_HandleFaintedMon
BattleScript_DmgHazardsOnBattlerScripting::
@ -5175,6 +5177,7 @@ BattleScript_DmgHazardsOnBattlerScriptingFainted::
setbyte sGIVEEXP_STATE, 0
getexp BS_SCRIPTING
moveendall
tryabsorbtoxicspikesonfaint
goto BattleScript_HandleFaintedMon
BattleScript_DmgHazardsOnFaintedBattler::
@ -5189,6 +5192,7 @@ BattleScript_DmgHazardsOnFaintedBattlerFainted::
setbyte sGIVEEXP_STATE, 0
getexp BS_FAINTED
moveendall
tryabsorbtoxicspikesonfaint
goto BattleScript_HandleFaintedMon
BattleScript_PrintHurtByDmgHazards::

Binary file not shown.

Before

Width:  |  Height:  |  Size: 989 B

After

Width:  |  Height:  |  Size: 998 B

View File

@ -12,7 +12,7 @@ JASC-PAL
101 101 94
144 144 137
172 41 65
0 0 0
255 255 255
0 0 0
0 0 0
0 0 0

View File

@ -12,7 +12,7 @@ JASC-PAL
103 92 90
144 144 137
214 66 61
0 0 0
255 255 255
0 0 0
0 0 0
0 0 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 925 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -9,11 +9,11 @@ JASC-PAL
146 129 121
47 47 40
147 63 121
104 40 71
88 56 64
200 95 172
229 229 247
0 0 0
0 0 0
0 0 0
0 0 0
84 21 43
131 41 57
222 82 90
161 48 74
0 0 0

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
153 210 164
82 32 47
136 40 51
180 68 48
152 208 160
93 41 57
238 98 16
7 7 7
208 192 128
174 151 96
216 201 140
175 152 96
47 47 40
224 80 69
104 40 71
173 74 69
96 88 62
224 107 96
229 229 247
0 0 0
0 0 0
0 0 0
0 0 0
84 21 43
131 41 57
222 82 90
178 81 60
0 0 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 949 B

After

Width:  |  Height:  |  Size: 1008 B

View File

@ -5,14 +5,14 @@ JASC-PAL
55 55 55
87 87 87
0 0 0
24 56 64
31 72 64
232 128 56
11 55 112
24 112 104
32 160 136
176 104 32
236 79 47
172 47 25
236 204 110
153 115 64
33 33 33
0 0 0
0 0 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 547 B

After

Width:  |  Height:  |  Size: 727 B

View File

@ -1,11 +1,11 @@
JASC-PAL
0100
16
152 208 160
0 0 0
115 202 202
52 19 21
88 152 48
144 200 8
88 152 48
36 86 26
152 120 8
248 208 64
192 152 64
@ -14,6 +14,6 @@ JASC-PAL
80 80 80
224 128 8
152 120 8
0 0 0
192 185 180
0 0 0
0 0 0

View File

@ -2,18 +2,18 @@ JASC-PAL
0100
16
152 208 160
0 0 0
24 52 31
64 152 104
104 184 144
88 152 48
60 96 48
120 64 72
240 248 168
200 232 48
206 252 139
168 211 48
112 128 16
252 252 252
80 80 80
248 88 64
152 120 8
0 0 0
192 185 180
0 0 0
0 0 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 606 B

After

Width:  |  Height:  |  Size: 656 B

View File

@ -10,9 +10,9 @@ JASC-PAL
121 40 55
191 79 104
236 112 129
95 47 40
55 47 40
229 229 247
138 87 79
105 96 91
79 47 5
164 104 5
112 71 5

View File

@ -2,18 +2,18 @@ JASC-PAL
0100
16
152 208 160
80 61 60
96 88 62
208 192 128
2 2 2
175 151 96
2 2 2
186 71 45
186 71 45
236 112 129
80 61 60
139 55 62
173 74 69
224 107 96
93 41 57
213 210 213
186 71 45
79 47 5
186 71 45
164 104 5
112 71 5
218 172 87

Binary file not shown.

Before

Width:  |  Height:  |  Size: 698 B

After

Width:  |  Height:  |  Size: 764 B

View File

@ -6,12 +6,12 @@ JASC-PAL
64 56 72
100 85 143
128 104 160
88 152 136
88 163 136
0 0 0
64 64 80
40 40 40
168 128 64
208 176 96
209 128 175
208 176 185
96 80 128
0 0 0
0 0 0

View File

@ -148,7 +148,7 @@ enum MoveCanceler
MOVE_STEP_SUCCESS,
MOVE_STEP_BREAK, // Breaks out of the function to run a script
MOVE_STEP_FAILURE, // Same as break but breaks out of it due to move failure and jumps to script that handles the failure
MOVE_STEP_REMOVES_STATUS,
MOVE_STEP_STATUS_CHANGE,
};
extern const struct TypePower gNaturalGiftTable[];

View File

@ -750,7 +750,7 @@ struct BattleTestData
u8 gender;
u8 nature;
bool8 isShiny;
enum Ability forcedAbilities[NUM_BATTLE_SIDES][PARTY_SIZE];
enum Ability forcedAbilities[MAX_BATTLERS_COUNT][PARTY_SIZE];
u8 chosenGimmick[NUM_BATTLE_SIDES][PARTY_SIZE];
u8 forcedEnvironment;

View File

@ -31,7 +31,7 @@ void TestRunner_CheckMemory(void);
void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType);
u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex);
u32 TestRunner_Battle_GetForcedAbility(u32 array, u32 partyIndex);
u32 TestRunner_Battle_GetChosenGimmick(u32 side, u32 partyIndex);
u32 TestRunner_Battle_GetForcedEnvironment(void);

View File

@ -1091,6 +1091,23 @@ static bool32 ShouldSwitchIfAttackingStatsLowered(u32 battler)
return FALSE;
}
static bool32 CanBattlerConsiderSwitch(u32 battler)
{
if (gBattleMons[battler].volatiles.wrapped)
return FALSE;
if (gBattleMons[battler].volatiles.escapePrevention)
return FALSE;
if (gBattleMons[battler].volatiles.root)
return FALSE;
if (IsAbilityPreventingEscape(battler))
return FALSE;
if (gBattleStruct->battlerState[battler].commanderSpecies)
return FALSE;
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
return FALSE;
return TRUE;
}
bool32 ShouldSwitch(u32 battler)
{
u32 battlerIn1, battlerIn2;
@ -1100,15 +1117,7 @@ bool32 ShouldSwitch(u32 battler)
s32 i;
s32 availableToSwitch;
if (gBattleMons[battler].volatiles.wrapped)
return FALSE;
if (gBattleMons[battler].volatiles.escapePrevention)
return FALSE;
if (gBattleMons[battler].volatiles.root)
return FALSE;
if (IsAbilityPreventingEscape(battler))
return FALSE;
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
if (!CanBattlerConsiderSwitch(battler))
return FALSE;
// Sequence Switching AI never switches mid-battle
@ -1251,15 +1260,7 @@ void ModifySwitchAfterMoveScoring(u32 battler)
s32 i;
s32 availableToSwitch;
if (gBattleMons[battler].volatiles.wrapped)
return;
if (gBattleMons[battler].volatiles.escapePrevention)
return;
if (gBattleMons[battler].volatiles.root)
return;
if (IsAbilityPreventingEscape(battler))
return;
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
if (!CanBattlerConsiderSwitch(battler))
return;
// Sequence Switching AI never switches mid-battle

View File

@ -901,6 +901,10 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u
struct AiLogicData *aiData = gAiLogicData;
gAiLogicData->aiCalcInProgress = TRUE;
if (moveEffect == EFFECT_HIT_ENEMY_HEAL_ALLY
&& battlerDef == BATTLE_PARTNER(battlerAtk))
return simDamage;
if (moveEffect == EFFECT_NATURE_POWER)
move = GetNaturePowerMove(battlerAtk);

View File

@ -43,6 +43,7 @@ static void RecordedPartnerHandleIntroTrainerBallThrow(u32 battler);
static void RecordedPartnerHandleDrawPartyStatusSummary(u32 battler);
static void RecordedPartnerHandleEndLinkBattle(u32 battler);
static void RecordedPartnerBufferRunCommand(u32 battler);
static void RecordedPartnerHandleStatusIconUpdate(u32 battler);
static void (*const sRecordedPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) =
{
@ -72,7 +73,7 @@ static void (*const sRecordedPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 b
[CONTROLLER_23] = BtlController_Empty,
[CONTROLLER_HEALTHBARUPDATE] = BtlController_HandleHealthBarUpdate,
[CONTROLLER_EXPUPDATE] = PlayerHandleExpUpdate, // Partner's player gets experience the same way as the player.
[CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate,
[CONTROLLER_STATUSICONUPDATE] = RecordedPartnerHandleStatusIconUpdate,
[CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation,
[CONTROLLER_STATUSXOR] = BtlController_Empty,
[CONTROLLER_DATATRANSFER] = BtlController_Empty,
@ -267,3 +268,13 @@ static void RecordedPartnerHandleEndLinkBattle(u32 battler)
BtlController_Complete(battler);
gBattlerControllerFuncs[battler] = SetBattleEndCallbacks;
}
static void RecordedPartnerHandleStatusIconUpdate(u32 battler)
{
if (!IsBattleSEPlaying(battler))
{
DoStatusIconUpdate(battler);
if (gTestRunnerEnabled)
TestRunner_Battle_RecordStatus1(battler, GetMonData(GetBattlerMon(battler), MON_DATA_STATUS));
}
}

View File

@ -1438,10 +1438,10 @@ static u32 GetBattlerMonData(u32 battler, struct Pokemon *party, u32 monId, u8 *
#if TESTING
if (gTestRunnerEnabled)
{
u32 side = GetBattlerSide(battler);
u32 array = (!IsPartnerMonFromSameTrainer(battler)) ? battler : GetBattlerSide(battler);
u32 partyIndex = gBattlerPartyIndexes[battler];
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex);
if (TestRunner_Battle_GetForcedAbility(array, partyIndex))
gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(array, partyIndex);
}
#endif
break;

View File

@ -956,8 +956,8 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 changeType)
if (changeType == SPECIES_GFX_CHANGE_TRANSFORM)
{
personalityValue = gDisableStructs[battlerAtk].transformedMonPersonality;
isShiny = gDisableStructs[battlerAtk].transformedMonShininess;
personalityValue = gTransformedPersonalities[battlerAtk];
isShiny = gTransformedShininess[battlerAtk];
}
else
{

View File

@ -3284,10 +3284,10 @@ void SwitchInClearSetData(u32 battler, struct Volatiles *volatilesCopy)
#if TESTING
if (gTestRunnerEnabled)
{
u32 side = GetBattlerSide(battler);
u32 array = (!IsPartnerMonFromSameTrainer(battler)) ? battler : GetBattlerSide(battler);
u32 partyIndex = gBattlerPartyIndexes[battler];
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
gBattleMons[i].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex);
if (TestRunner_Battle_GetForcedAbility(array, partyIndex))
gBattleMons[i].ability = TestRunner_Battle_GetForcedAbility(array, partyIndex);
}
#endif // TESTING
@ -3495,10 +3495,10 @@ static void DoBattleIntro(void)
#if TESTING
if (gTestRunnerEnabled)
{
u32 side = GetBattlerSide(battler);
u32 array = (!IsPartnerMonFromSameTrainer(battler)) ? battler : GetBattlerSide(battler);
u32 partyIndex = gBattlerPartyIndexes[battler];
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex);
if (TestRunner_Battle_GetForcedAbility(array, partyIndex))
gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(array, partyIndex);
}
#endif
}
@ -3794,10 +3794,10 @@ static void TryDoEventsBeforeFirstTurn(void)
{
for (i = 0; i < gBattlersCount; ++i)
{
u32 side = GetBattlerSide(i);
u32 array = (!IsPartnerMonFromSameTrainer(i)) ? i : GetBattlerSide(i);
u32 partyIndex = gBattlerPartyIndexes[i];
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
gBattleMons[i].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex);
if (TestRunner_Battle_GetForcedAbility(array, partyIndex))
gBattleMons[i].ability = TestRunner_Battle_GetForcedAbility(array, partyIndex);
}
}
#endif // TESTING

View File

@ -3036,6 +3036,7 @@ void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, c
case MOVE_EFFECT_STEALTH_ROCK:
case MOVE_EFFECT_PAYDAY:
case MOVE_EFFECT_BUG_BITE:
case MOVE_EFFECT_FLAME_BURST:
activateAfterFaint = TRUE;
break;
default:
@ -4281,7 +4282,7 @@ static void Cmd_tryfaintmon(void)
}
}
if (cmd->battler == BS_ATTACKER)
if (cmd->battler == BS_TARGET && gCurrentMove != MOVE_NONE)
TryUpdateEvolutionTracker(IF_DEFEAT_X_WITH_ITEMS, 1, MOVE_NONE);
gBattlerFainted = battler;
@ -7308,10 +7309,10 @@ static void Cmd_switchindataupdate(void)
#if TESTING
if (gTestRunnerEnabled)
{
u32 side = GetBattlerSide(battler);
u32 array = (!IsPartnerMonFromSameTrainer(battler)) ? battler : GetBattlerSide(battler);
u32 partyIndex = gBattlerPartyIndexes[battler];
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex);
if (TestRunner_Battle_GetForcedAbility(array, partyIndex))
gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(array, partyIndex);
}
#endif
@ -11303,10 +11304,10 @@ static void Cmd_mimicattackcopy(void)
{
CMD_ARGS(const u8 *failInstr);
if ((IsMoveMimicBanned(gLastMoves[gBattlerTarget]))
|| (gBattleMons[gBattlerAttacker].volatiles.transformed)
|| gLastMoves[gBattlerTarget] == MOVE_NONE
|| gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE)
if (gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE
|| gLastMoves[gBattlerTarget] == MOVE_NONE
|| gBattleMons[gBattlerAttacker].volatiles.transformed
|| IsMoveMimicBanned(gLastMoves[gBattlerTarget]))
{
gBattlescriptCurrInstr = cmd->failInstr;
}
@ -11846,9 +11847,9 @@ static void Cmd_healpartystatus(void)
#if TESTING
if (gTestRunnerEnabled)
{
u32 side = GetBattlerSide(gBattlerAttacker);
if (TestRunner_Battle_GetForcedAbility(side, i))
ability = TestRunner_Battle_GetForcedAbility(side, i);
u32 array = (!IsPartnerMonFromSameTrainer(gBattlerAttacker)) ? gBattlerAttacker : GetBattlerSide(gBattlerAttacker);
if (TestRunner_Battle_GetForcedAbility(array, i))
ability = TestRunner_Battle_GetForcedAbility(array, i);
}
#endif
}
@ -12733,7 +12734,7 @@ static void Cmd_tryswapitems(void)
if (GetBattlerAbility(gBattlerTarget) != ABILITY_GORILLA_TACTICS)
gBattleStruct->choicedMove[gBattlerTarget] = MOVE_NONE;
if (GetBattlerAbility(gBattlerTarget) != ABILITY_GORILLA_TACTICS)
if (GetBattlerAbility(gBattlerAttacker) != ABILITY_GORILLA_TACTICS)
gBattleStruct->choicedMove[gBattlerAttacker] = MOVE_NONE;
gBattlescriptCurrInstr = cmd->nextInstr;
@ -15474,11 +15475,12 @@ static void TryUpdateEvolutionTracker(u32 evolutionCondition, u32 upAmount, u16
u32 i, j;
if (IsOnPlayerSide(gBattlerAttacker)
&& !(gBattleTypeFlags & (BATTLE_TYPE_LINK
&& ((TESTING && IsDoubleBattle()) // To be removed when Wild Double Battles are added to tests
|| !(gBattleTypeFlags & (BATTLE_TYPE_LINK
| BATTLE_TYPE_EREADER_TRAINER
| BATTLE_TYPE_RECORDED_LINK
| BATTLE_TYPE_TRAINER_HILL
| BATTLE_TYPE_FRONTIER)))
| BATTLE_TYPE_FRONTIER))))
{
const struct Evolution *evolutions = GetSpeciesEvolutions(gBattleMons[gBattlerAttacker].species);
if (evolutions == NULL)
@ -16609,7 +16611,27 @@ void BS_GetStatValue(void)
{
NATIVE_ARGS(u8 stat);
u32 stat = cmd->stat;
gBattleStruct->passiveHpUpdate[gBattlerAttacker] = *(u16 *)(&gBattleMons[gBattlerTarget].attack) + (stat - 1);
switch (stat)
{
case STAT_ATK:
gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerTarget].attack;
break;
case STAT_DEF:
gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerTarget].defense;
break;
case STAT_SPATK:
gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerTarget].spAttack;
break;
case STAT_SPDEF:
gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerTarget].spDefense;
break;
case STAT_SPEED:
gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerTarget].speed;
break;
default:
// Add errorf here on upcoming
return;
}
gBattleStruct->passiveHpUpdate[gBattlerAttacker] *= gStatStageRatios[gBattleMons[gBattlerTarget].statStages[stat]][0];
gBattleStruct->passiveHpUpdate[gBattlerAttacker] /= gStatStageRatios[gBattleMons[gBattlerTarget].statStages[stat]][1];
gBattlescriptCurrInstr = cmd->nextInstr;
@ -18012,3 +18034,29 @@ void BS_JumpIfGenConfigLowerThan(void)
else
gBattlescriptCurrInstr = cmd->nextInstr;
}
// Used when the Pokemon faints before Toxic Spikes would normally be processed in the hazards queue.
void BS_TryAbsorbToxicSpikesOnFaint(void)
{
NATIVE_ARGS();
u32 battler = gBattlerFainted;
u32 side = GetBattlerSide(battler);
if (gSideTimers[side].toxicSpikesAmount == 0)
{
gBattlescriptCurrInstr = cmd->nextInstr;
return;
}
if (IsBattlerGrounded(battler, GetBattlerAbility(battler), GetBattlerHoldEffect(battler))
&& IS_BATTLER_OF_TYPE(battler, TYPE_POISON))
{
gSideTimers[side].toxicSpikesAmount = 0;
RemoveHazardFromField(side, HAZARDS_TOXIC_SPIKES);
gEffectBattler = battler;
BattleScriptCall(BattleScript_ToxicSpikesAbsorbed);
return;
}
gBattlescriptCurrInstr = cmd->nextInstr;
}

View File

@ -2046,7 +2046,7 @@ static enum MoveCanceler CancelerAsleepOrFrozen(struct BattleContext *ctx)
gEffectBattler = ctx->battlerAtk;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WOKE_UP_UPROAR;
BattleScriptCall(BattleScript_MoveUsedWokeUp);
return MOVE_STEP_REMOVES_STATUS;
return MOVE_STEP_STATUS_CHANGE;
}
else
{
@ -2068,7 +2068,6 @@ static enum MoveCanceler CancelerAsleepOrFrozen(struct BattleContext *ctx)
gProtectStructs[ctx->battlerAtk].nonVolatileStatusImmobility = TRUE;
gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
return MOVE_STEP_FAILURE;
}
}
else
@ -2077,8 +2076,8 @@ static enum MoveCanceler CancelerAsleepOrFrozen(struct BattleContext *ctx)
gBattleMons[ctx->battlerAtk].volatiles.nightmare = FALSE;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WOKE_UP;
BattleScriptCall(BattleScript_MoveUsedWokeUp);
return MOVE_STEP_REMOVES_STATUS;
}
return MOVE_STEP_STATUS_CHANGE;
}
}
else if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_FREEZE && !MoveThawsUser(ctx->currentMove))
@ -2095,7 +2094,7 @@ static enum MoveCanceler CancelerAsleepOrFrozen(struct BattleContext *ctx)
BattleScriptCall(BattleScript_MoveUsedUnfroze);
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DEFROSTED;
}
return MOVE_STEP_REMOVES_STATUS; // Move failure but also removes status
return MOVE_STEP_STATUS_CHANGE; // Move failure but also removes status
}
return MOVE_STEP_SUCCESS;
}
@ -2500,7 +2499,7 @@ static enum MoveCanceler CancelerThaw(struct BattleContext *ctx)
BattleScriptCall(BattleScript_MoveUsedUnfroze);
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DEFROSTED_BY_MOVE;
}
return MOVE_STEP_REMOVES_STATUS;
return MOVE_STEP_STATUS_CHANGE;
}
if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_FROSTBITE && MoveThawsUser(ctx->currentMove))
{
@ -2510,7 +2509,7 @@ static enum MoveCanceler CancelerThaw(struct BattleContext *ctx)
BattleScriptCall(BattleScript_MoveUsedUnfrostbite);
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FROSTBITE_HEALED_BY_MOVE;
}
return MOVE_STEP_REMOVES_STATUS;
return MOVE_STEP_STATUS_CHANGE;
}
return MOVE_STEP_SUCCESS;
}
@ -3047,7 +3046,7 @@ enum MoveCanceler AtkCanceler_MoveSuccessOrder(struct BattleContext *ctx)
gBattleStruct->eventState.atkCanceler++;
}
if (effect == MOVE_STEP_REMOVES_STATUS)
if (effect == MOVE_STEP_STATUS_CHANGE)
{
BtlController_EmitSetMonData(
ctx->battlerAtk,
@ -6983,7 +6982,7 @@ static inline u32 IsFieldWaterSportAffected(enum Type moveType)
{
if (moveType != TYPE_FIRE)
return FALSE;
if (gFieldStatuses & STATUS_FIELD_WATERSPORT)
return TRUE;

View File

@ -37,7 +37,7 @@ sp_irq: .word IWRAM_END - 0x60
.pool
.arm
.section .iwram.code
.section .iwram.code, "ax", %progbits
.align 2, 0
IntrMain::
mov r3, #REG_BASE

View File

@ -12393,7 +12393,6 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.category = DAMAGE_CATEGORY_SPECIAL,
.additionalEffects = ADDITIONAL_EFFECTS({
.moveEffect = MOVE_EFFECT_FLAME_BURST,
.self = TRUE,
}),
.contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
.contestCategory = CONTEST_CATEGORY_BEAUTY,

View File

@ -4988,42 +4988,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
"利用月光的力量,\n"
"自如地控制周围20米\n"
"的重力来四处飞行。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Clefable)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sClefableLevelUpLearnset,
.teachableLearnset = sClefableTeachableLearnset,
@ -9136,42 +9116,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
"口中充满因超级进化\n"
"而增加的溶解液。一不留神\n"
"就会从嘴里溢出。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Victreebel)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sVictreebelLevelUpLearnset,
.teachableLearnset = sVictreebelTeachableLearnset,
@ -15465,42 +15425,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
"动作变得越来越像人。\n"
"它是试图沟通,还是打算代替\n"
"人类,仍是未解之谜。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Starmie)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sStarmieLevelUpLearnset,
.teachableLearnset = sStarmieTeachableLearnset,
@ -19937,42 +19877,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
"超级进化的能量让它的\n"
"情感变得过于温柔。\n"
"会以慈悲之心终结敌人。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Dragonite)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sDragoniteLevelUpLearnset,
.teachableLearnset = sDragoniteTeachableLearnset,

View File

@ -261,42 +261,22 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.description = COMPOUND_STRING(
"从4朵花中放出的日光束\n"
"威力巨大。别名超级日光炮。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Meganium)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sMeganiumLevelUpLearnset,
.teachableLearnset = sMeganiumTeachableLearnset,
@ -837,42 +817,22 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
"用兜帽般的鳍和双臂\n"
"构成一个巨大的颚,\n"
"咬合的威力提升为10倍。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Feraligatr)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sFeraligatrLevelUpLearnset,
.teachableLearnset = sFeraligatrTeachableLearnset,
@ -7193,42 +7153,22 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
"飞行速度超过音速。\n"
"会掀起冲击波吹飞敌人,\n"
"并用爪子给予致命一击。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Skarmory)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sSkarmoryLevelUpLearnset,
.teachableLearnset = sSkarmoryTeachableLearnset,

View File

@ -10570,42 +10570,22 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
"散发出带有幽灵能量的\n"
"诡异冷气,连火和风等没有\n"
"形状的东西也能冻住。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Froslass)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sFroslassLevelUpLearnset,
.teachableLearnset = sFroslassTeachableLearnset,

View File

@ -538,42 +538,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
"会高举熊熊燃烧的蛇矛状\n"
"火焰,火速赶去援救陷入\n"
"困境的伙伴。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Emboar)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sEmboarLevelUpLearnset,
.teachableLearnset = sEmboarTeachableLearnset,
@ -2836,42 +2816,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
"只要把头和双手合在一起\n"
"形成流线型,再高速旋转\n"
"就能破坏一切。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Excadrill)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sExcadrillLevelUpLearnset,
.teachableLearnset = sExcadrillTeachableLearnset,
@ -4065,42 +4025,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
"闪烁暗淡光芒的剧毒会\n"
"作用于蜈蚣王的精神,\n"
"让它变得更加凶暴。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Scolipede)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sScolipedeLevelUpLearnset,
.teachableLearnset = sScolipedeTeachableLearnset,
@ -5794,42 +5734,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
"在超级进化的影响下,\n"
"皮肤变得又白又硬且有弹性。\n"
"气势当然是十足的。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Scrafty)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sScraftyLevelUpLearnset,
.teachableLearnset = sScraftyTeachableLearnset,
@ -9732,42 +9652,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
"发电量是超级进化前的10倍。\n"
"会从由粘液构成的假麻麻鳗\n"
"那里放电。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Eelektross)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sEelektrossLevelUpLearnset,
.teachableLearnset = sEelektrossTeachableLearnset,
@ -10165,42 +10065,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
"两只眼睛中的一只是连接这个世界\n"
"和另一个世界的窗口。\n"
"会吸取怨念并将其化为力量。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Chandelure)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sChandelureLevelUpLearnset,
.teachableLearnset = sChandelureTeachableLearnset,

View File

@ -240,42 +240,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"拥有防守至上的意志以及\n"
"经过强化的装甲。\n"
"两者都坚不可摧。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Chesnaught)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sChesnaughtLevelUpLearnset,
.teachableLearnset = sChesnaughtTeachableLearnset,
@ -527,42 +507,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会操控燃起火焰的枝条让\n"
"对手变得神魂颠倒,\n"
"再用大火球将其燃烧殆尽。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Delphox)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sDelphoxLevelUpLearnset,
.teachableLearnset = sDelphoxTeachableLearnset,
@ -936,42 +896,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会高速旋转巨大的手里剑\n"
"使其浮空,倒贴在上面\n"
"打对手一个出其不意。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Greninja)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sGreninjaLevelUpLearnset,
.teachableLearnset = sGreninjaTeachableLearnset,
@ -1898,42 +1838,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"能吐出超过1万度的火焰。\n"
"会一边乱摆熊熊燃烧的鬃毛,\n"
"一边保护伙伴。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Pyroar)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sPyroarLevelUpLearnset,
.teachableLearnset = sPyroarTeachableLearnset,
@ -2299,42 +2219,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.description = COMPOUND_STRING(
"永恒之花会将超级进化的能量吸尽。\n"
"花可以独自袭击敌人。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Floette)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sFloetteEternalLevelUpLearnset,
.teachableLearnset = sFloetteEternalTeachableLearnset,
@ -3633,42 +3533,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会用颜色鲜艳的光覆盖\n"
"对手的人格和记忆,\n"
"将其按自己的意愿操纵。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Malamar)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sMalamarLevelUpLearnset,
.teachableLearnset = sMalamarTeachableLearnset,
@ -3849,42 +3729,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"虽然能用很多胳膊将对手\n"
"耍得团团转,但头部的\n"
"龟足巨铠会相当忙。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Barbaracle)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sBarbaracleLevelUpLearnset,
.teachableLearnset = sBarbaracleTeachableLearnset,
@ -4067,42 +3927,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会吐出能让细胞的再生力\n"
"失控的液体。除了自己,\n"
"对谁都是剧毒。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Dragalge)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sDragalgeLevelUpLearnset,
.teachableLearnset = sDragalgeTeachableLearnset,
@ -4773,42 +4613,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会利用因超级进化而\n"
"激增的浑身肌肉\n"
"炫耀自己强而有力。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Hawlucha)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sHawluchaLevelUpLearnset,
.teachableLearnset = sHawluchaTeachableLearnset,
@ -6968,42 +6788,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"当空前的危机来临时,\n"
"感受人类的思绪而超级进化。\n"
"能用无双之力将事态平息。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Zygarde)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sZygardeLevelUpLearnset,
.teachableLearnset = sZygardeTeachableLearnset,

View File

@ -5176,42 +5176,22 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
"激活全身细胞,\n"
"恢复青春后的模样。\n"
"能操控大气,呼风唤雨。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Drampa)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sDrampaLevelUpLearnset,
.teachableLearnset = sDrampaTeachableLearnset,

View File

@ -5214,42 +5214,22 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.description = COMPOUND_STRING(
"仅限拥有牢固牵绊的头头和\n"
"跟班才能组成的究极阵形。"),
.frontPic = gMonFrontPic_CircledQuestionMark,
.frontPicSize = MON_COORDS_SIZE(40, 40),
.frontPicYOffset = 12,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_CircledQuestionMark,
.backPicSize = MON_COORDS_SIZE(40, 40),
.backPicYOffset = 12,
.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_CircledQuestionMark,
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
// .frontPic = gMonFrontPic_CircledQuestionMark,
// .frontPicSize = MON_COORDS_SIZE(40, 40),
// .frontPicYOffset = 12,
// .frontAnimFrames = sAnims_TwoFramePlaceHolder,
// .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
// .backPic = gMonBackPic_CircledQuestionMark,
// .backPicSize = MON_COORDS_SIZE(40, 40),
// .backPicYOffset = 12,
// .backAnimId = BACK_ANIM_NONE,
// .palette = gMonPalette_CircledQuestionMark,
// .shinyPalette = gMonShinyPalette_CircledQuestionMark,
// .iconSprite = gMonIcon_QuestionMark,
// .iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_BATTLE_ONLY_FORMS
.overworldData = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
.reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
.size = 512,
.width = 32,
.height = 32,
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
.compressed = COMP,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Following,
.images = sPicTable_Substitute,
.affineAnims = gDummySpriteAffineAnimTable,
},
#endif //OW_BATTLE_ONLY_FORMS
FOOTPRINT(Falinks)
//SHADOW(-1, 0, SHADOW_SIZE_M)
.isMegaEvolution = TRUE,
.levelUpLearnset = sFalinksLevelUpLearnset,
.teachableLearnset = sFalinksTeachableLearnset,

View File

@ -2091,7 +2091,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_Naclstack,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, 5, SHADOW_SIZE_L)
SHADOW(0, 2, SHADOW_SIZE_L)
FOOTPRINT(Naclstack)
OVERWORLD(
sPicTable_Naclstack,
@ -2154,7 +2154,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_Garganacl,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_L)
SHADOW(0, 9, SHADOW_SIZE_L)
FOOTPRINT(Garganacl)
OVERWORLD(
sPicTable_Garganacl,

View File

@ -1,7 +1,7 @@
.syntax unified
.arm
.section .iwram.code
.section .iwram.code, "ax", %progbits
.align 2
.global FastUnsafeCopy32

View File

@ -85,7 +85,7 @@ lt_o_SoundInfo_pcmBuffer: .word o_SoundInfo_pcmBuffer
lt_PCM_DMA_BUF_SIZE: .word PCM_DMA_BUF_SIZE
thumb_func_end SoundMain
.section .iwram.code
.section .iwram.code, "ax", %progbits
thumb_func_start SoundMainRAM
SoundMainRAM:
ldrb r3, [r0, o_SoundInfo_reverb]

View File

@ -1716,11 +1716,12 @@ static void OverworldBasic(void)
gTimeUpdateCounter = (SECONDS_PER_MINUTE * 60 / FakeRtc_GetSecondsRatio());
UpdateTimeOfDay();
FormChangeTimeUpdate();
if (bld0[0] != bld1[0]
if (MapHasNaturalLight(gMapHeader.mapType) &&
(bld0[0] != bld1[0]
|| bld0[1] != bld1[1]
|| bld0[2] != bld1[2])
|| bld0[2] != bld1[2]))
{
ApplyWeatherColorMapIfIdle(gWeatherPtr->colorMapIndex);
ApplyWeatherColorMapIfIdle(gWeatherPtr->colorMapIndex);
}
}
}

View File

@ -58,37 +58,6 @@ static struct PokemonSpriteVisualizer *GetStructPtr(u8 taskId)
return (struct PokemonSpriteVisualizer*)(T1_READ_PTR(taskDataPtr));
}
static const union AnimCmd sAnim_Follower_1[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_FRAME(1, 30),
ANIMCMD_FRAME(0, 30),
ANIMCMD_FRAME(1, 30),
ANIMCMD_FRAME(0, 10),
ANIMCMD_FRAME(2, 30),
ANIMCMD_FRAME(3, 30),
ANIMCMD_FRAME(2, 30),
ANIMCMD_FRAME(3, 30),
ANIMCMD_FRAME(2, 10),
ANIMCMD_FRAME(4, 30),
ANIMCMD_FRAME(5, 30),
ANIMCMD_FRAME(4, 30),
ANIMCMD_FRAME(5, 30),
ANIMCMD_FRAME(4, 10),
ANIMCMD_FRAME(4, 30, .hFlip = TRUE),
ANIMCMD_FRAME(5, 30, .hFlip = TRUE),
ANIMCMD_FRAME(4, 30, .hFlip = TRUE),
ANIMCMD_FRAME(5, 30, .hFlip = TRUE),
ANIMCMD_FRAME(4, 10, .hFlip = TRUE),
ANIMCMD_END,
};
static const union AnimCmd *const sAnims_Follower[] =
{
sAnim_GeneralFrame0,
sAnim_Follower_1,
};
//BgTemplates
static const struct BgTemplate sBgTemplates[] =
{
@ -842,32 +811,32 @@ static void SpriteCB_EnemyShadowCustom(struct Sprite *shadowSprite)
static void SpriteCB_Follower(struct Sprite *sprite)
{
if (sprite->animDelayCounter == 0)
if (sprite->data[3] == 0)
{
sprite->animDelayCounter = 60;
sprite->data[3] = 120;
switch (sprite->animNum)
{
default:
case 0:
case 1:
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_NORTH));
break;
case 2:
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_WEST));
break;
case 3:
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_EAST));
break;
case 4:
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_SOUTH));
StartSpriteAnim(sprite, GetMoveDirectionAnimNum(DIR_NORTH));
break;
case 5:
StartSpriteAnim(sprite, GetMoveDirectionAnimNum(DIR_WEST));
break;
case 6:
StartSpriteAnim(sprite, GetMoveDirectionAnimNum(DIR_EAST));
break;
default:
case 7:
StartSpriteAnim(sprite, GetMoveDirectionAnimNum(DIR_SOUTH));
break;
}
}
else
{
sprite->animDelayCounter--;
sprite->data[3]--;
}
}
static void LoadAndCreateEnemyShadowSpriteCustom(struct PokemonSpriteVisualizer *data, u16 species)
{
bool8 invisible = FALSE;
@ -1315,9 +1284,26 @@ void CB2_Pokemon_Sprite_Visualizer(void)
gSprites[data->iconspriteId].oam.priority = 0;
//Follower Sprite
data->followerspriteId = CreateObjectGraphicsSprite(OBJ_EVENT_MON + species, SpriteCB_Follower, VISUALIZER_FOLLOWER_X, VISUALIZER_FOLLOWER_Y, 0);
u16 graphicsId = species + OBJ_EVENT_MON;
if (data->isShiny)
graphicsId += OBJ_EVENT_MON_SHINY;
if (data->isFemale)
graphicsId += OBJ_EVENT_MON_FEMALE;
data->followerspriteId = CreateObjectGraphicsSprite(graphicsId,
SpriteCB_Follower,
VISUALIZER_FOLLOWER_X,
VISUALIZER_FOLLOWER_Y,
0);
gSprites[data->followerspriteId].oam.priority = 0;
gSprites[data->followerspriteId].anims = sAnims_Follower;
const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, data->isShiny, data->isFemale);
if (graphicsInfo != NULL)
{
gSprites[data->followerspriteId].oam.shape = graphicsInfo->oam->shape;
gSprites[data->followerspriteId].oam.size = graphicsInfo->oam->size;
gSprites[data->followerspriteId].images = graphicsInfo->images;
gSprites[data->followerspriteId].anims = graphicsInfo->anims;
gSprites[data->followerspriteId].subspriteTables = graphicsInfo->subspriteTables;
}
//Modify Arrows
SetUpModifyArrows(data);
@ -2017,7 +2003,15 @@ static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data)
VISUALIZER_FOLLOWER_Y,
0);
gSprites[data->followerspriteId].oam.priority = 0;
gSprites[data->followerspriteId].anims = sAnims_Follower;
const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, data->isShiny, data->isFemale);
if (graphicsInfo != NULL)
{
gSprites[data->followerspriteId].oam.shape = graphicsInfo->oam->shape;
gSprites[data->followerspriteId].oam.size = graphicsInfo->oam->size;
gSprites[data->followerspriteId].images = graphicsInfo->images;
gSprites[data->followerspriteId].anims = graphicsInfo->anims;
gSprites[data->followerspriteId].subspriteTables = graphicsInfo->subspriteTables;
}
//Modify Arrows
LoadSpritePalette(&gSpritePalette_Arrow);

View File

@ -112,3 +112,47 @@ SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield both can be Skill Swappe
MESSAGE("Wobbuffet's Dauntless Shield raised its Defense!");
}
}
SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield do not proc at max stage (Skill Swap)")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_SKILL_SWAP) == EFFECT_SKILL_SWAP);
ASSUME(GetMoveEffect(MOVE_IRON_DEFENSE) == EFFECT_DEFENSE_UP_2);
ASSUME(GetMoveEffect(MOVE_SWORDS_DANCE) == EFFECT_ATTACK_UP_2);
PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
OPPONENT(SPECIES_ZAMAZENTA) { Ability(ABILITY_DAUNTLESS_SHIELD); }
} WHEN {
TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);}
TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);}
TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);}
TURN { MOVE(player, MOVE_SKILL_SWAP); }
} SCENE {
NONE_OF {
ABILITY_POPUP(player, ABILITY_DAUNTLESS_SHIELD);
ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD);
}
}
}
SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield do not proc at max stage (Baton Pass)")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_BATON_PASS) == EFFECT_BATON_PASS);
ASSUME(GetMoveEffect(MOVE_IRON_DEFENSE) == EFFECT_DEFENSE_UP_2);
ASSUME(GetMoveEffect(MOVE_SWORDS_DANCE) == EFFECT_ATTACK_UP_2);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_ZAMAZENTA) { Ability(ABILITY_DAUNTLESS_SHIELD); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
} WHEN {
TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);}
TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);}
TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);}
TURN { MOVE(player, MOVE_BATON_PASS); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(player, 1); SEND_OUT(opponent, 1);}
} SCENE {
NONE_OF {
ABILITY_POPUP(player, ABILITY_DAUNTLESS_SHIELD);
ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD);
}
}
}

View File

@ -163,7 +163,7 @@ SINGLE_BATTLE_TEST("Liquid Ooze causes Dream Eater users to lose HP instead of h
}
}
SINGLE_BATTLE_TEST("Liquid Ooze does not cause Dream Eater users to lose HP instead of heal (Gen 3-4")
SINGLE_BATTLE_TEST("Liquid Ooze does not cause Dream Eater users to lose HP instead of heal (Gen 3-4)")
{
s16 damage;
GIVEN {

View File

@ -222,3 +222,31 @@ AI_MULTI_BATTLE_TEST("AI opponents do not steal their partner pokemon in multi b
EXPECT_EQ(SPECIES_VENUSAUR, opponentLeft->species);
}
}
AI_MULTI_BATTLE_TEST("Pollen Puff: AI correctly scores moves with EFFECT_HIT_ENEMY_HEAL_ALLY as damaging opponents but not allies")
{
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT);
ASSUME(GetMoveEffect(MOVE_POLLEN_PUFF) == EFFECT_HIT_ENEMY_HEAL_ALLY);
// Speed tie so all think they are faster
MULTI_PLAYER(SPECIES_WOBBUFFET) { Speed(1); HP(50); Moves(MOVE_POLLEN_PUFF, MOVE_CELEBRATE); }
MULTI_PARTNER(SPECIES_WOBBUFFET) { Speed(1); HP(50); Moves(MOVE_POLLEN_PUFF); }
MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Speed(1); HP(50); Moves(MOVE_POLLEN_PUFF); }
MULTI_OPPONENT_B(SPECIES_WOBBUFFET) { Speed(1); HP(50); Moves(MOVE_POLLEN_PUFF); }
} WHEN {
TURN {
// Targeting ally
SCORE_EQ_VAL(opponentLeft, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + WEAK_EFFECT, target:opponentRight);
SCORE_EQ_VAL(playerRight, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + WEAK_EFFECT, target:playerLeft);
SCORE_EQ_VAL(opponentRight, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + WEAK_EFFECT, target:opponentLeft);
// Targeting opponent
SCORE_EQ_VAL(opponentLeft, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + BEST_DAMAGE_MOVE + FAST_KILL, target:playerLeft);
SCORE_EQ_VAL(opponentLeft, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + BEST_DAMAGE_MOVE + FAST_KILL, target:playerRight);
SCORE_EQ_VAL(playerRight, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + BEST_DAMAGE_MOVE + FAST_KILL, target:opponentLeft);
SCORE_EQ_VAL(playerRight, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + BEST_DAMAGE_MOVE + FAST_KILL, target:opponentRight);
SCORE_EQ_VAL(opponentRight, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + BEST_DAMAGE_MOVE + FAST_KILL, target:playerLeft);
SCORE_EQ_VAL(opponentRight, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + BEST_DAMAGE_MOVE + FAST_KILL, target:playerRight);
}
}
}

View File

@ -1724,3 +1724,24 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI considers both meeting and
TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EXPLOSION); hp > 80 ? EXPECT_SEND_OUT(opponent, 2) : EXPECT_SEND_OUT(opponent, 1); }
}
}
AI_DOUBLE_BATTLE_TEST("AI will not choose to switch out Dondozo with Commander Tatsugiri")
{
PASSES_RANDOMLY(100, 100);
GIVEN {
ASSUME(GetMoveEffect(MOVE_PERISH_SONG) == EFFECT_PERISH_SONG);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES);
OPPONENT(SPECIES_DONDOZO) { Level(50); Moves(MOVE_WATER_GUN); }
OPPONENT(SPECIES_TATSUGIRI) { Moves(MOVE_WATER_GUN); Ability(ABILITY_COMMANDER); }
OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_HEADBUTT); }
PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH); }
PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_CELEBRATE, MOVE_PERISH_SONG); }
PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_CELEBRATE); }
PLAYER(SPECIES_ZIGZAGOON) { Moves (MOVE_CELEBRATE); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_PERISH_SONG); }
TURN { MOVE(playerLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_CELEBRATE); }
TURN { SWITCH(playerLeft, 2); SWITCH(playerRight, 3); }
TURN { MOVE(playerLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_CELEBRATE); EXPECT_MOVE(opponentLeft, MOVE_WATER_GUN); }
}
}

View File

@ -0,0 +1,137 @@
#include "global.h"
#include "test/battle.h"
ASSUMPTIONS
{
ASSUME(gSpeciesInfo[SPECIES_BISHARP].evolutions[0].params->condition == IF_DEFEAT_X_WITH_ITEMS);
ASSUME(gSpeciesInfo[SPECIES_BISHARP].evolutions[0].params->arg1 == SPECIES_BISHARP);
ASSUME(gSpeciesInfo[SPECIES_BISHARP].evolutions[0].params->arg2 == ITEM_LEADERS_CREST);
}
WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing a Bisharp that holds Leader's Crest increases tracker")
{
GIVEN {
PLAYER(SPECIES_BISHARP);
OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); }
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); }
} SCENE {
HP_BAR(opponent, hp: 0);
} THEN {
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 1);
}
}
// To be replaced with WILD_DOUBLE_BATTLE_TEST when that is made possible (also see TryUpdateEvolutionTracker)
DOUBLE_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing multiple Bisharps holding Leader's Crest increases tracker multiple times")
{
GIVEN {
ASSUME(GetMoveTarget(MOVE_LAVA_PLUME) == MOVE_TARGET_FOES_AND_ALLY);
PLAYER(SPECIES_BISHARP);
PLAYER(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); }
OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerLeft, MOVE_LAVA_PLUME); }
} SCENE {
HP_BAR(opponentLeft, hp: 0);
HP_BAR(playerRight, hp: 0);
} THEN {
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 2);
}
}
WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing a Bisharp that doesn't hold Leader's Crest doesn't increase tracker")
{
GIVEN {
PLAYER(SPECIES_BISHARP);
OPPONENT(SPECIES_BISHARP) { HP(1); }
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); }
} SCENE {
HP_BAR(opponent, hp: 0);
} THEN {
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0);
}
}
WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing a non-Bisharp that holds Leader's Crest doesn't increase tracker")
{
u32 species;
PARAMETRIZE { species = SPECIES_WOBBUFFET; }
PARAMETRIZE { species = SPECIES_PAWNIARD; }
GIVEN {
PLAYER(SPECIES_BISHARP);
OPPONENT(species) { Item(ITEM_LEADERS_CREST); HP(1); }
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); }
} SCENE {
HP_BAR(opponent, hp: 0);
} THEN {
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0);
}
}
WILD_BATTLE_TEST("Evolution Tracker: Pawniard KO-ing a Bisharp that holds Leader's Crest doesn't increase tracker")
{
GIVEN {
PLAYER(SPECIES_PAWNIARD);
OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); }
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); }
} SCENE {
HP_BAR(opponent, hp: 0);
} THEN {
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0);
}
}
WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing eligible battler from contact effects doesn't increase tracker")
{
GIVEN {
ASSUME(GetItemHoldEffect(ITEM_ROCKY_HELMET) == HOLD_EFFECT_ROCKY_HELMET);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
PLAYER(SPECIES_BISHARP) { Item(ITEM_ROCKY_HELMET); }
OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); }
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
} SCENE {
HP_BAR(opponent, hp: 0);
} THEN {
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0);
}
}
WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing eligible battler with passive damage doesn't increase tracker")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_LEECH_SEED) == EFFECT_LEECH_SEED);
PLAYER(SPECIES_BISHARP);
OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); }
} WHEN {
TURN { MOVE(player, MOVE_LEECH_SEED); }
} SCENE {
HP_BAR(opponent, hp: 0);
} THEN {
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0);
}
}
// To be replaced with WILD_DOUBLE_BATTLE_TEST when that is made possible (also see TryUpdateEvolutionTracker)
DOUBLE_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing eligible battler with bursting flames doesn't increase tracker")
{
GIVEN {
ASSUME(MoveHasAdditionalEffect(MOVE_FLAME_BURST, MOVE_EFFECT_FLAME_BURST));
PLAYER(SPECIES_BISHARP);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerLeft, MOVE_FLAME_BURST, target: opponentRight); }
} SCENE {
HP_BAR(opponentLeft, hp: 0);
} THEN {
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0);
}
}

View File

@ -64,8 +64,6 @@ SINGLE_BATTLE_TEST("Hazards are applied correctly after a battler faints")
SINGLE_BATTLE_TEST("Toxic Spikes can be removed after fainting to other hazards")
{
KNOWN_FAILING; // tryfaintmon changes something that doesn't allow other switch-in effects on the battler
GIVEN {
PLAYER(SPECIES_WYNAUT);
PLAYER(SPECIES_GRIMER) { HP(1); }

View File

@ -151,7 +151,7 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if it is knocked off o
}
NONE_OF {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
MESSAGE("Wobbuffet returned its stats to normal using its White Herb!");
MESSAGE("Slugma returned its stats to normal using its White Herb!");
}
} THEN {
EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE - 1);
@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if Magician steals it"
MESSAGE("The opposing Fennekin stole Slugma's White Herb!");
NONE_OF {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
MESSAGE("Wobbuffet returned its stats to normal using its White Herb!");
MESSAGE("Slugma returned its stats to normal using its White Herb!");
}
} THEN {
EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE - 1);

View File

@ -1,4 +1,20 @@
#include "global.h"
#include "test/battle.h"
SINGLE_BATTLE_TEST("Mimic doesn't error when the last move used by the target resolves to MOVE_UNAVAILABLE")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {MOVE(opponent, MOVE_TRANSFORM); MOVE(player, MOVE_MIMIC); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_TRANSFORM, opponent);
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_MIMIC, player);
} THEN {
EXPECT_EQ(gLastMoves[1], MOVE_UNAVAILABLE); // This test depends on the current implementation of Transform, if this changes, the test should be changed
}
}
TO_DO_BATTLE_TEST("TODO: Write Mimic (Move Effect) test titles")

View File

@ -80,3 +80,17 @@ SINGLE_BATTLE_TEST("Changing forms doesn't overwrite set stats (HP)")
EXPECT_EQ(player->maxHP, 10);
}
}
MULTI_BATTLE_TEST("Multi Battle Tests register partner's status1")
{
GIVEN {
MULTI_PLAYER(SPECIES_WOBBUFFET);
MULTI_PARTNER(SPECIES_WOBBUFFET);
MULTI_OPPONENT_A(SPECIES_WOBBUFFET);
MULTI_OPPONENT_B(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerLeft, MOVE_WILL_O_WISP, target: playerRight); }
} SCENE {
STATUS_ICON(playerRight, STATUS1_BURN);
}
}

View File

@ -3219,9 +3219,9 @@ void ValidateFinally(u32 sourceLine)
INVALID_IF(STATE->parametersCount == 0, "FINALLY without PARAMETRIZE");
}
u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex)
u32 TestRunner_Battle_GetForcedAbility(u32 array, u32 partyIndex)
{
return DATA.forcedAbilities[side][partyIndex];
return DATA.forcedAbilities[array][partyIndex];
}
u32 TestRunner_Battle_GetForcedEnvironment(void)

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "test/test.h"
#include "test/battle.h"
TEST("Tests resume after CRASH")
{
@ -7,3 +8,22 @@ TEST("Tests resume after CRASH")
void (*f)(void) = NULL;
f();
}
MULTI_BATTLE_TEST("Forced Abilities are set correctly in multi battle tests")
{
GIVEN {
MULTI_PLAYER(SPECIES_WOBBUFFET);
MULTI_PARTNER(SPECIES_WOBBUFFET);
MULTI_PARTNER(SPECIES_NINETALES_ALOLA) { Ability(ABILITY_DRIZZLE); }
MULTI_OPPONENT_A(SPECIES_WOBBUFFET);
MULTI_OPPONENT_A(SPECIES_NINETALES_ALOLA) { Ability(ABILITY_SAND_STREAM); }
MULTI_OPPONENT_B(SPECIES_WYNAUT);
MULTI_OPPONENT_B(SPECIES_NINETALES_ALOLA) { Ability(ABILITY_DROUGHT); }
} WHEN {
TURN { SWITCH(opponentLeft, 1); SWITCH(playerRight, 4); SWITCH(opponentRight, 4); }
} SCENE {
ABILITY_POPUP(opponentLeft, ABILITY_SAND_STREAM);
ABILITY_POPUP(playerRight, ABILITY_DRIZZLE);
ABILITY_POPUP(opponentRight, ABILITY_DROUGHT);
}
}