Merge branch 'master' of https://github.com/rh-hideout/pokeemerald-expansion into rh-hideout-master
@ -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)!
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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::
|
||||
|
||||
|
Before Width: | Height: | Size: 989 B After Width: | Height: | Size: 998 B |
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 925 B After Width: | Height: | Size: 1.1 KiB |
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 949 B After Width: | Height: | Size: 1008 B |
@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 547 B After Width: | Height: | Size: 727 B |
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 606 B After Width: | Height: | Size: 656 B |
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 698 B After Width: | Height: | Size: 764 B |
@ -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
|
||||
|
||||
@ -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[];
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
if (gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE
|
||||
|| gLastMoves[gBattlerTarget] == MOVE_NONE
|
||||
|| gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE)
|
||||
|| 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;
|
||||
}
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
.syntax unified
|
||||
|
||||
.arm
|
||||
.section .iwram.code
|
||||
.section .iwram.code, "ax", %progbits
|
||||
.align 2
|
||||
|
||||
.global FastUnsafeCopy32
|
||||
|
||||
@ -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]
|
||||
|
||||
@ -1716,9 +1716,10 @@ 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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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); }
|
||||
}
|
||||
}
|
||||
|
||||
137
test/battle/evolution_tracker.c
Normal 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);
|
||||
}
|
||||
}
|
||||
@ -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); }
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||