summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/scripts/berry_tree.inc2
-rw-r--r--data/specials.inc2
-rw-r--r--include/berry.h29
-rw-r--r--include/field_control_avatar.h2
-rw-r--r--include/field_map_obj.h2
-rw-r--r--include/global.berry.h71
-rw-r--r--include/pokemon.h4
-rw-r--r--src/battle/battle_3.c3430
-rw-r--r--src/battle/battle_4.c10
-rw-r--r--src/battle/battle_controller_linkopponent.c20
-rw-r--r--src/battle/battle_controller_linkpartner.c20
-rw-r--r--src/battle/battle_controller_opponent.c20
-rw-r--r--src/battle/battle_controller_player.c20
-rw-r--r--src/battle/battle_controller_wally.c20
-rw-r--r--src/engine/clock.c17
-rw-r--r--src/engine/trade.c2
-rw-r--r--src/field/berry.c529
-rw-r--r--src/field/daycare.c4
-rw-r--r--src/field/field_control_avatar.c2
-rw-r--r--src/field/field_map_obj.c13
-rw-r--r--src/field/field_special_scene.c3
-rw-r--r--src/field/item_use.c2
-rw-r--r--src/field/party_menu.c2
-rw-r--r--src/pokemon/pokemon_1.c16
-rw-r--r--src/pokemon/pokemon_2.c12
-rw-r--r--src/pokemon/pokemon_size_record.c2
26 files changed, 484 insertions, 3772 deletions
diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc
index 9e219a339..be1cafbdd 100644
--- a/data/scripts/berry_tree.inc
+++ b/data/scripts/berry_tree.inc
@@ -41,7 +41,7 @@ Route102_EventScript_1A1558:: @ 81A1558
Route102_EventScript_1A1577:: @ 81A1577
fadescreen 1
closemessage
- special sub_80B4EE4
+ special Berry_FadeAndGoToBerryBagMenu
waitstate
compare ITEM_ID, 0
goto_if_eq Route102_EventScript_1A1593
diff --git a/data/specials.inc b/data/specials.inc
index 6ce9b5b1e..c11cedf00 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -51,7 +51,7 @@ gSpecials::
def_special sub_80C5568
def_special sub_8083BDC
def_special FieldObjectInteractionGetBerryTreeData
- def_special sub_80B4EE4
+ def_special Berry_FadeAndGoToBerryBagMenu
def_special FieldObjectInteractionPlantBerryTree
def_special FieldObjectInteractionPickBerryTree
def_special FieldObjectInteractionRemoveBerryTree
diff --git a/include/berry.h b/include/berry.h
index f0acbe0ad..a7ac5ba94 100644
--- a/include/berry.h
+++ b/include/berry.h
@@ -11,38 +11,39 @@ enum
BERRY_FIRMNESS_SUPER_HARD,
};
-void ClearEnigmaBerries(void);
+// berry stages
+enum
+{
+ BERRY_STAGE_NO_BERRY, // there is no tree planted and the soil is completely flat.
+ BERRY_STAGE_PLANTED,
+ BERRY_STAGE_SPROUTED,
+ BERRY_STAGE_TALLER,
+ BERRY_STAGE_FLOWERING,
+ BERRY_STAGE_BERRIES,
+ BERRY_STAGE_SPARKLING = 0xFF,
+};
+
void SetEnigmaBerry(u8 *src);
-u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry);
bool32 IsEnigmaBerryValid(void);
const struct Berry *GetBerryInfo(u8 berry);
-struct BerryTree *GetBerryTreeInfo(u8 id);
bool32 FieldObjectInteractionWaterBerryTree(void);
-bool8 IsPlayerFacingPlantedBerryTree(void);
+bool8 IsPlayerFacingUnplantedSoil(void);
bool8 TryToWaterBerryTree(void);
void ClearBerryTrees(void);
-bool32 BerryTreeGrow(struct BerryTree *tree);
void BerryTreeTimeUpdate(s32 minutes);
void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle);
void RemoveBerryTree(u8 id);
u8 GetBerryTypeByBerryTreeId(u8 id);
u8 GetStageByBerryTreeId(u8);
u8 ItemIdToBerryType(u16 item);
-u16 BerryTypeToItemId(u16 berry);
void GetBerryNameByBerryType(u8 berry, u8 *string);
void ResetBerryTreeSparkleFlag(u8 id);
-u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree);
-u8 GetNumStagesWateredByBerryTreeId(u8 id);
-u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water);
-u8 CalcBerryYield(struct BerryTree *tree);
-u8 GetBerryCountByBerryTreeId(u8 id);
-u16 GetStageDurationByBerryType(u8);
void FieldObjectInteractionGetBerryTreeData(void);
-void sub_80B4EE4(void);
+void Berry_FadeAndGoToBerryBagMenu(void);
void FieldObjectInteractionPlantBerryTree(void);
void FieldObjectInteractionPickBerryTree(void);
void FieldObjectInteractionRemoveBerryTree(void);
-u8 PlayerHasBerries(void);
+bool8 PlayerHasBerries(void);
void ResetBerryTreeSparkleFlags(void);
#endif // GUARD_BERRY_H
diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h
index a85e02132..2d5693e40 100644
--- a/include/field_control_avatar.h
+++ b/include/field_control_avatar.h
@@ -30,7 +30,7 @@ u8 *sub_80682A8(struct MapPosition *, u8, u8);
void overworld_poison_timer_set(void);
void prev_quest_postbuffer_cursor_backup_reset(void);
u8 *sub_8068E24(struct MapPosition *);
-u8 *GetFieldObjectScriptPointerForComparison();
+u8 *GetFieldObjectScriptPointerPlayerFacing(void);
bool8 mapheader_trigger_activate_at__run_now(struct MapPosition *);
bool8 sub_8068870(u16 a);
bool8 sub_8068894(void);
diff --git a/include/field_map_obj.h b/include/field_map_obj.h
index 641a28ed3..19482e71f 100644
--- a/include/field_map_obj.h
+++ b/include/field_map_obj.h
@@ -381,7 +381,7 @@ void npc_set_running_behaviour_etc(struct MapObject *, u8);
u8 npc_running_behaviour_by_direction(u8);
u8 npc_block_way(struct MapObject *, s16, s16, u32);
u8 sub_8060024(struct MapObject *, s16, s16, u8);
-u8 sub_8060234(u8, u8, u8);
+bool8 IsBerryTreeSparkling(u8, u8, u8);
void sub_8060288(u8, u8, u8);
void sub_8060388(s16, s16, s16 *, s16 *);
void sub_80603CC(s16 x, s16 y, s16 *pInt, s16 *pInt1);
diff --git a/include/global.berry.h b/include/global.berry.h
index 096d8b1d8..21a0dd500 100644
--- a/include/global.berry.h
+++ b/include/global.berry.h
@@ -3,33 +3,33 @@
struct Berry
{
- /*0x00*/const u8 name[7];
- /*0x07*/u8 firmness;
- /*0x08*/u16 size;
- /*0x0A*/u8 maxYield;
- /*0x0B*/u8 minYield;
- /*0x0C*/const u8 *description1;
- /*0x10*/const u8 *description2;
- /*0x14*/u8 stageDuration;
- /*0x15*/u8 spicy;
- /*0x16*/u8 dry;
- /*0x17*/u8 sweet;
- /*0x18*/u8 bitter;
- /*0x19*/u8 sour;
- /*0x1A*/u8 smoothness;
+ /*0x00*/ const u8 name[7];
+ /*0x07*/ u8 firmness;
+ /*0x08*/ u16 size;
+ /*0x0A*/ u8 maxYield;
+ /*0x0B*/ u8 minYield;
+ /*0x0C*/ const u8 *description1;
+ /*0x10*/ const u8 *description2;
+ /*0x14*/ u8 stageDuration;
+ /*0x15*/ u8 spicy;
+ /*0x16*/ u8 dry;
+ /*0x17*/ u8 sweet;
+ /*0x18*/ u8 bitter;
+ /*0x19*/ u8 sour;
+ /*0x1A*/ u8 smoothness;
};
struct EnigmaBerry
{
- /*0x000*/struct Berry berry;
- /*0x01B*/u8 pic[(6 * 6) * TILE_SIZE_4BPP];
- /*0x49C*/u16 palette[16];
- /*0x4BC*/u8 description1[45];
- /*0x4E9*/u8 description2[45];
- /*0x516*/u8 itemEffect[18];
- /*0x528*/u8 holdEffect;
- /*0x529*/u8 holdEffectParam;
- /*0x52C*/u32 checksum;
+ /*0x000*/ struct Berry berry;
+ /*0x01B*/ u8 pic[(6 * 6) * TILE_SIZE_4BPP];
+ /*0x49C*/ u16 palette[16];
+ /*0x4BC*/ u8 description1[45];
+ /*0x4E9*/ u8 description2[45];
+ /*0x516*/ u8 itemEffect[18];
+ /*0x528*/ u8 holdEffect;
+ /*0x529*/ u8 holdEffectParam;
+ /*0x52C*/ u32 checksum;
};
struct BattleEnigmaBerry
@@ -42,16 +42,21 @@ struct BattleEnigmaBerry
struct BerryTree
{
- u8 berry;
- u8 stage:7;
- u8 growthSparkle:1;
- u16 minutesUntilNextStage;
- u8 berryYield;
- u8 regrowthCount:4;
- u8 watered1:1;
- u8 watered2:1;
- u8 watered3:1;
- u8 watered4:1;
+ /*0x00*/ u8 berry;
+ /*0x01*/ u8 stage:7;
+ /*
+ A berry sparkle is a state that a berry tree
+ can be in after growing within the player's
+ viewport.
+ */
+ /*0x01*/ bool8 growthSparkle:1;
+ /*0x02*/ u16 minutesUntilNextStage;
+ /*0x04*/ u8 berryYield;
+ /*0x05*/ u8 regrowthCount:4;
+ /*0x05*/ u8 watered1:1;
+ /*0x05*/ u8 watered2:1;
+ /*0x05*/ u8 watered3:1;
+ /*0x05*/ u8 watered4:1;
};
#endif // GUARD_GLOBAL_BERRY_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 4c3e27609..dabdff626 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -45,7 +45,7 @@
#define MON_DATA_HP_IV 39
#define MON_DATA_ATK_IV 40
#define MON_DATA_DEF_IV 41
-#define MON_DATA_SPD_IV 42
+#define MON_DATA_SPEED_IV 42
#define MON_DATA_SPATK_IV 43
#define MON_DATA_SPDEF_IV 44
#define MON_DATA_IS_EGG 45
@@ -64,7 +64,7 @@
#define MON_DATA_MAX_HP 58
#define MON_DATA_ATK 59
#define MON_DATA_DEF 60
-#define MON_DATA_SPD 61
+#define MON_DATA_SPEED 61
#define MON_DATA_SPATK 62
#define MON_DATA_SPDEF 63
#define MON_DATA_MAIL 64
diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c
index b59757f00..346ca6d79 100644
--- a/src/battle/battle_3.c
+++ b/src/battle/battle_3.c
@@ -1434,8 +1434,6 @@ u8 CastformDataTypeChange(u8 bank)
return formChange;
}
-#ifdef NONMATCHING
-
struct Struct2017100
{
u32 arr[4];
@@ -1475,13 +1473,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) // why isn't that check done at the beginning?
{
- //_08018436
- int i; // r4
+ u8 moveType;
+ s32 i;
u16 move;
- // Hmm...
- #define moveType moveArg
- //u16 moveType;
u8 side;
+ u8 target1;
if (special)
gLastUsedAbility = special;
@@ -1607,17 +1603,14 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
case ABILITY_AIR_LOCK:
//_080187DC
{
- u8 i;
-
- for (i = 0; i < gNoOfAllBanks; i++)
+ // that's a weird choice for a variable, why not use i or bank?
+ for (target1 = 0; target1 < gNoOfAllBanks; target1++)
{
- // TODO: i should be in r6 here
- //asm("":::"r4","r5");
- effect = CastformDataTypeChange(i);
+ effect = CastformDataTypeChange(target1);
if (effect != 0)
{
b_push_move_exec(BattleScript_CastformChange);
- BATTLE_STRUCT->scriptingActive = i;
+ BATTLE_STRUCT->scriptingActive = target1;
BATTLE_STRUCT->castformToChangeInto = effect - 1;
break;
}
@@ -1637,7 +1630,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY)
&& gBattleMons[bank].maxHP > gBattleMons[bank].hp)
{
- gLastUsedAbility = ABILITY_RAIN_DISH; //why
+ gLastUsedAbility = ABILITY_RAIN_DISH; // why
b_push_move_exec(BattleScript_RainDishActivates);
gBattleMoveDamage = gBattleMons[bank].maxHP / 16;
if (gBattleMoveDamage == 0)
@@ -1660,7 +1653,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (gBattleMons[bank].status1 & STATUS_FREEZE)
StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
gBattleMons[bank].status1 = 0;
- //gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); fixed in Emerald
+ // BUG: The nightmare status does not get cleared here. This was fixed in Emerald.
+ //gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
BATTLE_STRUCT->scriptingActive = gActiveBank = bank;
b_push_move_exec(BattleScript_ShedSkinActivates);
EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1);
@@ -1759,9 +1753,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (gBattleMons[bank].maxHP == gBattleMons[bank].hp)
{
if ((gProtectStructs[gBankAttacker].notFirstStrike))
- gBattlescriptCurrInstr = BattleScript_MoveHPDrain;
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain_FullHP;
else
- gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss;
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain_FullHP_PPLoss;
}
else
{
@@ -1910,27 +1904,26 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
case ABILITYEFFECT_IMMUNITY: // 5
//_08019448
{
- #define i bank
- for (i = 0; i < gNoOfAllBanks; i++)
+ for (bank = 0; bank < gNoOfAllBanks; bank++)
{
- switch (gBattleMons[i].ability)
+ switch (gBattleMons[bank].ability)
{
case ABILITY_IMMUNITY:
- if (gBattleMons[i].status1 & (STATUS_POISON | STATUS_TOXIC_POISON | 0xF00)) // TODO: what is 0xF00?
+ if (gBattleMons[bank].status1 & (STATUS_POISON | STATUS_TOXIC_POISON | 0xF00)) // TODO: what is 0xF00?
{
StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
effect = 1;
}
break;
case ABILITY_OWN_TEMPO:
- if (gBattleMons[i].status2 & STATUS2_CONFUSION)
+ if (gBattleMons[bank].status2 & STATUS2_CONFUSION)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
effect = 2;
}
break;
case ABILITY_LIMBER:
- if (gBattleMons[i].status1 & STATUS_PARALYSIS)
+ if (gBattleMons[bank].status1 & STATUS_PARALYSIS)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
effect = 1;
@@ -1938,29 +1931,29 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
break;
case ABILITY_INSOMNIA:
case ABILITY_VITAL_SPIRIT:
- if (gBattleMons[i].status1 & STATUS_SLEEP)
+ if (gBattleMons[bank].status1 & STATUS_SLEEP)
{
- gBattleMons[i].status2 &= ~(STATUS2_NIGHTMARE);
+ gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
effect = 1;
}
break;
case ABILITY_WATER_VEIL:
- if (gBattleMons[i].status1 & STATUS_BURN)
+ if (gBattleMons[bank].status1 & STATUS_BURN)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
effect = 1;
}
break;
case ABILITY_MAGMA_ARMOR:
- if (gBattleMons[i].status1 & STATUS_FREEZE)
+ if (gBattleMons[bank].status1 & STATUS_FREEZE)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
effect = 1;
}
break;
case ABILITY_OBLIVIOUS:
- if (gBattleMons[i].status2 & STATUS2_INFATUATION)
+ if (gBattleMons[bank].status2 & STATUS2_INFATUATION)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
effect = 3;
@@ -1972,46 +1965,43 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
switch (effect)
{
case 1: // status cleared
- gBattleMons[i].status1 = 0;
+ gBattleMons[bank].status1 = 0;
break;
case 2: // get rid of confusion
- gBattleMons[i].status2 &= ~(STATUS2_CONFUSION);
+ gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION);
break;
case 3: // get rid of infatuation
- gBattleMons[i].status2 &= ~(STATUS2_INFATUATION);
+ gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION);
break;
}
b_movescr_stack_push_cursor();
gBattlescriptCurrInstr = gUnknown_081D9956;
- BATTLE_STRUCT->scriptingActive = i;
- gActiveBank = i;
+ BATTLE_STRUCT->scriptingActive = bank;
+ gActiveBank = bank;
EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
MarkBufferBankForExecution(gActiveBank);
return effect;
}
}
- #undef i
}
break;
case ABILITYEFFECT_FORECAST: // 6
//_080197B4
{
- #define i bank
- for (i = 0; i < gNoOfAllBanks; i++)
+ for (bank = 0; bank < gNoOfAllBanks; bank++)
{
- if (gBattleMons[i].ability == ABILITY_FORECAST)
+ if (gBattleMons[bank].ability == ABILITY_FORECAST)
{
- effect = CastformDataTypeChange(i);
+ effect = CastformDataTypeChange(bank);
if (effect)
{
b_push_move_exec(BattleScript_CastformChange);
- BATTLE_STRUCT->scriptingActive = i;
+ BATTLE_STRUCT->scriptingActive = bank;
BATTLE_STRUCT->castformToChangeInto = effect - 1;
return effect;
}
}
}
- #undef i
}
break;
case ABILITYEFFECT_SYNCHRONIZE: // 7
@@ -2067,16 +2057,17 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
{
if (gBattleMons[i].ability == ABILITY_TRACE && (gStatuses3[i] & STATUS3_TRACE))
{
- u8 opposite = (GetBankIdentity(i) ^ 1) & 1;
- u8 target1 = GetBankByPlayerAI(opposite);
- u8 target2 = GetBankByPlayerAI(opposite + 2);
+ u8 target2;
+ side = (GetBankIdentity(i) ^ 1) & 1;
+ target1 = GetBankByPlayerAI(side);
+ target2 = GetBankByPlayerAI(side + 2);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0
&& gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0)
{
//_080199AE
- gActiveBank = GetBankByPlayerAI(((Random() & 1) * 2) | opposite);
+ gActiveBank = GetBankByPlayerAI(((Random() & 1) * 2) | side);
gBattleMons[i].ability = gBattleMons[gActiveBank].ability;
gLastUsedAbility = gBattleMons[gActiveBank].ability;
effect++;
@@ -2266,3355 +2257,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
return effect;
}
-#else
-__attribute__((naked))
-u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x28\n\
- ldr r4, [sp, 0x48]\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- str r0, [sp, 0x4]\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- mov r10, r1\n\
- lsls r2, 24\n\
- lsrs r6, r2, 24\n\
- lsls r3, 24\n\
- lsrs r3, 24\n\
- mov r8, r3\n\
- lsls r4, 16\n\
- lsrs r4, 16\n\
- movs r0, 0\n\
- mov r9, r0\n\
- ldr r5, _08018380 @ =gBankAttacker\n\
- ldr r1, _08018384 @ =gNoOfAllBanks\n\
- ldrb r0, [r5]\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- bcc _08018360\n\
- mov r1, r10\n\
- strb r1, [r5]\n\
-_08018360:\n\
- ldrb r0, [r5]\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _08018390\n\
- ldr r1, _08018388 @ =gBattlePartyID\n\
- ldrb r0, [r5]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- movs r0, 0x64\n\
- muls r1, r0\n\
- ldr r0, _0801838C @ =gPlayerParty\n\
- b _080183A0\n\
- .align 2, 0\n\
-_08018380: .4byte gBankAttacker\n\
-_08018384: .4byte gNoOfAllBanks\n\
-_08018388: .4byte gBattlePartyID\n\
-_0801838C: .4byte gPlayerParty\n\
-_08018390:\n\
- ldr r1, _080183D0 @ =gBattlePartyID\n\
- ldrb r0, [r5]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- movs r0, 0x64\n\
- muls r1, r0\n\
- ldr r0, _080183D4 @ =gEnemyParty\n\
-_080183A0:\n\
- adds r7, r1, r0\n\
- ldr r5, _080183D8 @ =gBankTarget\n\
- ldr r1, _080183DC @ =gNoOfAllBanks\n\
- ldrb r0, [r5]\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- bcc _080183B2\n\
- mov r2, r10\n\
- strb r2, [r5]\n\
-_080183B2:\n\
- ldrb r0, [r5]\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _080183E4\n\
- ldr r1, _080183D0 @ =gBattlePartyID\n\
- ldrb r0, [r5]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- movs r0, 0x64\n\
- muls r1, r0\n\
- ldr r0, _080183E0 @ =gPlayerParty\n\
- b _080183F4\n\
- .align 2, 0\n\
-_080183D0: .4byte gBattlePartyID\n\
-_080183D4: .4byte gEnemyParty\n\
-_080183D8: .4byte gBankTarget\n\
-_080183DC: .4byte gNoOfAllBanks\n\
-_080183E0: .4byte gPlayerParty\n\
-_080183E4:\n\
- ldr r1, _08018444 @ =gBattlePartyID\n\
- ldrb r0, [r5]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- movs r0, 0x64\n\
- muls r1, r0\n\
- ldr r0, _08018448 @ =gEnemyParty\n\
-_080183F4:\n\
- adds r5, r1, r0\n\
- adds r0, r7, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x8]\n\
- adds r0, r7, 0\n\
- movs r1, 0\n\
- bl GetMonData\n\
- str r0, [sp, 0x10]\n\
- adds r0, r5, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0xC]\n\
- adds r0, r5, 0\n\
- movs r1, 0\n\
- bl GetMonData\n\
- str r0, [sp, 0x14]\n\
- ldr r0, _0801844C @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x80\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018436\n\
- bl _08019F92\n\
-_08018436:\n\
- mov r3, r8\n\
- cmp r3, 0\n\
- beq _08018454\n\
- ldr r0, _08018450 @ =gLastUsedAbility\n\
- strb r3, [r0]\n\
- mov r8, r0\n\
- b _0801846A\n\
- .align 2, 0\n\
-_08018444: .4byte gBattlePartyID\n\
-_08018448: .4byte gEnemyParty\n\
-_0801844C: .4byte gBattleTypeFlags\n\
-_08018450: .4byte gLastUsedAbility\n\
-_08018454:\n\
- ldr r2, _08018474 @ =gLastUsedAbility\n\
- ldr r1, _08018478 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r5, r10\n\
- muls r5, r0\n\
- adds r0, r5, 0\n\
- adds r0, r1\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- strb r0, [r2]\n\
- mov r8, r2\n\
-_0801846A:\n\
- cmp r4, 0\n\
- beq _0801847C\n\
- adds r3, r4, 0\n\
- b _08018480\n\
- .align 2, 0\n\
-_08018474: .4byte gLastUsedAbility\n\
-_08018478: .4byte gBattleMons\n\
-_0801847C:\n\
- ldr r0, _08018494 @ =gCurrentMove\n\
- ldrh r3, [r0]\n\
-_08018480:\n\
- ldr r1, _08018498 @ =0x02000000\n\
- ldr r2, _0801849C @ =0x0001601c\n\
- adds r0, r1, r2\n\
- ldrb r0, [r0]\n\
- adds r7, r1, 0\n\
- cmp r0, 0\n\
- beq _080184A0\n\
- movs r4, 0x3F\n\
- ands r4, r0\n\
- b _080184AC\n\
- .align 2, 0\n\
-_08018494: .4byte gCurrentMove\n\
-_08018498: .4byte 0x02000000\n\
-_0801849C: .4byte 0x0001601c\n\
-_080184A0:\n\
- ldr r1, _080184C0 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r4, [r0, 0x2]\n\
-_080184AC:\n\
- ldr r5, [sp, 0x4]\n\
- cmp r5, 0x13\n\
- bls _080184B6\n\
- bl _08019F76\n\
-_080184B6:\n\
- lsls r0, r5, 2\n\
- ldr r1, _080184C4 @ =_080184C8\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_080184C0: .4byte gBattleMoves\n\
-_080184C4: .4byte _080184C8\n\
- .align 2, 0\n\
-_080184C8:\n\
- .4byte _08018518\n\
- .4byte _08018814\n\
- .4byte _08018A40\n\
- .4byte _08018AD8\n\
- .4byte _08018CF0\n\
- .4byte _08019448\n\
- .4byte _080197B4\n\
- .4byte _08019804\n\
- .4byte _08019880\n\
- .4byte _080198FC\n\
- .4byte _08019B1C\n\
- .4byte _08019940\n\
- .4byte _08019B60\n\
- .4byte _08019BBC\n\
- .4byte _08019C18\n\
- .4byte _08019D18\n\
- .4byte _08019D5C\n\
- .4byte _08019DB8\n\
- .4byte _08019F44\n\
- .4byte _08019CD4\n\
-_08018518:\n\
- ldr r2, _0801854C @ =gBankAttacker\n\
- ldr r0, _08018550 @ =gNoOfAllBanks\n\
- ldrb r1, [r2]\n\
- adds r5, r0, 0\n\
- ldrb r0, [r5]\n\
- cmp r1, r0\n\
- bcc _0801852A\n\
- mov r1, r10\n\
- strb r1, [r2]\n\
-_0801852A:\n\
- mov r2, r8\n\
- ldrb r0, [r2]\n\
- cmp r0, 0x2D\n\
- bne _08018534\n\
- b _080186B8\n\
-_08018534:\n\
- cmp r0, 0x2D\n\
- bgt _08018564\n\
- cmp r0, 0xD\n\
- bne _0801853E\n\
- b _080187DC\n\
-_0801853E:\n\
- cmp r0, 0xD\n\
- bgt _08018554\n\
- cmp r0, 0x2\n\
- bne _08018548\n\
- b _08018680\n\
-_08018548:\n\
- bl _08019F76\n\
- .align 2, 0\n\
-_0801854C: .4byte gBankAttacker\n\
-_08018550: .4byte gNoOfAllBanks\n\
-_08018554:\n\
- cmp r0, 0x16\n\
- bne _0801855A\n\
- b _08018728\n\
-_0801855A:\n\
- cmp r0, 0x24\n\
- bne _08018560\n\
- b _080187A0\n\
-_08018560:\n\
- bl _08019F76\n\
-_08018564:\n\
- cmp r0, 0x46\n\
- bne _0801856A\n\
- b _080186F0\n\
-_0801856A:\n\
- cmp r0, 0x46\n\
- bgt _08018578\n\
- cmp r0, 0x3B\n\
- bne _08018574\n\
- b _0801875C\n\
-_08018574:\n\
- bl _08019F76\n\
-_08018578:\n\
- cmp r0, 0x4D\n\
- bne _0801857E\n\
- b _080187DC\n\
-_0801857E:\n\
- cmp r0, 0xFF\n\
- beq _08018586\n\
- bl _08019F76\n\
-_08018586:\n\
- bl weather_get_current\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- subs r0, 0x3\n\
- cmp r0, 0xA\n\
- bhi _0801864C\n\
- lsls r0, 2\n\
- ldr r1, _080185A0 @ =_080185A4\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_080185A0: .4byte _080185A4\n\
- .align 2, 0\n\
-_080185A4:\n\
- .4byte _080185D0\n\
- .4byte _0801864C\n\
- .4byte _080185D0\n\
- .4byte _0801864C\n\
- .4byte _0801864C\n\
- .4byte _080185F8\n\
- .4byte _0801864C\n\
- .4byte _0801864C\n\
- .4byte _0801864C\n\
- .4byte _08018620\n\
- .4byte _080185D0\n\
-_080185D0:\n\
- ldr r2, _080185EC @ =gBattleWeather\n\
- ldrh r1, [r2]\n\
- movs r0, 0x7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801864C\n\
- movs r0, 0x5\n\
- strh r0, [r2]\n\
- ldr r0, _080185F0 @ =0x02000000\n\
- ldr r3, _080185F4 @ =0x000160a4\n\
- adds r2, r0, r3\n\
- movs r1, 0xA\n\
- b _08018638\n\
- .align 2, 0\n\
-_080185EC: .4byte gBattleWeather\n\
-_080185F0: .4byte 0x02000000\n\
-_080185F4: .4byte 0x000160a4\n\
-_080185F8:\n\
- ldr r3, _08018614 @ =gBattleWeather\n\
- ldrh r1, [r3]\n\
- movs r2, 0x18\n\
- adds r0, r2, 0\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801864C\n\
- strh r2, [r3]\n\
- ldr r0, _08018618 @ =0x02000000\n\
- ldr r3, _0801861C @ =0x000160a4\n\
- adds r2, r0, r3\n\
- movs r1, 0xC\n\
- b _08018638\n\
- .align 2, 0\n\
-_08018614: .4byte gBattleWeather\n\
-_08018618: .4byte 0x02000000\n\
-_0801861C: .4byte 0x000160a4\n\
-_08018620:\n\
- ldr r3, _08018668 @ =gBattleWeather\n\
- ldrh r1, [r3]\n\
- movs r2, 0x60\n\
- adds r0, r2, 0\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801864C\n\
- strh r2, [r3]\n\
- ldr r0, _0801866C @ =0x02000000\n\
- ldr r3, _08018670 @ =0x000160a4\n\
- adds r2, r0, r3\n\
- movs r1, 0xB\n\
-_08018638:\n\
- strb r1, [r2]\n\
- ldr r5, _08018674 @ =0x00016003\n\
- adds r0, r5\n\
- mov r1, r10\n\
- strb r1, [r0]\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_0801864C:\n\
- mov r2, r9\n\
- cmp r2, 0\n\
- bne _08018656\n\
- bl _08019F92\n\
-_08018656:\n\
- bl weather_get_current\n\
- ldr r1, _08018678 @ =gBattleCommunication\n\
- strb r0, [r1, 0x5]\n\
- ldr r0, _0801867C @ =gUnknown_081D901D\n\
- bl b_push_move_exec\n\
- bl _08019F76\n\
- .align 2, 0\n\
-_08018668: .4byte gBattleWeather\n\
-_0801866C: .4byte 0x02000000\n\
-_08018670: .4byte 0x000160a4\n\
-_08018674: .4byte 0x00016003\n\
-_08018678: .4byte gBattleCommunication\n\
-_0801867C: .4byte gUnknown_081D901D\n\
-_08018680:\n\
- ldr r2, _080186A8 @ =gBattleWeather\n\
- ldrh r1, [r2]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018690\n\
- bl _08019F76\n\
-_08018690:\n\
- movs r0, 0x5\n\
- strh r0, [r2]\n\
- ldr r0, _080186AC @ =BattleScript_DrizzleActivates\n\
- bl b_push_move_exec\n\
- ldr r0, _080186B0 @ =0x02000000\n\
- ldr r3, _080186B4 @ =0x00016003\n\
- adds r0, r3\n\
- mov r5, r10\n\
- strb r5, [r0]\n\
- bl _08019F22\n\
- .align 2, 0\n\
-_080186A8: .4byte gBattleWeather\n\
-_080186AC: .4byte BattleScript_DrizzleActivates\n\
-_080186B0: .4byte 0x02000000\n\
-_080186B4: .4byte 0x00016003\n\
-_080186B8:\n\
- ldr r2, _080186E0 @ =gBattleWeather\n\
- ldrh r1, [r2]\n\
- movs r0, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080186C8\n\
- bl _08019F76\n\
-_080186C8:\n\
- movs r0, 0x18\n\
- strh r0, [r2]\n\
- ldr r0, _080186E4 @ =BattleScript_SandstreamActivates\n\
- bl b_push_move_exec\n\
- ldr r0, _080186E8 @ =0x02000000\n\
- ldr r1, _080186EC @ =0x00016003\n\
- adds r0, r1\n\
- mov r2, r10\n\
- strb r2, [r0]\n\
- bl _08019F22\n\
- .align 2, 0\n\
-_080186E0: .4byte gBattleWeather\n\
-_080186E4: .4byte BattleScript_SandstreamActivates\n\
-_080186E8: .4byte 0x02000000\n\
-_080186EC: .4byte 0x00016003\n\
-_080186F0:\n\
- ldr r2, _08018718 @ =gBattleWeather\n\
- ldrh r1, [r2]\n\
- movs r0, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018700\n\
- bl _08019F76\n\
-_08018700:\n\
- movs r0, 0x60\n\
- strh r0, [r2]\n\
- ldr r0, _0801871C @ =BattleScript_DroughtActivates\n\
- bl b_push_move_exec\n\
- ldr r0, _08018720 @ =0x02000000\n\
- ldr r3, _08018724 @ =0x00016003\n\
- adds r0, r3\n\
- mov r5, r10\n\
- strb r5, [r0]\n\
- bl _08019F22\n\
- .align 2, 0\n\
-_08018718: .4byte gBattleWeather\n\
-_0801871C: .4byte BattleScript_DroughtActivates\n\
-_08018720: .4byte 0x02000000\n\
-_08018724: .4byte 0x00016003\n\
-_08018728:\n\
- ldr r0, _08018754 @ =gSpecialStatuses\n\
- mov r1, r10\n\
- lsls r2, r1, 2\n\
- adds r1, r2, r1\n\
- lsls r1, 2\n\
- adds r3, r1, r0\n\
- ldrb r0, [r3]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08018740\n\
- bl _08019F76\n\
-_08018740:\n\
- ldr r1, _08018758 @ =gStatuses3\n\
- adds r1, r2, r1\n\
- ldr r0, [r1]\n\
- movs r2, 0x80\n\
- lsls r2, 12\n\
- orrs r0, r2\n\
- str r0, [r1]\n\
- ldrb r0, [r3]\n\
- movs r1, 0x8\n\
- b _080187CA\n\
- .align 2, 0\n\
-_08018754: .4byte gSpecialStatuses\n\
-_08018758: .4byte gStatuses3\n\
-_0801875C:\n\
- mov r0, r10\n\
- bl CastformDataTypeChange\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
- cmp r0, 0\n\
- bne _08018770\n\
- bl _08019F92\n\
-_08018770:\n\
- ldr r0, _08018790 @ =BattleScript_CastformChange\n\
- bl b_push_move_exec\n\
- ldr r0, _08018794 @ =0x02000000\n\
- ldr r2, _08018798 @ =0x00016003\n\
- adds r1, r0, r2\n\
- mov r3, r10\n\
- strb r3, [r1]\n\
- mov r1, r9\n\
- subs r1, 0x1\n\
- ldr r5, _0801879C @ =0x0001609b\n\
- adds r0, r5\n\
- strb r1, [r0]\n\
- bl _08019F76\n\
- .align 2, 0\n\
-_08018790: .4byte BattleScript_CastformChange\n\
-_08018794: .4byte 0x02000000\n\
-_08018798: .4byte 0x00016003\n\
-_0801879C: .4byte 0x0001609b\n\
-_080187A0:\n\
- ldr r0, _080187D4 @ =gSpecialStatuses\n\
- mov r1, r10\n\
- lsls r2, r1, 2\n\
- adds r1, r2, r1\n\
- lsls r1, 2\n\
- adds r3, r1, r0\n\
- ldrb r0, [r3]\n\
- lsls r0, 27\n\
- cmp r0, 0\n\
- bge _080187B8\n\
- bl _08019F76\n\
-_080187B8:\n\
- ldr r1, _080187D8 @ =gStatuses3\n\
- adds r1, r2, r1\n\
- ldr r0, [r1]\n\
- movs r2, 0x80\n\
- lsls r2, 13\n\
- orrs r0, r2\n\
- str r0, [r1]\n\
- ldrb r0, [r3]\n\
- movs r1, 0x10\n\
-_080187CA:\n\
- orrs r0, r1\n\
- strb r0, [r3]\n\
- bl _08019F76\n\
- .align 2, 0\n\
-_080187D4: .4byte gSpecialStatuses\n\
-_080187D8: .4byte gStatuses3\n\
-_080187DC:\n\
- movs r6, 0\n\
- ldrb r5, [r5]\n\
- cmp r6, r5\n\
- bcc _080187E8\n\
- bl _08019F76\n\
-_080187E8:\n\
- adds r0, r6, 0\n\
- bl CastformDataTypeChange\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
- cmp r0, 0\n\
- beq _080187FC\n\
- bl _08019E14\n\
-_080187FC:\n\
- adds r0, r6, 0x1\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- ldr r0, _08018810 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r6, r0\n\
- bcc _080187E8\n\
- bl _08019F76\n\
- .align 2, 0\n\
-_08018810: .4byte gNoOfAllBanks\n\
-_08018814:\n\
- ldr r2, _08018844 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r1, r10\n\
- muls r1, r0\n\
- adds r4, r1, r2\n\
- ldrh r0, [r4, 0x28]\n\
- cmp r0, 0\n\
- bne _08018828\n\
- bl _08019F76\n\
-_08018828:\n\
- ldr r0, _08018848 @ =gBankAttacker\n\
- mov r3, r10\n\
- strb r3, [r0]\n\
- mov r3, r8\n\
- ldrb r5, [r3]\n\
- cmp r5, 0x2C\n\
- beq _0801885A\n\
- cmp r5, 0x2C\n\
- bgt _0801884C\n\
- cmp r5, 0x3\n\
- bne _08018840\n\
- b _080189B8\n\
-_08018840:\n\
- bl _08019F76\n\
- .align 2, 0\n\
-_08018844: .4byte gBattleMons\n\
-_08018848: .4byte gBankAttacker\n\
-_0801884C:\n\
- cmp r5, 0x36\n\
- bne _08018852\n\
- b _08018A18\n\
-_08018852:\n\
- cmp r5, 0x3D\n\
- beq _080188DC\n\
- bl _08019F76\n\
-_0801885A:\n\
- movs r0, 0\n\
- str r0, [sp]\n\
- movs r0, 0x13\n\
- movs r1, 0\n\
- movs r2, 0xD\n\
- movs r3, 0\n\
- bl AbilityBattleEffects\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0\n\
- beq _08018876\n\
- bl _08019F76\n\
-_08018876:\n\
- str r0, [sp]\n\
- movs r0, 0x13\n\
- movs r1, 0\n\
- movs r2, 0x4D\n\
- movs r3, 0\n\
- bl AbilityBattleEffects\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0801888E\n\
- bl _08019F76\n\
-_0801888E:\n\
- ldr r0, _080188D0 @ =gBattleWeather\n\
- ldrh r1, [r0]\n\
- movs r0, 0x7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801889E\n\
- bl _08019F76\n\
-_0801889E:\n\
- ldrh r0, [r4, 0x2C]\n\
- ldrh r1, [r4, 0x28]\n\
- cmp r0, r1\n\
- bhi _080188AA\n\
- bl _08019F76\n\
-_080188AA:\n\
- mov r2, r8\n\
- strb r5, [r2]\n\
- ldr r0, _080188D4 @ =BattleScript_RainDishActivates\n\
- bl b_push_move_exec\n\
- ldr r1, _080188D8 @ =gBattleMoveDamage\n\
- ldrh r0, [r4, 0x2C]\n\
- lsrs r0, 4\n\
- str r0, [r1]\n\
- cmp r0, 0\n\
- bne _080188C4\n\
- movs r0, 0x1\n\
- str r0, [r1]\n\
-_080188C4:\n\
- ldr r0, [r1]\n\
- negs r0, r0\n\
- str r0, [r1]\n\
- bl _08019F22\n\
- .align 2, 0\n\
-_080188D0: .4byte gBattleWeather\n\
-_080188D4: .4byte BattleScript_RainDishActivates\n\
-_080188D8: .4byte gBattleMoveDamage\n\
-_080188DC:\n\
- adds r0, r2, 0\n\
- adds r0, 0x4C\n\
- adds r5, r1, r0\n\
- ldrb r0, [r5]\n\
- cmp r0, 0\n\
- bne _080188EC\n\
- bl _08019F76\n\
-_080188EC:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- cmp r4, 0\n\
- beq _08018906\n\
- bl _08019F76\n\
-_08018906:\n\
- ldr r0, [r5]\n\
- movs r1, 0x88\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018918\n\
- ldr r0, _08018990 @ =gBattleTextBuff1\n\
- ldr r1, _08018994 @ =gStatusConditionString_PoisonJpn\n\
- bl StringCopy\n\
-_08018918:\n\
- ldr r0, [r5]\n\
- movs r1, 0x7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0801892A\n\
- ldr r0, _08018990 @ =gBattleTextBuff1\n\
- ldr r1, _08018998 @ =gStatusConditionString_SleepJpn\n\
- bl StringCopy\n\
-_0801892A:\n\
- ldr r0, [r5]\n\
- movs r1, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0801893C\n\
- ldr r0, _08018990 @ =gBattleTextBuff1\n\
- ldr r1, _0801899C @ =gStatusConditionString_ParalysisJpn\n\
- bl StringCopy\n\
-_0801893C:\n\
- ldr r0, [r5]\n\
- movs r1, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0801894E\n\
- ldr r0, _08018990 @ =gBattleTextBuff1\n\
- ldr r1, _080189A0 @ =gStatusConditionString_BurnJpn\n\
- bl StringCopy\n\
-_0801894E:\n\
- ldr r0, [r5]\n\
- movs r1, 0x20\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018960\n\
- ldr r0, _08018990 @ =gBattleTextBuff1\n\
- ldr r1, _080189A4 @ =gStatusConditionString_IceJpn\n\
- bl StringCopy\n\
-_08018960:\n\
- str r4, [r5]\n\
- ldr r0, _080189A8 @ =0x02000000\n\
- ldr r4, _080189AC @ =gActiveBank\n\
- mov r3, r10\n\
- strb r3, [r4]\n\
- ldr r1, _080189B0 @ =0x00016003\n\
- adds r0, r1\n\
- strb r3, [r0]\n\
- ldr r0, _080189B4 @ =BattleScript_ShedSkinActivates\n\
- bl b_push_move_exec\n\
- str r5, [sp]\n\
- movs r0, 0\n\
- movs r1, 0x28\n\
- movs r2, 0\n\
- movs r3, 0x4\n\
- bl EmitSetAttributes\n\
- ldrb r0, [r4]\n\
- bl MarkBufferBankForExecution\n\
- bl _08019F22\n\
- .align 2, 0\n\
-_08018990: .4byte gBattleTextBuff1\n\
-_08018994: .4byte gStatusConditionString_PoisonJpn\n\
-_08018998: .4byte gStatusConditionString_SleepJpn\n\
-_0801899C: .4byte gStatusConditionString_ParalysisJpn\n\
-_080189A0: .4byte gStatusConditionString_BurnJpn\n\
-_080189A4: .4byte gStatusConditionString_IceJpn\n\
-_080189A8: .4byte 0x02000000\n\
-_080189AC: .4byte gActiveBank\n\
-_080189B0: .4byte 0x00016003\n\
-_080189B4: .4byte BattleScript_ShedSkinActivates\n\
-_080189B8:\n\
- ldrb r2, [r4, 0x1B]\n\
- movs r0, 0x1B\n\
- ldrsb r0, [r4, r0]\n\
- cmp r0, 0xB\n\
- ble _080189C6\n\
- bl _08019F76\n\
-_080189C6:\n\
- ldr r0, _08018A04 @ =gDisableStructs\n\
- mov r3, r10\n\
- lsls r1, r3, 3\n\
- subs r1, r3\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x16]\n\
- cmp r0, 0x2\n\
- bne _080189DC\n\
- bl _08019F76\n\
-_080189DC:\n\
- adds r0, r2, 0x1\n\
- movs r2, 0\n\
- strb r0, [r4, 0x1B]\n\
- ldr r5, _08018A08 @ =0x000160a4\n\
- adds r1, r7, r5\n\
- movs r0, 0x11\n\
- strb r0, [r1]\n\
- ldr r1, _08018A0C @ =0x000160a5\n\
- adds r0, r7, r1\n\
- strb r2, [r0]\n\
- ldr r0, _08018A10 @ =BattleScript_SpeedBoostActivates\n\
- bl b_push_move_exec\n\
- ldr r2, _08018A14 @ =0x00016003\n\
- adds r0, r7, r2\n\
- mov r3, r10\n\
- strb r3, [r0]\n\
- bl _08019F22\n\
- .align 2, 0\n\
-_08018A04: .4byte gDisableStructs\n\
-_08018A08: .4byte 0x000160a4\n\
-_08018A0C: .4byte 0x000160a5\n\
-_08018A10: .4byte BattleScript_SpeedBoostActivates\n\
-_08018A14: .4byte 0x00016003\n\
-_08018A18:\n\
- ldr r2, _08018A3C @ =gDisableStructs\n\
- ldrb r0, [r0]\n\
- lsls r1, r0, 3\n\
- subs r1, r0\n\
- lsls r1, 2\n\
- adds r1, r2\n\
- ldrb r3, [r1, 0x18]\n\
- lsls r0, r3, 31\n\
- lsrs r0, 31\n\
- movs r2, 0x1\n\
- eors r2, r0\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- ands r0, r3\n\
- orrs r0, r2\n\
- strb r0, [r1, 0x18]\n\
- bl _08019F76\n\
- .align 2, 0\n\
-_08018A3C: .4byte gDisableStructs\n\
-_08018A40:\n\
- mov r5, r8\n\
- ldrb r0, [r5]\n\
- cmp r0, 0x2B\n\
- beq _08018A4C\n\
- bl _08019F76\n\
-_08018A4C:\n\
- movs r4, 0\n\
- ldr r0, _08018ABC @ =gSoundMovesTable\n\
- ldrh r2, [r0]\n\
- ldr r5, _08018AC0 @ =0x0000ffff\n\
- adds r1, r0, 0\n\
- cmp r2, r5\n\
- bne _08018A5E\n\
- bl _08019F76\n\
-_08018A5E:\n\
- cmp r2, r3\n\
- beq _08018A76\n\
- adds r2, r1, 0\n\
-_08018A64:\n\
- adds r2, 0x2\n\
- adds r4, 0x1\n\
- ldrh r0, [r2]\n\
- cmp r0, r5\n\
- bne _08018A72\n\
- bl _08019F76\n\
-_08018A72:\n\
- cmp r0, r3\n\
- bne _08018A64\n\
-_08018A76:\n\
- lsls r0, r4, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- ldr r0, _08018AC0 @ =0x0000ffff\n\
- cmp r1, r0\n\
- bne _08018A86\n\
- bl _08019F76\n\
-_08018A86:\n\
- ldr r1, _08018AC4 @ =gBattleMons\n\
- ldr r0, _08018AC8 @ =gBankAttacker\n\
- ldrb r2, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r1, 0x50\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x80\n\
- lsls r1, 5\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018AAC\n\
- ldr r0, _08018ACC @ =gHitMarker\n\
- ldr r1, [r0]\n\
- movs r2, 0x80\n\
- lsls r2, 4\n\
- orrs r1, r2\n\
- str r1, [r0]\n\
-_08018AAC:\n\
- ldr r1, _08018AD0 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018AD4 @ =BattleScript_SoundproofProtected\n\
- str r0, [r1]\n\
- movs r0, 0x1\n\
- mov r9, r0\n\
- bl _08019F7C\n\
- .align 2, 0\n\
-_08018ABC: .4byte gSoundMovesTable\n\
-_08018AC0: .4byte 0x0000ffff\n\
-_08018AC4: .4byte gBattleMons\n\
-_08018AC8: .4byte gBankAttacker\n\
-_08018ACC: .4byte gHitMarker\n\
-_08018AD0: .4byte gBattlescriptCurrInstr\n\
-_08018AD4: .4byte BattleScript_SoundproofProtected\n\
-_08018AD8:\n\
- cmp r3, 0\n\
- bne _08018AE0\n\
- bl _08019F76\n\
-_08018AE0:\n\
- mov r1, r8\n\
- ldrb r0, [r1]\n\
- cmp r0, 0xB\n\
- beq _08018B50\n\
- cmp r0, 0xB\n\
- bgt _08018AF2\n\
- cmp r0, 0xA\n\
- beq _08018AF8\n\
- b _08018C6A\n\
-_08018AF2:\n\
- cmp r0, 0x12\n\
- beq _08018BA8\n\
- b _08018C6A\n\
-_08018AF8:\n\
- cmp r4, 0xD\n\
- beq _08018AFE\n\
- b _08018C6A\n\
-_08018AFE:\n\
- ldr r0, _08018B28 @ =gBattleMoves\n\
- lsls r1, r3, 1\n\
- adds r1, r3\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0\n\
- bne _08018B10\n\
- b _08018C6A\n\
-_08018B10:\n\
- ldr r1, _08018B2C @ =gProtectStructs\n\
- ldr r0, _08018B30 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- lsls r0, 4\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x2]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08018B3C\n\
- ldr r1, _08018B34 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018B38 @ =BattleScript_MoveHPDrain\n\
- b _08018B40\n\
- .align 2, 0\n\
-_08018B28: .4byte gBattleMoves\n\
-_08018B2C: .4byte gProtectStructs\n\
-_08018B30: .4byte gBankAttacker\n\
-_08018B34: .4byte gBattlescriptCurrInstr\n\
-_08018B38: .4byte BattleScript_MoveHPDrain\n\
-_08018B3C:\n\
- ldr r1, _08018B48 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018B4C @ =BattleScript_MoveHPDrain_PPLoss\n\
-_08018B40:\n\
- str r0, [r1]\n\
- movs r2, 0x1\n\
- b _08018C68\n\
- .align 2, 0\n\
-_08018B48: .4byte gBattlescriptCurrInstr\n\
-_08018B4C: .4byte BattleScript_MoveHPDrain_PPLoss\n\
-_08018B50:\n\
- cmp r4, 0xB\n\
- beq _08018B56\n\
- b _08018C6A\n\
-_08018B56:\n\
- ldr r0, _08018B80 @ =gBattleMoves\n\
- lsls r1, r3, 1\n\
- adds r1, r3\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0\n\
- bne _08018B68\n\
- b _08018C6A\n\
-_08018B68:\n\
- ldr r1, _08018B84 @ =gProtectStructs\n\
- ldr r0, _08018B88 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- lsls r0, 4\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x2]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08018B94\n\
- ldr r1, _08018B8C @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018B90 @ =BattleScript_MoveHPDrain\n\
- b _08018B98\n\
- .align 2, 0\n\
-_08018B80: .4byte gBattleMoves\n\
-_08018B84: .4byte gProtectStructs\n\
-_08018B88: .4byte gBankAttacker\n\
-_08018B8C: .4byte gBattlescriptCurrInstr\n\
-_08018B90: .4byte BattleScript_MoveHPDrain\n\
-_08018B94:\n\
- ldr r1, _08018BA0 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018BA4 @ =BattleScript_MoveHPDrain_PPLoss\n\
-_08018B98:\n\
- str r0, [r1]\n\
- movs r3, 0x1\n\
- mov r9, r3\n\
- b _08018C6A\n\
- .align 2, 0\n\
-_08018BA0: .4byte gBattlescriptCurrInstr\n\
-_08018BA4: .4byte BattleScript_MoveHPDrain_PPLoss\n\
-_08018BA8:\n\
- cmp r4, 0xA\n\
- bne _08018C6A\n\
- ldr r1, _08018BF4 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r5, r10\n\
- muls r5, r0\n\
- adds r0, r5, 0\n\
- adds r1, 0x4C\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x20\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08018C6A\n\
- ldr r2, _08018BF8 @ =0x02017100\n\
- mov r0, r10\n\
- lsls r1, r0, 2\n\
- adds r0, r1, r2\n\
- ldr r3, [r0]\n\
- movs r4, 0x1\n\
- ands r3, r4\n\
- adds r5, r1, 0\n\
- cmp r3, 0\n\
- bne _08018C30\n\
- ldr r0, _08018BFC @ =gBattleCommunication\n\
- strb r3, [r0, 0x5]\n\
- ldr r1, _08018C00 @ =gProtectStructs\n\
- ldr r0, _08018C04 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- lsls r0, 4\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x2]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08018C10\n\
- ldr r1, _08018C08 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018C0C @ =BattleScript_FlashFireBoost\n\
- b _08018C14\n\
- .align 2, 0\n\
-_08018BF4: .4byte gBattleMons\n\
-_08018BF8: .4byte 0x02017100\n\
-_08018BFC: .4byte gBattleCommunication\n\
-_08018C00: .4byte gProtectStructs\n\
-_08018C04: .4byte gBankAttacker\n\
-_08018C08: .4byte gBattlescriptCurrInstr\n\
-_08018C0C: .4byte BattleScript_FlashFireBoost\n\
-_08018C10:\n\
- ldr r1, _08018C28 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018C2C @ =BattleScript_FlashFireBoost_PPLoss\n\
-_08018C14:\n\
- str r0, [r1]\n\
- adds r0, r5, r2\n\
- ldr r1, [r0]\n\
- movs r2, 0x1\n\
- orrs r1, r2\n\
- str r1, [r0]\n\
- movs r1, 0x2\n\
- mov r9, r1\n\
- b _08018C6A\n\
- .align 2, 0\n\
-_08018C28: .4byte gBattlescriptCurrInstr\n\
-_08018C2C: .4byte BattleScript_FlashFireBoost_PPLoss\n\
-_08018C30:\n\
- ldr r0, _08018C4C @ =gBattleCommunication\n\
- strb r4, [r0, 0x5]\n\
- ldr r1, _08018C50 @ =gProtectStructs\n\
- ldr r0, _08018C54 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- lsls r0, 4\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x2]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08018C60\n\
- ldr r1, _08018C58 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018C5C @ =BattleScript_FlashFireBoost\n\
- b _08018C64\n\
- .align 2, 0\n\
-_08018C4C: .4byte gBattleCommunication\n\
-_08018C50: .4byte gProtectStructs\n\
-_08018C54: .4byte gBankAttacker\n\
-_08018C58: .4byte gBattlescriptCurrInstr\n\
-_08018C5C: .4byte BattleScript_FlashFireBoost\n\
-_08018C60:\n\
- ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018CA8 @ =BattleScript_FlashFireBoost_PPLoss\n\
-_08018C64:\n\
- str r0, [r1]\n\
- movs r2, 0x2\n\
-_08018C68:\n\
- mov r9, r2\n\
-_08018C6A:\n\
- mov r3, r9\n\
- cmp r3, 0x1\n\
- beq _08018C74\n\
- bl _08019F76\n\
-_08018C74:\n\
- ldr r1, _08018CAC @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r5, r10\n\
- muls r5, r0\n\
- adds r0, r5, 0\n\
- adds r1, r0, r1\n\
- ldrh r0, [r1, 0x2C]\n\
- ldrh r2, [r1, 0x28]\n\
- cmp r0, r2\n\
- bne _08018CD0\n\
- ldr r1, _08018CB0 @ =gProtectStructs\n\
- ldr r0, _08018CB4 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- lsls r0, 4\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x2]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08018CBC\n\
- ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018CB8 @ =BattleScript_MoveHPDrain_FullHP\n\
- str r0, [r1]\n\
- bl _08019F76\n\
- .align 2, 0\n\
-_08018CA4: .4byte gBattlescriptCurrInstr\n\
-_08018CA8: .4byte BattleScript_FlashFireBoost_PPLoss\n\
-_08018CAC: .4byte gBattleMons\n\
-_08018CB0: .4byte gProtectStructs\n\
-_08018CB4: .4byte gBankAttacker\n\
-_08018CB8: .4byte BattleScript_MoveHPDrain_FullHP\n\
-_08018CBC:\n\
- ldr r1, _08018CC8 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018CCC @ =BattleScript_MoveHPDrain_FullHP_PPLoss\n\
- str r0, [r1]\n\
- bl _08019F76\n\
- .align 2, 0\n\
-_08018CC8: .4byte gBattlescriptCurrInstr\n\
-_08018CCC: .4byte BattleScript_MoveHPDrain_FullHP_PPLoss\n\
-_08018CD0:\n\
- ldr r2, _08018CEC @ =gBattleMoveDamage\n\
- ldrh r0, [r1, 0x2C]\n\
- lsrs r0, 2\n\
- str r0, [r2]\n\
- cmp r0, 0\n\
- bne _08018CE0\n\
- mov r3, r9\n\
- str r3, [r2]\n\
-_08018CE0:\n\
- ldr r0, [r2]\n\
- negs r0, r0\n\
- str r0, [r2]\n\
- bl _08019F76\n\
- .align 2, 0\n\
-_08018CEC: .4byte gBattleMoveDamage\n\
-_08018CF0:\n\
- mov r5, r8\n\
- ldrb r0, [r5]\n\
- subs r0, 0x9\n\
- cmp r0, 0x2F\n\
- bls _08018CFE\n\
- bl _08019F76\n\
-_08018CFE:\n\
- lsls r0, 2\n\
- ldr r1, _08018D08 @ =_08018D0C\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_08018D08: .4byte _08018D0C\n\
- .align 2, 0\n\
-_08018D0C:\n\
- .4byte _08019128\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08018DCC\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08018E94\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08018F54\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _0801904C\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019204\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _080192E0\n\
-_08018DCC:\n\
- ldr r0, _08018E74 @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018DDC\n\
- bl _08019F76\n\
-_08018DDC:\n\
- cmp r3, 0xA5\n\
- bne _08018DE4\n\
- bl _08019F76\n\
-_08018DE4:\n\
- ldr r0, _08018E78 @ =gBattleMoves\n\
- lsls r1, r3, 1\n\
- adds r1, r3\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0\n\
- bne _08018DF8\n\
- bl _08019F76\n\
-_08018DF8:\n\
- ldr r2, _08018E7C @ =gSpecialStatuses\n\
- ldr r0, _08018E80 @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r1, r0, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x8\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08018E20\n\
- adds r0, r2, 0\n\
- adds r0, 0xC\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08018E20\n\
- bl _08019F76\n\
-_08018E20:\n\
- ldr r1, _08018E84 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r2, r10\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- adds r1, r0, r1\n\
- adds r3, r1, 0\n\
- adds r3, 0x21\n\
- ldrb r0, [r3]\n\
- cmp r0, r4\n\
- bne _08018E3A\n\
- bl _08019F76\n\
-_08018E3A:\n\
- adds r2, r1, 0\n\
- adds r2, 0x22\n\
- ldrb r0, [r2]\n\
- cmp r0, r4\n\
- bne _08018E48\n\
- bl _08019F76\n\
-_08018E48:\n\
- ldrh r0, [r1, 0x28]\n\
- cmp r0, 0\n\
- bne _08018E52\n\
- bl _08019F76\n\
-_08018E52:\n\
- strb r4, [r3]\n\
- strb r4, [r2]\n\
- ldr r1, _08018E88 @ =gBattleTextBuff1\n\
- movs r0, 0xFD\n\
- strb r0, [r1]\n\
- movs r0, 0x3\n\
- strb r0, [r1, 0x1]\n\
- strb r4, [r1, 0x2]\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x3]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08018E8C @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018E90 @ =BattleScript_ColorChangeActivates\n\
- str r0, [r1]\n\
- bl _08019F22\n\
- .align 2, 0\n\
-_08018E74: .4byte gBattleMoveFlags\n\
-_08018E78: .4byte gBattleMoves\n\
-_08018E7C: .4byte gSpecialStatuses\n\
-_08018E80: .4byte gBankTarget\n\
-_08018E84: .4byte gBattleMons\n\
-_08018E88: .4byte gBattleTextBuff1\n\
-_08018E8C: .4byte gBattlescriptCurrInstr\n\
-_08018E90: .4byte BattleScript_ColorChangeActivates\n\
-_08018E94:\n\
- ldr r0, _08018F2C @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018EA4\n\
- bl _08019F76\n\
-_08018EA4:\n\
- ldr r1, _08018F30 @ =gBattleMons\n\
- ldr r0, _08018F34 @ =gBankAttacker\n\
- ldrb r2, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r4, r0, r1\n\
- ldrh r0, [r4, 0x28]\n\
- cmp r0, 0\n\
- bne _08018EBA\n\
- bl _08019F76\n\
-_08018EBA:\n\
- ldr r0, _08018F38 @ =gProtectStructs\n\
- lsls r1, r2, 4\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _08018ECC\n\
- bl _08019F76\n\
-_08018ECC:\n\
- ldr r2, _08018F3C @ =gSpecialStatuses\n\
- ldr r0, _08018F40 @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r1, r0, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x8\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08018EF4\n\
- adds r0, r2, 0\n\
- adds r0, 0xC\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08018EF4\n\
- bl _08019F76\n\
-_08018EF4:\n\
- ldr r1, _08018F44 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r1, [r0, 0x8]\n\
- movs r2, 0x1\n\
- adds r0, r2, 0\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08018F0E\n\
- bl _08019F76\n\
-_08018F0E:\n\
- ldr r1, _08018F48 @ =gBattleMoveDamage\n\
- ldrh r0, [r4, 0x2C]\n\
- lsrs r0, 4\n\
- str r0, [r1]\n\
- cmp r0, 0\n\
- bne _08018F1C\n\
- str r2, [r1]\n\
-_08018F1C:\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08018F4C @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018F50 @ =BattleScript_RoughSkinActivates\n\
- str r0, [r1]\n\
- bl _08019F22\n\
- .align 2, 0\n\
-_08018F2C: .4byte gBattleMoveFlags\n\
-_08018F30: .4byte gBattleMons\n\
-_08018F34: .4byte gBankAttacker\n\
-_08018F38: .4byte gProtectStructs\n\
-_08018F3C: .4byte gSpecialStatuses\n\
-_08018F40: .4byte gBankTarget\n\
-_08018F44: .4byte gBattleMoves\n\
-_08018F48: .4byte gBattleMoveDamage\n\
-_08018F4C: .4byte gBattlescriptCurrInstr\n\
-_08018F50: .4byte BattleScript_RoughSkinActivates\n\
-_08018F54:\n\
- ldr r0, _08019020 @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018F64\n\
- bl _08019F76\n\
-_08018F64:\n\
- ldr r1, _08019024 @ =gBattleMons\n\
- ldr r0, _08019028 @ =gBankAttacker\n\
- ldrb r2, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r0, r1\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _08018F7A\n\
- bl _08019F76\n\
-_08018F7A:\n\
- ldr r0, _0801902C @ =gProtectStructs\n\
- lsls r1, r2, 4\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _08018F8C\n\
- bl _08019F76\n\
-_08018F8C:\n\
- ldr r2, _08019030 @ =gSpecialStatuses\n\
- ldr r0, _08019034 @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r1, r0, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x8\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08018FB4\n\
- adds r0, r2, 0\n\
- adds r0, 0xC\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08018FB4\n\
- bl _08019F76\n\
-_08018FB4:\n\
- ldr r1, _08019038 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r1, [r0, 0x8]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08018FCC\n\
- bl _08019F76\n\
-_08018FCC:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- beq _08018FE4\n\
- bl _08019F76\n\
-_08018FE4:\n\
- ldr r5, _0801903C @ =gBattleCommunication\n\
- movs r4, 0x3\n\
-_08018FE8:\n\
- bl Random\n\
- ands r0, r4\n\
- strb r0, [r5, 0x3]\n\
- cmp r0, 0\n\
- beq _08018FE8\n\
- ldr r1, _0801903C @ =gBattleCommunication\n\
- ldrb r0, [r1, 0x3]\n\
- cmp r0, 0x3\n\
- bne _08019000\n\
- adds r0, 0x2\n\
- strb r0, [r1, 0x3]\n\
-_08019000:\n\
- ldrb r0, [r1, 0x3]\n\
- adds r0, 0x40\n\
- strb r0, [r1, 0x3]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08019040 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08019044 @ =BattleScript_ApplySecondaryEffect\n\
- str r0, [r1]\n\
- ldr r2, _08019048 @ =gHitMarker\n\
- ldr r0, [r2]\n\
- movs r1, 0x80\n\
- lsls r1, 6\n\
- orrs r0, r1\n\
- str r0, [r2]\n\
- bl _08019F22\n\
- .align 2, 0\n\
-_08019020: .4byte gBattleMoveFlags\n\
-_08019024: .4byte gBattleMons\n\
-_08019028: .4byte gBankAttacker\n\
-_0801902C: .4byte gProtectStructs\n\
-_08019030: .4byte gSpecialStatuses\n\
-_08019034: .4byte gBankTarget\n\
-_08019038: .4byte gBattleMoves\n\
-_0801903C: .4byte gBattleCommunication\n\
-_08019040: .4byte gBattlescriptCurrInstr\n\
-_08019044: .4byte BattleScript_ApplySecondaryEffect\n\
-_08019048: .4byte gHitMarker\n\
-_0801904C:\n\
- ldr r0, _080190FC @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0801905C\n\
- bl _08019F76\n\
-_0801905C:\n\
- ldr r1, _08019100 @ =gBattleMons\n\
- ldr r0, _08019104 @ =gBankAttacker\n\
- ldrb r2, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r0, r1\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _08019072\n\
- bl _08019F76\n\
-_08019072:\n\
- ldr r0, _08019108 @ =gProtectStructs\n\
- lsls r1, r2, 4\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _08019084\n\
- bl _08019F76\n\
-_08019084:\n\
- ldr r2, _0801910C @ =gSpecialStatuses\n\
- ldr r0, _08019110 @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r1, r0, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x8\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _080190AC\n\
- adds r0, r2, 0\n\
- adds r0, 0xC\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _080190AC\n\
- bl _08019F76\n\
-_080190AC:\n\
- ldr r1, _08019114 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r1, [r0, 0x8]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080190C4\n\
- bl _08019F76\n\
-_080190C4:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- beq _080190DC\n\
- bl _08019F76\n\
-_080190DC:\n\
- ldr r1, _08019118 @ =gBattleCommunication\n\
- movs r0, 0x42\n\
- strb r0, [r1, 0x3]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _0801911C @ =gBattlescriptCurrInstr\n\
- ldr r0, _08019120 @ =BattleScript_ApplySecondaryEffect\n\
- str r0, [r1]\n\
- ldr r2, _08019124 @ =gHitMarker\n\
- ldr r0, [r2]\n\
- movs r1, 0x80\n\
- lsls r1, 6\n\
- orrs r0, r1\n\
- str r0, [r2]\n\
- bl _08019F22\n\
- .align 2, 0\n\
-_080190FC: .4byte gBattleMoveFlags\n\
-_08019100: .4byte gBattleMons\n\
-_08019104: .4byte gBankAttacker\n\
-_08019108: .4byte gProtectStructs\n\
-_0801910C: .4byte gSpecialStatuses\n\
-_08019110: .4byte gBankTarget\n\
-_08019114: .4byte gBattleMoves\n\
-_08019118: .4byte gBattleCommunication\n\
-_0801911C: .4byte gBattlescriptCurrInstr\n\
-_08019120: .4byte BattleScript_ApplySecondaryEffect\n\
-_08019124: .4byte gHitMarker\n\
-_08019128:\n\
- ldr r0, _080191D8 @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08019138\n\
- bl _08019F76\n\
-_08019138:\n\
- ldr r1, _080191DC @ =gBattleMons\n\
- ldr r0, _080191E0 @ =gBankAttacker\n\
- ldrb r2, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r0, r1\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _0801914E\n\
- bl _08019F76\n\
-_0801914E:\n\
- ldr r0, _080191E4 @ =gProtectStructs\n\
- lsls r1, r2, 4\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _08019160\n\
- bl _08019F76\n\
-_08019160:\n\
- ldr r2, _080191E8 @ =gSpecialStatuses\n\
- ldr r0, _080191EC @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r1, r0, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x8\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08019188\n\
- adds r0, r2, 0\n\
- adds r0, 0xC\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08019188\n\
- bl _08019F76\n\
-_08019188:\n\
- ldr r1, _080191F0 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r1, [r0, 0x8]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080191A0\n\
- bl _08019F76\n\
-_080191A0:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- beq _080191B8\n\
- bl _08019F76\n\
-_080191B8:\n\
- ldr r1, _080191F4 @ =gBattleCommunication\n\
- movs r0, 0x45\n\
- strb r0, [r1, 0x3]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _080191F8 @ =gBattlescriptCurrInstr\n\
- ldr r0, _080191FC @ =BattleScript_ApplySecondaryEffect\n\
- str r0, [r1]\n\
- ldr r2, _08019200 @ =gHitMarker\n\
- ldr r0, [r2]\n\
- movs r1, 0x80\n\
- lsls r1, 6\n\
- orrs r0, r1\n\
- str r0, [r2]\n\
- bl _08019F22\n\
- .align 2, 0\n\
-_080191D8: .4byte gBattleMoveFlags\n\
-_080191DC: .4byte gBattleMons\n\
-_080191E0: .4byte gBankAttacker\n\
-_080191E4: .4byte gProtectStructs\n\
-_080191E8: .4byte gSpecialStatuses\n\
-_080191EC: .4byte gBankTarget\n\
-_080191F0: .4byte gBattleMoves\n\
-_080191F4: .4byte gBattleCommunication\n\
-_080191F8: .4byte gBattlescriptCurrInstr\n\
-_080191FC: .4byte BattleScript_ApplySecondaryEffect\n\
-_08019200: .4byte gHitMarker\n\
-_08019204:\n\
- ldr r0, _080192B4 @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08019214\n\
- bl _08019F76\n\
-_08019214:\n\
- ldr r1, _080192B8 @ =gBattleMons\n\
- ldr r0, _080192BC @ =gBankAttacker\n\
- ldrb r2, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r0, r1\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _0801922A\n\
- bl _08019F76\n\
-_0801922A:\n\
- ldr r0, _080192C0 @ =gProtectStructs\n\
- lsls r1, r2, 4\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _0801923C\n\
- bl _08019F76\n\
-_0801923C:\n\
- ldr r1, _080192C4 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r1, [r0, 0x8]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08019254\n\
- bl _08019F76\n\
-_08019254:\n\
- ldr r2, _080192C8 @ =gSpecialStatuses\n\
- ldr r0, _080192CC @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r1, r0, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x8\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _0801927C\n\
- adds r0, r2, 0\n\
- adds r0, 0xC\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _0801927C\n\
- bl _08019F76\n\
-_0801927C:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- beq _08019294\n\
- bl _08019F76\n\
-_08019294:\n\
- ldr r1, _080192D0 @ =gBattleCommunication\n\
- movs r0, 0x43\n\
- strb r0, [r1, 0x3]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _080192D4 @ =gBattlescriptCurrInstr\n\
- ldr r0, _080192D8 @ =BattleScript_ApplySecondaryEffect\n\
- str r0, [r1]\n\
- ldr r2, _080192DC @ =gHitMarker\n\
- ldr r0, [r2]\n\
- movs r1, 0x80\n\
- lsls r1, 6\n\
- orrs r0, r1\n\
- str r0, [r2]\n\
- bl _08019F22\n\
- .align 2, 0\n\
-_080192B4: .4byte gBattleMoveFlags\n\
-_080192B8: .4byte gBattleMons\n\
-_080192BC: .4byte gBankAttacker\n\
-_080192C0: .4byte gProtectStructs\n\
-_080192C4: .4byte gBattleMoves\n\
-_080192C8: .4byte gSpecialStatuses\n\
-_080192CC: .4byte gBankTarget\n\
-_080192D0: .4byte gBattleCommunication\n\
-_080192D4: .4byte gBattlescriptCurrInstr\n\
-_080192D8: .4byte BattleScript_ApplySecondaryEffect\n\
-_080192DC: .4byte gHitMarker\n\
-_080192E0:\n\
- ldr r0, _08019420 @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080192F0\n\
- bl _08019F76\n\
-_080192F0:\n\
- ldr r5, _08019424 @ =gBattleMons\n\
- ldr r7, _08019428 @ =gBankAttacker\n\
- ldrb r1, [r7]\n\
- movs r6, 0x58\n\
- adds r0, r1, 0\n\
- muls r0, r6\n\
- adds r0, r5\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _08019308\n\
- bl _08019F76\n\
-_08019308:\n\
- ldr r0, _0801942C @ =gProtectStructs\n\
- lsls r1, 4\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _0801931A\n\
- bl _08019F76\n\
-_0801931A:\n\
- ldr r1, _08019430 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r1, [r0, 0x8]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08019332\n\
- bl _08019F76\n\
-_08019332:\n\
- ldr r3, _08019434 @ =gSpecialStatuses\n\
- ldr r0, _08019438 @ =gBankTarget\n\
- mov r8, r0\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r2, r0, 2\n\
- adds r0, r3, 0\n\
- adds r0, 0x8\n\
- adds r0, r2, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _0801935C\n\
- adds r0, r3, 0\n\
- adds r0, 0xC\n\
- adds r0, r2, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _0801935C\n\
- bl _08019F76\n\
-_0801935C:\n\
- adds r0, r1, 0\n\
- muls r0, r6\n\
- adds r0, r5\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _0801936C\n\
- bl _08019F76\n\
-_0801936C:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- beq _08019384\n\
- bl _08019F76\n\
-_08019384:\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0xC\n\
- bne _08019396\n\
- bl _08019F76\n\
-_08019396:\n\
- ldr r0, [sp, 0x8]\n\
- ldr r1, [sp, 0x10]\n\
- bl GetGenderFromSpeciesAndPersonality\n\
- adds r4, r0, 0\n\
- ldr r0, [sp, 0xC]\n\
- ldr r1, [sp, 0x14]\n\
- bl GetGenderFromSpeciesAndPersonality\n\
- lsls r4, 24\n\
- lsls r0, 24\n\
- cmp r4, r0\n\
- bne _080193B4\n\
- bl _08019F76\n\
-_080193B4:\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r4, r5, 0\n\
- adds r4, 0x50\n\
- adds r0, r4\n\
- ldr r0, [r0]\n\
- movs r1, 0xF0\n\
- lsls r1, 12\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080193CE\n\
- bl _08019F76\n\
-_080193CE:\n\
- ldr r0, [sp, 0x8]\n\
- ldr r1, [sp, 0x10]\n\
- bl GetGenderFromSpeciesAndPersonality\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0xFF\n\
- bne _080193E2\n\
- bl _08019F76\n\
-_080193E2:\n\
- ldr r0, [sp, 0xC]\n\
- ldr r1, [sp, 0x14]\n\
- bl GetGenderFromSpeciesAndPersonality\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0xFF\n\
- bne _080193F6\n\
- bl _08019F76\n\
-_080193F6:\n\
- ldrb r0, [r7]\n\
- adds r2, r0, 0\n\
- muls r2, r6\n\
- adds r2, r4\n\
- ldr r1, _0801943C @ =gBitTable\n\
- mov r3, r8\n\
- ldrb r0, [r3]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldr r1, [r0]\n\
- lsls r1, 16\n\
- ldr r0, [r2]\n\
- orrs r0, r1\n\
- str r0, [r2]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08019440 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08019444 @ =BattleScript_CuteCharmActivates\n\
- str r0, [r1]\n\
- bl _08019F22\n\
- .align 2, 0\n\
-_08019420: .4byte gBattleMoveFlags\n\
-_08019424: .4byte gBattleMons\n\
-_08019428: .4byte gBankAttacker\n\
-_0801942C: .4byte gProtectStructs\n\
-_08019430: .4byte gBattleMoves\n\
-_08019434: .4byte gSpecialStatuses\n\
-_08019438: .4byte gBankTarget\n\
-_0801943C: .4byte gBitTable\n\
-_08019440: .4byte gBattlescriptCurrInstr\n\
-_08019444: .4byte BattleScript_CuteCharmActivates\n\
-_08019448:\n\
- movs r5, 0\n\
- mov r10, r5\n\
- ldr r0, _0801947C @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r10, r0\n\
- bcc _08019458\n\
- bl _08019F76\n\
-_08019458:\n\
- ldr r1, _08019480 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r2, r10\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- adds r0, r1\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- subs r0, 0x7\n\
- adds r2, r1, 0\n\
- cmp r0, 0x41\n\
- bls _08019472\n\
- b _080196D6\n\
-_08019472:\n\
- lsls r0, 2\n\
- ldr r1, _08019484 @ =_08019488\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_0801947C: .4byte gNoOfAllBanks\n\
-_08019480: .4byte gBattleMons\n\
-_08019484: .4byte _08019488\n\
- .align 2, 0\n\
-_08019488:\n\
- .4byte _080195EC\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196B0\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _08019614\n\
- .4byte _080196D6\n\
- .4byte _08019590\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080195BC\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _08019680\n\
- .4byte _08019650\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _08019614\n\
-_08019590:\n\
- movs r0, 0x58\n\
- mov r3, r10\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- adds r1, r2, 0\n\
- adds r1, 0x4C\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- ldr r1, _080195B0 @ =0x00000f88\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080195AA\n\
- b _080196D6\n\
-_080195AA:\n\
- ldr r0, _080195B4 @ =gBattleTextBuff1\n\
- ldr r1, _080195B8 @ =gStatusConditionString_PoisonJpn\n\
- b _0801969C\n\
- .align 2, 0\n\
-_080195B0: .4byte 0x00000f88\n\
-_080195B4: .4byte gBattleTextBuff1\n\
-_080195B8: .4byte gStatusConditionString_PoisonJpn\n\
-_080195BC:\n\
- movs r0, 0x58\n\
- mov r1, r10\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r1, r2, 0\n\
- adds r1, 0x50\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080195D6\n\
- b _080196D6\n\
-_080195D6:\n\
- ldr r0, _080195E4 @ =gBattleTextBuff1\n\
- ldr r1, _080195E8 @ =gStatusConditionString_ConfusionJpn\n\
- bl StringCopy\n\
- movs r2, 0x2\n\
- mov r9, r2\n\
- b _080196DC\n\
- .align 2, 0\n\
-_080195E4: .4byte gBattleTextBuff1\n\
-_080195E8: .4byte gStatusConditionString_ConfusionJpn\n\
-_080195EC:\n\
- movs r0, 0x58\n\
- mov r3, r10\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- adds r1, r2, 0\n\
- adds r1, 0x4C\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080196D6\n\
- ldr r0, _0801960C @ =gBattleTextBuff1\n\
- ldr r1, _08019610 @ =gStatusConditionString_ParalysisJpn\n\
- b _0801969C\n\
- .align 2, 0\n\
-_0801960C: .4byte gBattleTextBuff1\n\
-_08019610: .4byte gStatusConditionString_ParalysisJpn\n\
-_08019614:\n\
- movs r0, 0x58\n\
- mov r3, r10\n\
- muls r3, r0\n\
- adds r0, r2, 0\n\
- adds r0, 0x4C\n\
- adds r0, r3, r0\n\
- ldr r0, [r0]\n\
- movs r1, 0x7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080196D6\n\
- adds r2, 0x50\n\
- adds r2, r3, r2\n\
- ldr r0, [r2]\n\
- ldr r1, _08019644 @ =0xf7ffffff\n\
- ands r0, r1\n\
- str r0, [r2]\n\
- ldr r0, _08019648 @ =gBattleTextBuff1\n\
- ldr r1, _0801964C @ =gStatusConditionString_SleepJpn\n\
- bl StringCopy\n\
- movs r0, 0x1\n\
- mov r9, r0\n\
- b _080196DC\n\
- .align 2, 0\n\
-_08019644: .4byte 0xf7ffffff\n\
-_08019648: .4byte gBattleTextBuff1\n\
-_0801964C: .4byte gStatusConditionString_SleepJpn\n\
-_08019650:\n\
- movs r0, 0x58\n\
- mov r1, r10\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r1, r2, 0\n\
- adds r1, 0x4C\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080196D6\n\
- ldr r0, _08019678 @ =gBattleTextBuff1\n\
- ldr r1, _0801967C @ =gStatusConditionString_BurnJpn\n\
- bl StringCopy\n\
- movs r2, 0x1\n\
- mov r9, r2\n\
- b _080196DC\n\
- .align 2, 0\n\
-_08019678: .4byte gBattleTextBuff1\n\
-_0801967C: .4byte gStatusConditionString_BurnJpn\n\
-_08019680:\n\
- movs r0, 0x58\n\
- mov r3, r10\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- adds r1, r2, 0\n\
- adds r1, 0x4C\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x20\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080196D6\n\
- ldr r0, _080196A8 @ =gBattleTextBuff1\n\
- ldr r1, _080196AC @ =gStatusConditionString_IceJpn\n\
-_0801969C:\n\
- bl StringCopy\n\
- movs r5, 0x1\n\
- mov r9, r5\n\
- b _080196DC\n\
- .align 2, 0\n\
-_080196A8: .4byte gBattleTextBuff1\n\
-_080196AC: .4byte gStatusConditionString_IceJpn\n\
-_080196B0:\n\
- movs r0, 0x58\n\
- mov r1, r10\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r1, r2, 0\n\
- adds r1, 0x50\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0xF0\n\
- lsls r1, 12\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080196D6\n\
- ldr r0, _080196EC @ =gBattleTextBuff1\n\
- ldr r1, _080196F0 @ =gStatusConditionString_LoveJpn\n\
- bl StringCopy\n\
- movs r2, 0x3\n\
- mov r9, r2\n\
-_080196D6:\n\
- mov r3, r9\n\
- cmp r3, 0\n\
- beq _08019798\n\
-_080196DC:\n\
- mov r5, r9\n\
- cmp r5, 0x2\n\
- beq _08019710\n\
- cmp r5, 0x2\n\
- bgt _080196F4\n\
- cmp r5, 0x1\n\
- beq _080196FC\n\
- b _0801973C\n\
- .align 2, 0\n\
-_080196EC: .4byte gBattleTextBuff1\n\
-_080196F0: .4byte gStatusConditionString_LoveJpn\n\
-_080196F4:\n\
- mov r0, r9\n\
- cmp r0, 0x3\n\
- beq _08019728\n\
- b _0801973C\n\
-_080196FC:\n\
- ldr r1, _0801970C @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r2, r10\n\
- muls r2, r0\n\
- adds r1, 0x4C\n\
- adds r2, r1\n\
- movs r0, 0\n\
- b _0801973A\n\
- .align 2, 0\n\
-_0801970C: .4byte gBattleMons\n\
-_08019710:\n\
- ldr r1, _08019724 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r2, r10\n\
- muls r2, r0\n\
- adds r1, 0x50\n\
- adds r2, r1\n\
- ldr r0, [r2]\n\
- movs r1, 0x8\n\
- negs r1, r1\n\
- b _08019738\n\
- .align 2, 0\n\
-_08019724: .4byte gBattleMons\n\
-_08019728:\n\
- ldr r1, _08019778 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r2, r10\n\
- muls r2, r0\n\
- adds r1, 0x50\n\
- adds r2, r1\n\
- ldr r0, [r2]\n\
- ldr r1, _0801977C @ =0xfff0ffff\n\
-_08019738:\n\
- ands r0, r1\n\
-_0801973A:\n\
- str r0, [r2]\n\
-_0801973C:\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08019780 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08019784 @ =gUnknown_081D9956\n\
- str r0, [r1]\n\
- ldr r0, _08019788 @ =0x02000000\n\
- ldr r1, _0801978C @ =0x00016003\n\
- adds r0, r1\n\
- mov r2, r10\n\
- strb r2, [r0]\n\
- ldr r4, _08019790 @ =gActiveBank\n\
- strb r2, [r4]\n\
- ldrb r1, [r4]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- ldr r1, _08019794 @ =gUnknown_02024ACC\n\
- adds r0, r1\n\
- str r0, [sp]\n\
- movs r0, 0\n\
- movs r1, 0x28\n\
- movs r2, 0\n\
- movs r3, 0x4\n\
- bl EmitSetAttributes\n\
- ldrb r0, [r4]\n\
- bl MarkBufferBankForExecution\n\
- bl _08019F92\n\
- .align 2, 0\n\
-_08019778: .4byte gBattleMons\n\
-_0801977C: .4byte 0xfff0ffff\n\
-_08019780: .4byte gBattlescriptCurrInstr\n\
-_08019784: .4byte gUnknown_081D9956\n\
-_08019788: .4byte 0x02000000\n\
-_0801978C: .4byte 0x00016003\n\
-_08019790: .4byte gActiveBank\n\
-_08019794: .4byte gUnknown_02024ACC\n\
-_08019798:\n\
- mov r0, r10\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- ldr r0, _080197B0 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r10, r0\n\
- bcs _080197AC\n\
- b _08019458\n\
-_080197AC:\n\
- bl _08019F76\n\
- .align 2, 0\n\
-_080197B0: .4byte gNoOfAllBanks\n\
-_080197B4:\n\
- movs r3, 0\n\
- mov r10, r3\n\
- ldr r0, _080197FC @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r10, r0\n\
- bcc _080197C2\n\
- b _08019F76\n\
-_080197C2:\n\
- ldr r4, _08019800 @ =gBattleMons\n\
-_080197C4:\n\
- movs r0, 0x58\n\
- mov r5, r10\n\
- muls r5, r0\n\
- adds r0, r5, 0\n\
- adds r0, r4\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x3B\n\
- bne _080197E8\n\
- mov r0, r10\n\
- bl CastformDataTypeChange\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
- cmp r0, 0\n\
- beq _080197E8\n\
- b _08019E40\n\
-_080197E8:\n\
- mov r0, r10\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- ldr r0, _080197FC @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r10, r0\n\
- bcc _080197C4\n\
- b _08019F76\n\
- .align 2, 0\n\
-_080197FC: .4byte gNoOfAllBanks\n\
-_08019800: .4byte gBattleMons\n\
-_08019804:\n\
- mov r1, r8\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x1C\n\
- beq _0801980E\n\
- b _08019F76\n\
-_0801980E:\n\
- ldr r4, _08019860 @ =gHitMarker\n\
- ldr r1, [r4]\n\
- movs r0, 0x80\n\
- lsls r0, 7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801981E\n\
- b _08019F76\n\
-_0801981E:\n\
- ldr r0, _08019864 @ =0xffffbfff\n\
- ands r1, r0\n\
- str r1, [r4]\n\
- ldr r3, _08019868 @ =0x000160ca\n\
- adds r2, r7, r3\n\
- ldrb r1, [r2]\n\
- movs r0, 0x3F\n\
- ands r0, r1\n\
- strb r0, [r2]\n\
- cmp r0, 0x6\n\
- bne _08019838\n\
- movs r0, 0x2\n\
- strb r0, [r2]\n\
-_08019838:\n\
- ldr r1, _0801986C @ =gBattleCommunication\n\
- ldrb r0, [r2]\n\
- adds r0, 0x40\n\
- strb r0, [r1, 0x3]\n\
- ldr r0, _08019870 @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- ldr r5, _08019874 @ =0x00016003\n\
- adds r0, r7, r5\n\
- strb r1, [r0]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08019878 @ =gBattlescriptCurrInstr\n\
- ldr r0, _0801987C @ =BattleScript_SynchronizeActivates\n\
- str r0, [r1]\n\
- ldr r0, [r4]\n\
- movs r1, 0x80\n\
- lsls r1, 6\n\
- orrs r0, r1\n\
- str r0, [r4]\n\
- b _08019F22\n\
- .align 2, 0\n\
-_08019860: .4byte gHitMarker\n\
-_08019864: .4byte 0xffffbfff\n\
-_08019868: .4byte 0x000160ca\n\
-_0801986C: .4byte gBattleCommunication\n\
-_08019870: .4byte gBankTarget\n\
-_08019874: .4byte 0x00016003\n\
-_08019878: .4byte gBattlescriptCurrInstr\n\
-_0801987C: .4byte BattleScript_SynchronizeActivates\n\
-_08019880:\n\
- mov r1, r8\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x1C\n\
- beq _0801988A\n\
- b _08019F76\n\
-_0801988A:\n\
- ldr r4, _080198DC @ =gHitMarker\n\
- ldr r1, [r4]\n\
- movs r0, 0x80\n\
- lsls r0, 7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801989A\n\
- b _08019F76\n\
-_0801989A:\n\
- ldr r0, _080198E0 @ =0xffffbfff\n\
- ands r1, r0\n\
- str r1, [r4]\n\
- ldr r3, _080198E4 @ =0x000160ca\n\
- adds r2, r7, r3\n\
- ldrb r1, [r2]\n\
- movs r0, 0x3F\n\
- ands r0, r1\n\
- strb r0, [r2]\n\
- cmp r0, 0x6\n\
- bne _080198B4\n\
- movs r0, 0x2\n\
- strb r0, [r2]\n\
-_080198B4:\n\
- ldr r1, _080198E8 @ =gBattleCommunication\n\
- ldrb r0, [r2]\n\
- strb r0, [r1, 0x3]\n\
- ldr r0, _080198EC @ =gBankAttacker\n\
- ldrb r1, [r0]\n\
- ldr r5, _080198F0 @ =0x00016003\n\
- adds r0, r7, r5\n\
- strb r1, [r0]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _080198F4 @ =gBattlescriptCurrInstr\n\
- ldr r0, _080198F8 @ =BattleScript_SynchronizeActivates\n\
- str r0, [r1]\n\
- ldr r0, [r4]\n\
- movs r1, 0x80\n\
- lsls r1, 6\n\
- orrs r0, r1\n\
- str r0, [r4]\n\
- b _08019F22\n\
- .align 2, 0\n\
-_080198DC: .4byte gHitMarker\n\
-_080198E0: .4byte 0xffffbfff\n\
-_080198E4: .4byte 0x000160ca\n\
-_080198E8: .4byte gBattleCommunication\n\
-_080198EC: .4byte gBankAttacker\n\
-_080198F0: .4byte 0x00016003\n\
-_080198F4: .4byte gBattlescriptCurrInstr\n\
-_080198F8: .4byte BattleScript_SynchronizeActivates\n\
-_080198FC:\n\
- movs r4, 0\n\
- ldr r0, _08019934 @ =gNoOfAllBanks\n\
- ldrb r1, [r0]\n\
- cmp r4, r1\n\
- blt _08019908\n\
- b _08019F76\n\
-_08019908:\n\
- ldr r0, _08019938 @ =gBattleMons\n\
- adds r5, r1, 0\n\
- ldr r2, _0801993C @ =gStatuses3\n\
- adds r3, r0, 0\n\
- adds r3, 0x20\n\
- movs r6, 0x80\n\
- lsls r6, 12\n\
-_08019916:\n\
- ldrb r1, [r3]\n\
- cmp r1, 0x16\n\
- bne _08019926\n\
- ldr r0, [r2]\n\
- ands r0, r6\n\
- cmp r0, 0\n\
- beq _08019926\n\
- b _08019E6C\n\
-_08019926:\n\
- adds r2, 0x4\n\
- adds r3, 0x58\n\
- adds r4, 0x1\n\
- cmp r4, r5\n\
- blt _08019916\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019934: .4byte gNoOfAllBanks\n\
-_08019938: .4byte gBattleMons\n\
-_0801993C: .4byte gStatuses3\n\
-_08019940:\n\
- movs r4, 0\n\
- ldr r0, _08019A1C @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _0801994C\n\
- b _08019F76\n\
-_0801994C:\n\
- ldr r0, _08019A20 @ =gActiveBank\n\
- mov r8, r0\n\
- ldr r1, _08019A24 @ =gBattleMons\n\
- adds r1, 0x20\n\
- str r1, [sp, 0x1C]\n\
- movs r2, 0\n\
- str r2, [sp, 0x20]\n\
-_0801995A:\n\
- ldr r3, [sp, 0x1C]\n\
- ldrb r0, [r3]\n\
- cmp r0, 0x24\n\
- beq _08019964\n\
- b _08019AF6\n\
-_08019964:\n\
- ldr r0, _08019A28 @ =gStatuses3\n\
- ldr r5, [sp, 0x20]\n\
- adds r0, r5, r0\n\
- ldr r1, [r0]\n\
- movs r0, 0x80\n\
- lsls r0, 13\n\
- ands r1, r0\n\
- str r5, [sp, 0x18]\n\
- cmp r1, 0\n\
- bne _0801997A\n\
- b _08019AF6\n\
-_0801997A:\n\
- lsls r0, r4, 24\n\
- lsrs r0, 24\n\
- bl GetBankIdentity\n\
- movs r1, 0x1\n\
- adds r5, r0, 0\n\
- eors r5, r1\n\
- ands r5, r1\n\
- adds r0, r5, 0\n\
- bl GetBankByPlayerAI\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- adds r0, r5, 0x2\n\
- bl GetBankByPlayerAI\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- ldr r0, _08019A2C @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r2, 0x1\n\
- adds r0, r2, 0\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080199AE\n\
- b _08019ABC\n\
-_080199AE:\n\
- movs r1, 0x58\n\
- adds r0, r6, 0\n\
- muls r0, r1\n\
- ldr r3, _08019A24 @ =gBattleMons\n\
- adds r1, r0, r3\n\
- adds r0, r1, 0\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- beq _08019A78\n\
- ldrh r0, [r1, 0x28]\n\
- cmp r0, 0\n\
- beq _08019A34\n\
- movs r1, 0x58\n\
- adds r0, r7, 0\n\
- muls r0, r1\n\
- adds r1, r0, r3\n\
- adds r0, r1, 0\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- beq _08019A34\n\
- ldrh r0, [r1, 0x28]\n\
- cmp r0, 0\n\
- beq _08019A34\n\
- str r2, [sp, 0x24]\n\
- bl Random\n\
- ldr r2, [sp, 0x24]\n\
- adds r1, r2, 0\n\
- ands r1, r0\n\
- lsls r1, 1\n\
- orrs r5, r1\n\
- adds r0, r5, 0\n\
- bl GetBankByPlayerAI\n\
- mov r2, r8\n\
- strb r0, [r2]\n\
- ldrb r0, [r2]\n\
- movs r3, 0x58\n\
- muls r0, r3\n\
- ldr r5, _08019A24 @ =gBattleMons\n\
- adds r0, r5\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- ldr r1, [sp, 0x1C]\n\
- strb r0, [r1]\n\
- ldrb r0, [r2]\n\
- muls r0, r3\n\
- adds r0, r5\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- ldr r2, _08019A30 @ =gLastUsedAbility\n\
- strb r0, [r2]\n\
- b _08019AE4\n\
- .align 2, 0\n\
-_08019A1C: .4byte gNoOfAllBanks\n\
-_08019A20: .4byte gActiveBank\n\
-_08019A24: .4byte gBattleMons\n\
-_08019A28: .4byte gStatuses3\n\
-_08019A2C: .4byte gBattleTypeFlags\n\
-_08019A30: .4byte gLastUsedAbility\n\
-_08019A34:\n\
- ldr r3, _08019A74 @ =gBattleMons\n\
- movs r2, 0x58\n\
- adds r0, r6, 0\n\
- muls r0, r2\n\
- adds r1, r0, r3\n\
- adds r0, r1, 0\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- beq _08019A78\n\
- ldrh r0, [r1, 0x28]\n\
- cmp r0, 0\n\
- beq _08019A78\n\
- mov r5, r8\n\
- strb r6, [r5]\n\
- adds r1, r4, 0\n\
- muls r1, r2\n\
- adds r1, r3\n\
- ldrb r0, [r5]\n\
- muls r0, r2\n\
- adds r0, r3\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- adds r1, 0x20\n\
- strb r0, [r1]\n\
- ldrb r0, [r5]\n\
- muls r0, r2\n\
- adds r0, r3\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- b _08019AE0\n\
- .align 2, 0\n\
-_08019A74: .4byte gBattleMons\n\
-_08019A78:\n\
- ldr r3, _08019AB8 @ =gBattleMons\n\
- movs r2, 0x58\n\
- adds r0, r7, 0\n\
- muls r0, r2\n\
- adds r1, r0, r3\n\
- adds r0, r1, 0\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- beq _08019AEE\n\
- ldrh r0, [r1, 0x28]\n\
- cmp r0, 0\n\
- beq _08019AEE\n\
- mov r5, r8\n\
- strb r7, [r5]\n\
- adds r1, r4, 0\n\
- muls r1, r2\n\
- adds r1, r3\n\
- ldrb r0, [r5]\n\
- muls r0, r2\n\
- adds r0, r3\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- adds r1, 0x20\n\
- strb r0, [r1]\n\
- ldrb r0, [r5]\n\
- muls r0, r2\n\
- adds r0, r3\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- b _08019AE0\n\
- .align 2, 0\n\
-_08019AB8: .4byte gBattleMons\n\
-_08019ABC:\n\
- mov r2, r8\n\
- strb r6, [r2]\n\
- movs r3, 0x58\n\
- adds r0, r6, 0\n\
- muls r0, r3\n\
- ldr r5, _08019B10 @ =gBattleMons\n\
- adds r0, r5\n\
- adds r2, r0, 0\n\
- adds r2, 0x20\n\
- ldrb r1, [r2]\n\
- cmp r1, 0\n\
- beq _08019AEE\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- beq _08019AEE\n\
- ldr r0, [sp, 0x1C]\n\
- strb r1, [r0]\n\
- ldrb r0, [r2]\n\
-_08019AE0:\n\
- ldr r1, _08019B14 @ =gLastUsedAbility\n\
- strb r0, [r1]\n\
-_08019AE4:\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_08019AEE:\n\
- mov r2, r9\n\
- cmp r2, 0\n\
- beq _08019AF6\n\
- b _08019E88\n\
-_08019AF6:\n\
- ldr r3, [sp, 0x1C]\n\
- adds r3, 0x58\n\
- str r3, [sp, 0x1C]\n\
- ldr r5, [sp, 0x20]\n\
- adds r5, 0x4\n\
- str r5, [sp, 0x20]\n\
- adds r4, 0x1\n\
- ldr r0, _08019B18 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- bge _08019B0E\n\
- b _0801995A\n\
-_08019B0E:\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019B10: .4byte gBattleMons\n\
-_08019B14: .4byte gLastUsedAbility\n\
-_08019B18: .4byte gNoOfAllBanks\n\
-_08019B1C:\n\
- movs r4, 0\n\
- ldr r0, _08019B54 @ =gNoOfAllBanks\n\
- ldrb r1, [r0]\n\
- cmp r4, r1\n\
- blt _08019B28\n\
- b _08019F76\n\
-_08019B28:\n\
- ldr r0, _08019B58 @ =gBattleMons\n\
- adds r5, r1, 0\n\
- ldr r2, _08019B5C @ =gStatuses3\n\
- adds r3, r0, 0\n\
- adds r3, 0x20\n\
- movs r6, 0x80\n\
- lsls r6, 12\n\
-_08019B36:\n\
- ldrb r1, [r3]\n\
- cmp r1, 0x16\n\
- bne _08019B46\n\
- ldr r0, [r2]\n\
- ands r0, r6\n\
- cmp r0, 0\n\
- beq _08019B46\n\
- b _08019F04\n\
-_08019B46:\n\
- adds r2, 0x4\n\
- adds r3, 0x58\n\
- adds r4, 0x1\n\
- cmp r4, r5\n\
- blt _08019B36\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019B54: .4byte gNoOfAllBanks\n\
-_08019B58: .4byte gBattleMons\n\
-_08019B5C: .4byte gStatuses3\n\
-_08019B60:\n\
- mov r0, r10\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- movs r4, 0\n\
- ldr r0, _08019BB0 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019B76\n\
- b _08019F76\n\
-_08019B76:\n\
- ldr r7, _08019BB4 @ =gBattleMons\n\
-_08019B78:\n\
- lsls r0, r4, 24\n\
- lsrs r0, 24\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- adds r3, r4, 0x1\n\
- cmp r0, r5\n\
- beq _08019BA2\n\
- movs r0, 0x58\n\
- muls r0, r4\n\
- adds r0, r7\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, r6\n\
- bne _08019BA2\n\
- ldr r0, _08019BB8 @ =gLastUsedAbility\n\
- strb r6, [r0]\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_08019BA2:\n\
- adds r4, r3, 0\n\
- ldr r0, _08019BB0 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019B78\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019BB0: .4byte gNoOfAllBanks\n\
-_08019BB4: .4byte gBattleMons\n\
-_08019BB8: .4byte gLastUsedAbility\n\
-_08019BBC:\n\
- mov r0, r10\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- movs r4, 0\n\
- ldr r0, _08019C0C @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019BD2\n\
- b _08019F76\n\
-_08019BD2:\n\
- ldr r7, _08019C10 @ =gBattleMons\n\
-_08019BD4:\n\
- lsls r0, r4, 24\n\
- lsrs r0, 24\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- adds r3, r4, 0x1\n\
- cmp r0, r5\n\
- bne _08019BFE\n\
- movs r0, 0x58\n\
- muls r0, r4\n\
- adds r0, r7\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, r6\n\
- bne _08019BFE\n\
- ldr r0, _08019C14 @ =gLastUsedAbility\n\
- strb r6, [r0]\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_08019BFE:\n\
- adds r4, r3, 0\n\
- ldr r0, _08019C0C @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019BD4\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019C0C: .4byte gNoOfAllBanks\n\
-_08019C10: .4byte gBattleMons\n\
-_08019C14: .4byte gLastUsedAbility\n\
-_08019C18:\n\
- mov r1, r8\n\
- ldrb r0, [r1]\n\
- cmp r0, 0xFD\n\
- beq _08019C40\n\
- cmp r0, 0xFE\n\
- beq _08019C78\n\
- movs r4, 0\n\
- ldr r0, _08019C38 @ =gNoOfAllBanks\n\
- adds r5, r0, 0\n\
- ldrb r2, [r5]\n\
- cmp r4, r2\n\
- blt _08019C32\n\
- b _08019F76\n\
-_08019C32:\n\
- ldr r2, _08019C3C @ =gBattleMons\n\
- b _08019CB0\n\
- .align 2, 0\n\
-_08019C38: .4byte gNoOfAllBanks\n\
-_08019C3C: .4byte gBattleMons\n\
-_08019C40:\n\
- movs r4, 0\n\
- ldr r0, _08019C70 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019C4C\n\
- b _08019F76\n\
-_08019C4C:\n\
- ldr r5, _08019C74 @ =gStatuses3\n\
- movs r2, 0x80\n\
- lsls r2, 9\n\
- adds r1, r0, 0\n\
-_08019C54:\n\
- lsls r0, r4, 2\n\
- adds r0, r5\n\
- ldr r0, [r0]\n\
- ands r0, r2\n\
- adds r3, r4, 0x1\n\
- cmp r0, 0\n\
- beq _08019C68\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_08019C68:\n\
- adds r4, r3, 0\n\
- cmp r4, r1\n\
- blt _08019C54\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019C70: .4byte gNoOfAllBanks\n\
-_08019C74: .4byte gStatuses3\n\
-_08019C78:\n\
- movs r4, 0\n\
- ldr r0, _08019CA8 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019C84\n\
- b _08019F76\n\
-_08019C84:\n\
- ldr r5, _08019CAC @ =gStatuses3\n\
- movs r2, 0x80\n\
- lsls r2, 10\n\
- adds r1, r0, 0\n\
-_08019C8C:\n\
- lsls r0, r4, 2\n\
- adds r0, r5\n\
- ldr r0, [r0]\n\
- ands r0, r2\n\
- adds r3, r4, 0x1\n\
- cmp r0, 0\n\
- beq _08019CA0\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_08019CA0:\n\
- adds r4, r3, 0\n\
- cmp r4, r1\n\
- blt _08019C8C\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019CA8: .4byte gNoOfAllBanks\n\
-_08019CAC: .4byte gStatuses3\n\
-_08019CB0:\n\
- movs r0, 0x58\n\
- muls r0, r4\n\
- adds r0, r2\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- adds r3, r4, 0x1\n\
- cmp r0, r6\n\
- bne _08019CCA\n\
- mov r0, r8\n\
- strb r6, [r0]\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_08019CCA:\n\
- adds r4, r3, 0\n\
- ldrb r1, [r5]\n\
- cmp r4, r1\n\
- blt _08019CB0\n\
- b _08019F76\n\
-_08019CD4:\n\
- movs r4, 0\n\
- ldr r0, _08019D10 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019CE0\n\
- b _08019F76\n\
-_08019CE0:\n\
- ldr r7, _08019D14 @ =gBattleMons\n\
- adds r2, r0, 0\n\
- movs r5, 0x58\n\
-_08019CE6:\n\
- adds r0, r4, 0\n\
- muls r0, r5\n\
- adds r1, r0, r7\n\
- adds r0, r1, 0\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- adds r3, r4, 0x1\n\
- cmp r0, r6\n\
- bne _08019D08\n\
- ldrh r0, [r1, 0x28]\n\
- cmp r0, 0\n\
- beq _08019D08\n\
- mov r0, r8\n\
- strb r6, [r0]\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_08019D08:\n\
- adds r4, r3, 0\n\
- cmp r4, r2\n\
- blt _08019CE6\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019D10: .4byte gNoOfAllBanks\n\
-_08019D14: .4byte gBattleMons\n\
-_08019D18:\n\
- movs r4, 0\n\
- ldr r0, _08019D50 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019D24\n\
- b _08019F76\n\
-_08019D24:\n\
- ldr r7, _08019D54 @ =gBattleMons\n\
- adds r1, r0, 0\n\
- movs r5, 0x58\n\
- ldr r2, _08019D58 @ =gLastUsedAbility\n\
-_08019D2C:\n\
- adds r0, r4, 0\n\
- muls r0, r5\n\
- adds r0, r7\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- adds r3, r4, 0x1\n\
- cmp r0, r6\n\
- bne _08019D48\n\
- cmp r4, r10\n\
- beq _08019D48\n\
- strb r6, [r2]\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_08019D48:\n\
- adds r4, r3, 0\n\
- cmp r4, r1\n\
- blt _08019D2C\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019D50: .4byte gNoOfAllBanks\n\
-_08019D54: .4byte gBattleMons\n\
-_08019D58: .4byte gLastUsedAbility\n\
-_08019D5C:\n\
- mov r0, r10\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- movs r4, 0\n\
- ldr r0, _08019DAC @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019D72\n\
- b _08019F76\n\
-_08019D72:\n\
- ldr r7, _08019DB0 @ =gBattleMons\n\
-_08019D74:\n\
- lsls r0, r4, 24\n\
- lsrs r0, 24\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, r5\n\
- beq _08019DA0\n\
- movs r0, 0x58\n\
- muls r0, r4\n\
- adds r0, r7\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, r6\n\
- bne _08019DA0\n\
- ldr r0, _08019DB4 @ =gLastUsedAbility\n\
- strb r6, [r0]\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_08019DA0:\n\
- adds r4, 0x1\n\
- ldr r0, _08019DAC @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019D74\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019DAC: .4byte gNoOfAllBanks\n\
-_08019DB0: .4byte gBattleMons\n\
-_08019DB4: .4byte gLastUsedAbility\n\
-_08019DB8:\n\
- mov r0, r10\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- movs r4, 0\n\
- ldr r0, _08019E08 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019DCE\n\
- b _08019F76\n\
-_08019DCE:\n\
- ldr r7, _08019E0C @ =gBattleMons\n\
-_08019DD0:\n\
- lsls r0, r4, 24\n\
- lsrs r0, 24\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, r5\n\
- bne _08019DFC\n\
- movs r0, 0x58\n\
- muls r0, r4\n\
- adds r0, r7\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, r6\n\
- bne _08019DFC\n\
- ldr r0, _08019E10 @ =gLastUsedAbility\n\
- strb r6, [r0]\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_08019DFC:\n\
- adds r4, 0x1\n\
- ldr r0, _08019E08 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019DD0\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019E08: .4byte gNoOfAllBanks\n\
-_08019E0C: .4byte gBattleMons\n\
-_08019E10: .4byte gLastUsedAbility\n\
-_08019E14:\n\
- ldr r0, _08019E30 @ =BattleScript_CastformChange\n\
- bl b_push_move_exec\n\
- ldr r0, _08019E34 @ =0x02000000\n\
- ldr r2, _08019E38 @ =0x00016003\n\
- adds r1, r0, r2\n\
- strb r6, [r1]\n\
- mov r1, r9\n\
- subs r1, 0x1\n\
- ldr r3, _08019E3C @ =0x0001609b\n\
- adds r0, r3\n\
- strb r1, [r0]\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019E30: .4byte BattleScript_CastformChange\n\
-_08019E34: .4byte 0x02000000\n\
-_08019E38: .4byte 0x00016003\n\
-_08019E3C: .4byte 0x0001609b\n\
-_08019E40:\n\
- ldr r0, _08019E5C @ =BattleScript_CastformChange\n\
- bl b_push_move_exec\n\
- ldr r0, _08019E60 @ =0x02000000\n\
- ldr r5, _08019E64 @ =0x00016003\n\
- adds r1, r0, r5\n\
- mov r2, r10\n\
- strb r2, [r1]\n\
- mov r1, r9\n\
- subs r1, 0x1\n\
- ldr r3, _08019E68 @ =0x0001609b\n\
- adds r0, r3\n\
- strb r1, [r0]\n\
- b _08019F92\n\
- .align 2, 0\n\
-_08019E5C: .4byte BattleScript_CastformChange\n\
-_08019E60: .4byte 0x02000000\n\
-_08019E64: .4byte 0x00016003\n\
-_08019E68: .4byte 0x0001609b\n\
-_08019E6C:\n\
- mov r5, r8\n\
- strb r1, [r5]\n\
- ldr r0, [r2]\n\
- ldr r1, _08019E80 @ =0xfff7ffff\n\
- ands r0, r1\n\
- str r0, [r2]\n\
- ldr r0, _08019E84 @ =gUnknown_081D978C\n\
- bl b_push_move_exec\n\
- b _08019F1A\n\
- .align 2, 0\n\
-_08019E80: .4byte 0xfff7ffff\n\
-_08019E84: .4byte gUnknown_081D978C\n\
-_08019E88:\n\
- ldr r0, _08019EDC @ =BattleScript_TraceActivates\n\
- bl b_push_move_exec\n\
- ldr r1, _08019EE0 @ =gStatuses3\n\
- ldr r2, [sp, 0x18]\n\
- adds r1, r2, r1\n\
- ldr r0, [r1]\n\
- ldr r2, _08019EE4 @ =0xffefffff\n\
- ands r0, r2\n\
- str r0, [r1]\n\
- ldr r0, _08019EE8 @ =0x02000000\n\
- ldr r3, _08019EEC @ =0x00016003\n\
- adds r0, r3\n\
- strb r4, [r0]\n\
- ldr r1, _08019EF0 @ =gBattleTextBuff1\n\
- movs r4, 0xFD\n\
- strb r4, [r1]\n\
- movs r0, 0x4\n\
- strb r0, [r1, 0x1]\n\
- ldr r2, _08019EF4 @ =gActiveBank\n\
- ldrb r0, [r2]\n\
- strb r0, [r1, 0x2]\n\
- ldr r3, _08019EF8 @ =gBattlePartyID\n\
- ldrb r0, [r2]\n\
- lsls r0, 1\n\
- adds r0, r3\n\
- ldrh r0, [r0]\n\
- strb r0, [r1, 0x3]\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x4]\n\
- ldr r1, _08019EFC @ =gBattleTextBuff2\n\
- strb r4, [r1]\n\
- movs r0, 0x9\n\
- strb r0, [r1, 0x1]\n\
- ldr r0, _08019F00 @ =gLastUsedAbility\n\
- ldrb r0, [r0]\n\
- strb r0, [r1, 0x2]\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- strb r0, [r1, 0x3]\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019EDC: .4byte BattleScript_TraceActivates\n\
-_08019EE0: .4byte gStatuses3\n\
-_08019EE4: .4byte 0xffefffff\n\
-_08019EE8: .4byte 0x02000000\n\
-_08019EEC: .4byte 0x00016003\n\
-_08019EF0: .4byte gBattleTextBuff1\n\
-_08019EF4: .4byte gActiveBank\n\
-_08019EF8: .4byte gBattlePartyID\n\
-_08019EFC: .4byte gBattleTextBuff2\n\
-_08019F00: .4byte gLastUsedAbility\n\
-_08019F04:\n\
- mov r5, r8\n\
- strb r1, [r5]\n\
- ldr r0, [r2]\n\
- ldr r1, _08019F30 @ =0xfff7ffff\n\
- ands r0, r1\n\
- str r0, [r2]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08019F34 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08019F38 @ =gUnknown_081D9795\n\
- str r0, [r1]\n\
-_08019F1A:\n\
- ldr r0, _08019F3C @ =0x02000000\n\
- ldr r1, _08019F40 @ =0x000160dd\n\
- adds r0, r1\n\
- strb r4, [r0]\n\
-_08019F22:\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
- b _08019F76\n\
- .align 2, 0\n\
-_08019F30: .4byte 0xfff7ffff\n\
-_08019F34: .4byte gBattlescriptCurrInstr\n\
-_08019F38: .4byte gUnknown_081D9795\n\
-_08019F3C: .4byte 0x02000000\n\
-_08019F40: .4byte 0x000160dd\n\
-_08019F44:\n\
- movs r4, 0\n\
- ldr r0, _08019FA4 @ =gNoOfAllBanks\n\
- ldrb r1, [r0]\n\
- cmp r4, r1\n\
- bge _08019F76\n\
- ldr r0, _08019FA8 @ =gBattleMons\n\
- adds r2, r1, 0\n\
- adds r1, r0, 0\n\
- adds r1, 0x20\n\
- ldr r3, _08019FAC @ =gLastUsedAbility\n\
-_08019F58:\n\
- ldrb r0, [r1]\n\
- cmp r0, r6\n\
- bne _08019F6E\n\
- cmp r4, r10\n\
- beq _08019F6E\n\
- strb r6, [r3]\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_08019F6E:\n\
- adds r1, 0x58\n\
- adds r4, 0x1\n\
- cmp r4, r2\n\
- blt _08019F58\n\
-_08019F76:\n\
- mov r2, r9\n\
- cmp r2, 0\n\
- beq _08019F92\n\
-_08019F7C:\n\
- ldr r3, [sp, 0x4]\n\
- cmp r3, 0xB\n\
- bhi _08019F92\n\
- ldr r1, _08019FAC @ =gLastUsedAbility\n\
- ldrb r0, [r1]\n\
- cmp r0, 0xFF\n\
- beq _08019F92\n\
- adds r1, r0, 0\n\
- mov r0, r10\n\
- bl RecordAbilityBattle\n\
-_08019F92:\n\
- mov r0, r9\n\
- add sp, 0x28\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_08019FA4: .4byte gNoOfAllBanks\n\
-_08019FA8: .4byte gBattleMons\n\
-_08019FAC: .4byte gLastUsedAbility\n\
- .syntax divided");
-}
-
-#endif // NONMATCHING
-
void b_call_bc_move_exec(u8* BS_ptr)
{
gBattlescriptCurrInstr = BS_ptr;
diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c
index e4a4895b5..a3b7ac41f 100644
--- a/src/battle/battle_4.c
+++ b/src/battle/battle_4.c
@@ -929,7 +929,7 @@ u8* const gMoveEffectBS_Ptrs[] =
const u8 sUnreferencedBitMask1[] = {0, 1, 3, 7, 0xF, 0x1F, 0x3F};
-const u8 gLevelUpStatBoxStats[] = {MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPD};
+const u8 gLevelUpStatBoxStats[] = {MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPEED};
static const u16 sProtectSuccessRates[] = {0xFFFF, 0x7FFF, 0x3FFF, 0x1FFF};
@@ -5447,7 +5447,7 @@ static void atk23_getexp(void)
BATTLE_STRUCT->beforeLvlUp[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP);
BATTLE_STRUCT->beforeLvlUp[1] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK);
BATTLE_STRUCT->beforeLvlUp[2] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF);
- BATTLE_STRUCT->beforeLvlUp[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD);
+ BATTLE_STRUCT->beforeLvlUp[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED);
BATTLE_STRUCT->beforeLvlUp[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK);
BATTLE_STRUCT->beforeLvlUp[5] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF);
@@ -5496,7 +5496,7 @@ static void atk23_getexp(void)
gBattleMons[0].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP);
gBattleMons[0].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK);
gBattleMons[0].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF);
- gBattleMons[0].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD);
+ gBattleMons[0].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED);
gBattleMons[0].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK);
gBattleMons[0].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF);
}
@@ -5509,8 +5509,8 @@ static void atk23_getexp(void)
gBattleMons[2].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK);
gBattleMons[2].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF);
//There are no words...GF can't even copy&paste code properly
- gBattleMons[2].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD);
- gBattleMons[2].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD /*RIP*/);
+ gBattleMons[2].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED);
+ gBattleMons[2].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED /*RIP*/);
gBattleMons[2].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK);
}
BATTLE_STRUCT->atk23StateTracker = 5;
diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c
index 0b6c3b6a1..83b690719 100644
--- a/src/battle/battle_controller_linkopponent.c
+++ b/src/battle/battle_controller_linkopponent.c
@@ -618,7 +618,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer)
battlePokemon.hpIV = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV);
battlePokemon.attackIV = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV);
battlePokemon.defenseIV = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV);
- battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV);
+ battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV);
battlePokemon.spAttackIV = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV);
battlePokemon.spDefenseIV = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV);
battlePokemon.personality = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY);
@@ -628,7 +628,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer)
battlePokemon.maxHP = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP);
battlePokemon.attack = GetMonData(&gEnemyParty[a], MON_DATA_ATK);
battlePokemon.defense = GetMonData(&gEnemyParty[a], MON_DATA_DEF);
- battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPD);
+ battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPEED);
battlePokemon.spAttack = GetMonData(&gEnemyParty[a], MON_DATA_SPATK);
battlePokemon.spDefense = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF);
battlePokemon.isEgg = GetMonData(&gEnemyParty[a], MON_DATA_IS_EGG);
@@ -752,7 +752,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer)
buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV);
buffer[1] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV);
buffer[2] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV);
- buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV);
+ buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV);
buffer[4] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV);
buffer[5] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV);
size = 6;
@@ -770,7 +770,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer)
size = 1;
break;
case 35:
- buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV);
+ buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV);
size = 1;
break;
case 36:
@@ -832,7 +832,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer)
size = 2;
break;
case 46:
- data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPD);
+ data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPEED);
buffer[0] = data16;
buffer[1] = data16 >> 8;
size = 2;
@@ -953,7 +953,7 @@ void sub_8038900(u8 a)
iv = battlePokemon->defenseIV;
SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, (u8 *)&iv);
iv = battlePokemon->speedIV;
- SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, (u8 *)&iv);
+ SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, (u8 *)&iv);
iv = battlePokemon->spAttackIV;
SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, (u8 *)&iv);
iv = battlePokemon->spDefenseIV;
@@ -965,7 +965,7 @@ void sub_8038900(u8 a)
SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP);
SetMonData(&gEnemyParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack);
SetMonData(&gEnemyParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense);
- SetMonData(&gEnemyParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed);
+ SetMonData(&gEnemyParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed);
SetMonData(&gEnemyParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack);
SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense);
}
@@ -1049,7 +1049,7 @@ void sub_8038900(u8 a)
SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]);
SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]);
- SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][6]);
SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]);
SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]);
break;
@@ -1063,7 +1063,7 @@ void sub_8038900(u8 a)
SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]);
break;
case 35:
- SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][3]);
break;
case 36:
SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]);
@@ -1096,7 +1096,7 @@ void sub_8038900(u8 a)
SetMonData(&gEnemyParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]);
break;
case 46:
- SetMonData(&gEnemyParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gEnemyParty[a], MON_DATA_SPEED, &gBattleBufferA[gActiveBank][3]);
break;
case 47:
SetMonData(&gEnemyParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]);
diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c
index 3e34b2e25..ca20f6262 100644
--- a/src/battle/battle_controller_linkpartner.c
+++ b/src/battle/battle_controller_linkpartner.c
@@ -574,7 +574,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer)
battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
- battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV);
battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY);
@@ -584,7 +584,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer)
battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP);
battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK);
battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF);
- battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
+ battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPEED);
battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK);
battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF);
battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG);
@@ -708,7 +708,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer)
buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
- buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV);
buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
size = 6;
@@ -726,7 +726,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer)
size = 1;
break;
case 35:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV);
size = 1;
break;
case 36:
@@ -788,7 +788,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer)
size = 2;
break;
case 46:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPEED);
buffer[0] = data16;
buffer[1] = data16 >> 8;
size = 2;
@@ -910,7 +910,7 @@ void sub_811EC68(u8 a)
iv = battlePokemon->defenseIV;
SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv);
iv = battlePokemon->speedIV;
- SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, (u8 *)&iv);
iv = battlePokemon->spAttackIV;
SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv);
iv = battlePokemon->spDefenseIV;
@@ -922,7 +922,7 @@ void sub_811EC68(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP);
SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack);
SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense);
- SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed);
SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack);
SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense);
}
@@ -1006,7 +1006,7 @@ void sub_811EC68(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]);
SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]);
- SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][6]);
SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]);
SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]);
break;
@@ -1020,7 +1020,7 @@ void sub_811EC68(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]);
break;
case 35:
- SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][3]);
break;
case 36:
SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]);
@@ -1053,7 +1053,7 @@ void sub_811EC68(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]);
break;
case 46:
- SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED, &gBattleBufferA[gActiveBank][3]);
break;
case 47:
SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]);
diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c
index 72b56b962..cf90d5817 100644
--- a/src/battle/battle_controller_opponent.c
+++ b/src/battle/battle_controller_opponent.c
@@ -582,7 +582,7 @@ u32 sub_8033598(u8 a, u8 *buffer)
battlePokemon.hpIV = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV);
battlePokemon.attackIV = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV);
battlePokemon.defenseIV = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV);
- battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV);
+ battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV);
battlePokemon.spAttackIV = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV);
battlePokemon.spDefenseIV = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV);
battlePokemon.personality = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY);
@@ -592,7 +592,7 @@ u32 sub_8033598(u8 a, u8 *buffer)
battlePokemon.maxHP = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP);
battlePokemon.attack = GetMonData(&gEnemyParty[a], MON_DATA_ATK);
battlePokemon.defense = GetMonData(&gEnemyParty[a], MON_DATA_DEF);
- battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPD);
+ battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPEED);
battlePokemon.spAttack = GetMonData(&gEnemyParty[a], MON_DATA_SPATK);
battlePokemon.spDefense = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF);
battlePokemon.isEgg = GetMonData(&gEnemyParty[a], MON_DATA_IS_EGG);
@@ -716,7 +716,7 @@ u32 sub_8033598(u8 a, u8 *buffer)
buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV);
buffer[1] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV);
buffer[2] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV);
- buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV);
+ buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV);
buffer[4] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV);
buffer[5] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV);
size = 6;
@@ -734,7 +734,7 @@ u32 sub_8033598(u8 a, u8 *buffer)
size = 1;
break;
case 35:
- buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV);
+ buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV);
size = 1;
break;
case 36:
@@ -796,7 +796,7 @@ u32 sub_8033598(u8 a, u8 *buffer)
size = 2;
break;
case 46:
- data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPD);
+ data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPEED);
buffer[0] = data16;
buffer[1] = data16 >> 8;
size = 2;
@@ -925,7 +925,7 @@ void sub_8033E24(u8 a)
iv = battlePokemon->defenseIV;
SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, (u8 *)&iv);
iv = battlePokemon->speedIV;
- SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, (u8 *)&iv);
+ SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, (u8 *)&iv);
iv = battlePokemon->spAttackIV;
SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, (u8 *)&iv);
iv = battlePokemon->spDefenseIV;
@@ -937,7 +937,7 @@ void sub_8033E24(u8 a)
SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP);
SetMonData(&gEnemyParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack);
SetMonData(&gEnemyParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense);
- SetMonData(&gEnemyParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed);
+ SetMonData(&gEnemyParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed);
SetMonData(&gEnemyParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack);
SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense);
}
@@ -1021,7 +1021,7 @@ void sub_8033E24(u8 a)
SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]);
SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]);
- SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][6]);
SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]);
SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]);
break;
@@ -1035,7 +1035,7 @@ void sub_8033E24(u8 a)
SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]);
break;
case 35:
- SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][3]);
break;
case 36:
SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]);
@@ -1068,7 +1068,7 @@ void sub_8033E24(u8 a)
SetMonData(&gEnemyParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]);
break;
case 46:
- SetMonData(&gEnemyParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gEnemyParty[a], MON_DATA_SPEED, &gBattleBufferA[gActiveBank][3]);
break;
case 47:
SetMonData(&gEnemyParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]);
diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c
index 53b596c5e..dd94b2f4b 100644
--- a/src/battle/battle_controller_player.c
+++ b/src/battle/battle_controller_player.c
@@ -1754,7 +1754,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer)
battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
- battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV);
battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY);
@@ -1764,7 +1764,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer)
battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP);
battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK);
battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF);
- battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
+ battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPEED);
battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK);
battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF);
battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG);
@@ -1888,7 +1888,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer)
buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
- buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV);
buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
size = 6;
@@ -1906,7 +1906,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer)
size = 1;
break;
case 35:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV);
size = 1;
break;
case 36:
@@ -1968,7 +1968,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer)
size = 2;
break;
case 46:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPEED);
buffer[0] = data16;
buffer[1] = data16 >> 8;
size = 2;
@@ -2098,7 +2098,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a)
iv = battlePokemon->defenseIV;
SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv);
iv = battlePokemon->speedIV;
- SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, (u8 *)&iv);
iv = battlePokemon->spAttackIV;
SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv);
iv = battlePokemon->spDefenseIV;
@@ -2110,7 +2110,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP);
SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack);
SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense);
- SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed);
SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack);
SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense);
}
@@ -2194,7 +2194,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]);
SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]);
- SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][6]);
SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]);
SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]);
break;
@@ -2208,7 +2208,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]);
break;
case 35:
- SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][3]);
break;
case 36:
SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]);
@@ -2241,7 +2241,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]);
break;
case 46:
- SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED, &gBattleBufferA[gActiveBank][3]);
break;
case 47:
SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]);
diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c
index bf6ef0892..97c78ecd8 100644
--- a/src/battle/battle_controller_wally.c
+++ b/src/battle/battle_controller_wally.c
@@ -550,7 +550,7 @@ u32 sub_8137A84(u8 a, u8 *buffer)
battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
- battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV);
battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY);
@@ -560,7 +560,7 @@ u32 sub_8137A84(u8 a, u8 *buffer)
battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP);
battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK);
battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF);
- battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
+ battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPEED);
battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK);
battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF);
battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG);
@@ -684,7 +684,7 @@ u32 sub_8137A84(u8 a, u8 *buffer)
buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
- buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV);
buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
size = 6;
@@ -702,7 +702,7 @@ u32 sub_8137A84(u8 a, u8 *buffer)
size = 1;
break;
case 35:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV);
size = 1;
break;
case 36:
@@ -764,7 +764,7 @@ u32 sub_8137A84(u8 a, u8 *buffer)
size = 2;
break;
case 46:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPEED);
buffer[0] = data16;
buffer[1] = data16 >> 8;
size = 2;
@@ -885,7 +885,7 @@ void sub_8138294(u8 a)
iv = battlePokemon->defenseIV;
SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv);
iv = battlePokemon->speedIV;
- SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, (u8 *)&iv);
iv = battlePokemon->spAttackIV;
SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv);
iv = battlePokemon->spDefenseIV;
@@ -897,7 +897,7 @@ void sub_8138294(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP);
SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack);
SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense);
- SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed);
SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack);
SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense);
}
@@ -981,7 +981,7 @@ void sub_8138294(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]);
SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]);
- SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][6]);
SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]);
SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]);
break;
@@ -995,7 +995,7 @@ void sub_8138294(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]);
break;
case 35:
- SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][3]);
break;
case 36:
SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]);
@@ -1028,7 +1028,7 @@ void sub_8138294(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]);
break;
case 46:
- SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPEED, &gBattleBufferA[gActiveBank][3]);
break;
case 47:
SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]);
diff --git a/src/engine/clock.c b/src/engine/clock.c
index 9635514d2..cb8af64a8 100644
--- a/src/engine/clock.c
+++ b/src/engine/clock.c
@@ -61,19 +61,18 @@ static void UpdatePerDay(struct Time *time)
static void UpdatePerMinute(struct Time *time)
{
struct Time newTime;
- s32 minutes;
+ s32 minutesPassed;
CalcTimeDifference(&newTime, &gSaveBlock2.lastBerryTreeUpdate, time);
- minutes = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes;
+ minutesPassed = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes;
- // there's no way to get the correct assembly other than with this nested if check. so dumb.
- if (minutes != 0)
+ if (minutesPassed == 0) // do not do the update for the first minute.
+ return;
+
+ if (minutesPassed > -1) // do not perform an update on invalid minutesPassed.
{
- if (minutes >= 0)
- {
- BerryTreeTimeUpdate(minutes);
- gSaveBlock2.lastBerryTreeUpdate = *time;
- }
+ BerryTreeTimeUpdate(minutesPassed);
+ gSaveBlock2.lastBerryTreeUpdate = *time;
}
}
diff --git a/src/engine/trade.c b/src/engine/trade.c
index 6e78ba3ce..905e9ff0c 100644
--- a/src/engine/trade.c
+++ b/src/engine/trade.c
@@ -5424,7 +5424,7 @@ static void sub_804D948(u8 whichPlayerMon, u8 whichInGameTrade)
SetMonData(pokemon, MON_DATA_HP_IV, &inGameTrade->ivs[0]);
SetMonData(pokemon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]);
SetMonData(pokemon, MON_DATA_DEF_IV, &inGameTrade->ivs[2]);
- SetMonData(pokemon, MON_DATA_SPD_IV, &inGameTrade->ivs[3]);
+ SetMonData(pokemon, MON_DATA_SPEED_IV, &inGameTrade->ivs[3]);
SetMonData(pokemon, MON_DATA_SPATK_IV, &inGameTrade->ivs[4]);
SetMonData(pokemon, MON_DATA_SPDEF_IV, &inGameTrade->ivs[5]);
SetMonData(pokemon, MON_DATA_NICKNAME, inGameTrade->name);
diff --git a/src/field/berry.c b/src/field/berry.c
index d82eab2a6..cd1fc5c94 100644
--- a/src/field/berry.c
+++ b/src/field/berry.c
@@ -12,10 +12,16 @@
#include "text.h"
#define BERRY_NAME_LENGTH 6
+#define BERRY_REGROW_LIMIT 10
+#define MAX_BERRY_TREES 128
+#define BERRY_NONE 0
#define FIRST_BERRY ITEM_CHERI_BERRY
#define LAST_BERRY ITEM_ENIGMA_BERRY
+#define GETBERRYID(berry) ((berry - FIRST_BERRY) + 1)
+#define GETITEMID(berry) ((berry + FIRST_BERRY) - 1)
+
#ifdef ENGLISH
#define NAME_CHERI_BERRY _("CHERI")
#define NAME_CHESTO_BERRY _("CHESTO")
@@ -61,92 +67,92 @@
#define NAME_STARF_BERRY _("STARF")
#define NAME_ENIGMA_BERRY _("ENIGMA")
-const u8 gBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers.");
-const u8 gBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy.");
-const u8 gBerryDescriptionPart1_Chesto[] = _("The BERRY’s thick skin and fruit are");
-const u8 gBerryDescriptionPart2_Chesto[] = _("very tough. It is dry-tasting all over.");
-const u8 gBerryDescriptionPart1_Pecha[] = _("Very sweet and delicious.");
-const u8 gBerryDescriptionPart2_Pecha[] = _("Also very tender - handle with care.");
-const u8 gBerryDescriptionPart1_Rawst[] = _("If the leaves grow long and curly,");
-const u8 gBerryDescriptionPart2_Rawst[] = _("the BERRY seems to grow very bitter.");
-const u8 gBerryDescriptionPart1_Aspear[] = _("The hard BERRY is dense with a rich");
-const u8 gBerryDescriptionPart2_Aspear[] = _("juice. It is quite sour.");
-const u8 gBerryDescriptionPart1_Leppa[] = _("Grows slower than CHERI and others.");
-const u8 gBerryDescriptionPart2_Leppa[] = _("The smaller the BERRY, the tastier.");
-const u8 gBerryDescriptionPart1_Oran[] = _("A peculiar BERRY with a mix of flavors.");
-const u8 gBerryDescriptionPart2_Oran[] = _("BERRIES grow in half a day.");
-const u8 gBerryDescriptionPart1_Persim[] = _("Loves sunlight. The BERRY’s color");
-const u8 gBerryDescriptionPart2_Persim[] = _("grows vivid when exposed to the sun.");
-const u8 gBerryDescriptionPart1_Lum[] = _("Slow to grow. If raised with loving");
-const u8 gBerryDescriptionPart2_Lum[] = _("care, it may grow two BERRIES.");
-const u8 gBerryDescriptionPart1_Sitrus[] = _("Closely related to ORAN. The large");
-const u8 gBerryDescriptionPart2_Sitrus[] = _("BERRY has a well-rounded flavor.");
-const u8 gBerryDescriptionPart1_Figy[] = _("The BERRY, which looks chewed up,");
-const u8 gBerryDescriptionPart2_Figy[] = _("brims with spicy substances.");
-const u8 gBerryDescriptionPart1_Wiki[] = _("The BERRY is said to have grown lumpy");
-const u8 gBerryDescriptionPart2_Wiki[] = _("to help POKéMON grip it.");
-const u8 gBerryDescriptionPart1_Mago[] = _("The BERRY turns curvy as it grows.");
-const u8 gBerryDescriptionPart2_Mago[] = _("The curvier, the sweeter and tastier.");
-const u8 gBerryDescriptionPart1_Aguav[] = _("The flower is dainty. It is rare in its");
-const u8 gBerryDescriptionPart2_Aguav[] = _("ability to grow without light.");
-const u8 gBerryDescriptionPart1_Iapapa[] = _("The BERRY is very big and sour.");
-const u8 gBerryDescriptionPart2_Iapapa[] = _("It takes at least a day to grow.");
-const u8 gBerryDescriptionPart1_Razz[] = _("The red BERRY tastes slightly spicy.");
-const u8 gBerryDescriptionPart2_Razz[] = _("It grows quickly in just four hours.");
-const u8 gBerryDescriptionPart1_Bluk[] = _("The BERRY is blue on the outside, but");
-const u8 gBerryDescriptionPart2_Bluk[] = _("it blackens the mouth when eaten.");
-const u8 gBerryDescriptionPart1_Nanab[] = _("This BERRY was the seventh");
-const u8 gBerryDescriptionPart2_Nanab[] = _("discovered in the world. It is sweet.");
-const u8 gBerryDescriptionPart1_Wepear[] = _("The flower is small and white. It has a");
-const u8 gBerryDescriptionPart2_Wepear[] = _("delicate balance of bitter and sour.");
-const u8 gBerryDescriptionPart1_Pinap[] = _("Weak against wind and cold.");
-const u8 gBerryDescriptionPart2_Pinap[] = _("The fruit is spicy and the skin, sour.");
-const u8 gBerryDescriptionPart1_Pomeg[] = _("However much it is watered,");
-const u8 gBerryDescriptionPart2_Pomeg[] = _("it only grows up to six BERRIES.");
-const u8 gBerryDescriptionPart1_Kelpsy[] = _("A rare variety shaped like a root.");
-const u8 gBerryDescriptionPart2_Kelpsy[] = _("Grows a very large flower.");
-const u8 gBerryDescriptionPart1_Qualot[] = _("Loves water. Grows strong even in");
-const u8 gBerryDescriptionPart2_Qualot[] = _("locations with constant rainfall.");
-const u8 gBerryDescriptionPart1_Hondew[] = _("A BERRY that is very valuable and");
-const u8 gBerryDescriptionPart2_Hondew[] = _("rarely seen. It is very delicious.");
-const u8 gBerryDescriptionPart1_Grepa[] = _("Despite its tenderness and round");
-const u8 gBerryDescriptionPart2_Grepa[] = _("shape, the BERRY is unimaginably sour.");
-const u8 gBerryDescriptionPart1_Tamato[] = _("The BERRY is lip-bendingly spicy.");
-const u8 gBerryDescriptionPart2_Tamato[] = _("It takes time to grow.");
-const u8 gBerryDescriptionPart1_Cornn[] = _("A BERRY from an ancient era. May not");
-const u8 gBerryDescriptionPart2_Cornn[] = _("grow unless planted in quantity.");
-const u8 gBerryDescriptionPart1_Magost[] = _("A BERRY that is widely said to have");
-const u8 gBerryDescriptionPart2_Magost[] = _("a finely balanced flavor.");
-const u8 gBerryDescriptionPart1_Rabuta[] = _("A rare variety that is overgrown with");
-const u8 gBerryDescriptionPart2_Rabuta[] = _("hair. It is quite bitter.");
-const u8 gBerryDescriptionPart1_Nomel[] = _("Quite sour. Just one bite makes it");
-const u8 gBerryDescriptionPart2_Nomel[] = _("impossible to taste for three days.");
-const u8 gBerryDescriptionPart1_Spelon[] = _("The vividly red BERRY is very spicy.");
-const u8 gBerryDescriptionPart2_Spelon[] = _("Its warts secrete a spicy substance.");
-const u8 gBerryDescriptionPart1_Pamtre[] = _("Drifts on the sea from somewhere.");
-const u8 gBerryDescriptionPart2_Pamtre[] = _("It is thought to grow elsewhere.");
-const u8 gBerryDescriptionPart1_Watmel[] = _("A huge BERRY, with some over 20");
-const u8 gBerryDescriptionPart2_Watmel[] = _("inches discovered. Exceedingly sweet.");
-const u8 gBerryDescriptionPart1_Durin[] = _("Bitter to even look at. It is so");
-const u8 gBerryDescriptionPart2_Durin[] = _("bitter, no one has ever eaten it as is.");
-const u8 gBerryDescriptionPart1_Belue[] = _("It is glossy and looks delicious, but");
-const u8 gBerryDescriptionPart2_Belue[] = _("it is awfully sour. Takes time to grow.");
-const u8 gBerryDescriptionPart1_Liechi[] = _("A mysterious BERRY. It is rumored to");
-const u8 gBerryDescriptionPart2_Liechi[] = _("contain the power of the sea.");
-const u8 gBerryDescriptionPart1_Ganlon[] = _("A mysterious BERRY. It is rumored to");
-const u8 gBerryDescriptionPart2_Ganlon[] = _("contain the power of the land.");
-const u8 gBerryDescriptionPart1_Salac[] = _("A mysterious BERRY. It is rumored to");
-const u8 gBerryDescriptionPart2_Salac[] = _("contain the power of the sky.");
-const u8 gBerryDescriptionPart1_Petaya[] = _("A mysterious BERRY. It is rumored to");
-const u8 gBerryDescriptionPart2_Petaya[] = _("contain the power of all living things.");
-const u8 gBerryDescriptionPart1_Apicot[] = _("A very mystifying BERRY. No telling");
-const u8 gBerryDescriptionPart2_Apicot[] = _("what may happen or how it can be used.");
-const u8 gBerryDescriptionPart1_Lansat[] = _("Said to be a legendary BERRY.");
-const u8 gBerryDescriptionPart2_Lansat[] = _("Holding it supposedly brings joy.");
-const u8 gBerryDescriptionPart1_Starf[] = _("So strong, it was abandoned at the");
-const u8 gBerryDescriptionPart2_Starf[] = _("world’s edge. Considered a mirage.");
-const u8 gBerryDescriptionPart1_Enigma[] = _("A completely enigmatic BERRY.");
-const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars.");
+static const u8 gBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers.");
+static const u8 gBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy.");
+static const u8 gBerryDescriptionPart1_Chesto[] = _("The BERRY’s thick skin and fruit are");
+static const u8 gBerryDescriptionPart2_Chesto[] = _("very tough. It is dry-tasting all over.");
+static const u8 gBerryDescriptionPart1_Pecha[] = _("Very sweet and delicious.");
+static const u8 gBerryDescriptionPart2_Pecha[] = _("Also very tender - handle with care.");
+static const u8 gBerryDescriptionPart1_Rawst[] = _("If the leaves grow long and curly,");
+static const u8 gBerryDescriptionPart2_Rawst[] = _("the BERRY seems to grow very bitter.");
+static const u8 gBerryDescriptionPart1_Aspear[] = _("The hard BERRY is dense with a rich");
+static const u8 gBerryDescriptionPart2_Aspear[] = _("juice. It is quite sour.");
+static const u8 gBerryDescriptionPart1_Leppa[] = _("Grows slower than CHERI and others.");
+static const u8 gBerryDescriptionPart2_Leppa[] = _("The smaller the BERRY, the tastier.");
+static const u8 gBerryDescriptionPart1_Oran[] = _("A peculiar BERRY with a mix of flavors.");
+static const u8 gBerryDescriptionPart2_Oran[] = _("BERRIES grow in half a day.");
+static const u8 gBerryDescriptionPart1_Persim[] = _("Loves sunlight. The BERRY’s color");
+static const u8 gBerryDescriptionPart2_Persim[] = _("grows vivid when exposed to the sun.");
+static const u8 gBerryDescriptionPart1_Lum[] = _("Slow to grow. If raised with loving");
+static const u8 gBerryDescriptionPart2_Lum[] = _("care, it may grow two BERRIES.");
+static const u8 gBerryDescriptionPart1_Sitrus[] = _("Closely related to ORAN. The large");
+static const u8 gBerryDescriptionPart2_Sitrus[] = _("BERRY has a well-rounded flavor.");
+static const u8 gBerryDescriptionPart1_Figy[] = _("The BERRY, which looks chewed up,");
+static const u8 gBerryDescriptionPart2_Figy[] = _("brims with spicy substances.");
+static const u8 gBerryDescriptionPart1_Wiki[] = _("The BERRY is said to have grown lumpy");
+static const u8 gBerryDescriptionPart2_Wiki[] = _("to help POKéMON grip it.");
+static const u8 gBerryDescriptionPart1_Mago[] = _("The BERRY turns curvy as it grows.");
+static const u8 gBerryDescriptionPart2_Mago[] = _("The curvier, the sweeter and tastier.");
+static const u8 gBerryDescriptionPart1_Aguav[] = _("The flower is dainty. It is rare in its");
+static const u8 gBerryDescriptionPart2_Aguav[] = _("ability to grow without light.");
+static const u8 gBerryDescriptionPart1_Iapapa[] = _("The BERRY is very big and sour.");
+static const u8 gBerryDescriptionPart2_Iapapa[] = _("It takes at least a day to grow.");
+static const u8 gBerryDescriptionPart1_Razz[] = _("The red BERRY tastes slightly spicy.");
+static const u8 gBerryDescriptionPart2_Razz[] = _("It grows quickly in just four hours.");
+static const u8 gBerryDescriptionPart1_Bluk[] = _("The BERRY is blue on the outside, but");
+static const u8 gBerryDescriptionPart2_Bluk[] = _("it blackens the mouth when eaten.");
+static const u8 gBerryDescriptionPart1_Nanab[] = _("This BERRY was the seventh");
+static const u8 gBerryDescriptionPart2_Nanab[] = _("discovered in the world. It is sweet.");
+static const u8 gBerryDescriptionPart1_Wepear[] = _("The flower is small and white. It has a");
+static const u8 gBerryDescriptionPart2_Wepear[] = _("delicate balance of bitter and sour.");
+static const u8 gBerryDescriptionPart1_Pinap[] = _("Weak against wind and cold.");
+static const u8 gBerryDescriptionPart2_Pinap[] = _("The fruit is spicy and the skin, sour.");
+static const u8 gBerryDescriptionPart1_Pomeg[] = _("However much it is watered,");
+static const u8 gBerryDescriptionPart2_Pomeg[] = _("it only grows up to six BERRIES.");
+static const u8 gBerryDescriptionPart1_Kelpsy[] = _("A rare variety shaped like a root.");
+static const u8 gBerryDescriptionPart2_Kelpsy[] = _("Grows a very large flower.");
+static const u8 gBerryDescriptionPart1_Qualot[] = _("Loves water. Grows strong even in");
+static const u8 gBerryDescriptionPart2_Qualot[] = _("locations with constant rainfall.");
+static const u8 gBerryDescriptionPart1_Hondew[] = _("A BERRY that is very valuable and");
+static const u8 gBerryDescriptionPart2_Hondew[] = _("rarely seen. It is very delicious.");
+static const u8 gBerryDescriptionPart1_Grepa[] = _("Despite its tenderness and round");
+static const u8 gBerryDescriptionPart2_Grepa[] = _("shape, the BERRY is unimaginably sour.");
+static const u8 gBerryDescriptionPart1_Tamato[] = _("The BERRY is lip-bendingly spicy.");
+static const u8 gBerryDescriptionPart2_Tamato[] = _("It takes time to grow.");
+static const u8 gBerryDescriptionPart1_Cornn[] = _("A BERRY from an ancient era. May not");
+static const u8 gBerryDescriptionPart2_Cornn[] = _("grow unless planted in quantity.");
+static const u8 gBerryDescriptionPart1_Magost[] = _("A BERRY that is widely said to have");
+static const u8 gBerryDescriptionPart2_Magost[] = _("a finely balanced flavor.");
+static const u8 gBerryDescriptionPart1_Rabuta[] = _("A rare variety that is overgrown with");
+static const u8 gBerryDescriptionPart2_Rabuta[] = _("hair. It is quite bitter.");
+static const u8 gBerryDescriptionPart1_Nomel[] = _("Quite sour. Just one bite makes it");
+static const u8 gBerryDescriptionPart2_Nomel[] = _("impossible to taste for three days.");
+static const u8 gBerryDescriptionPart1_Spelon[] = _("The vividly red BERRY is very spicy.");
+static const u8 gBerryDescriptionPart2_Spelon[] = _("Its warts secrete a spicy substance.");
+static const u8 gBerryDescriptionPart1_Pamtre[] = _("Drifts on the sea from somewhere.");
+static const u8 gBerryDescriptionPart2_Pamtre[] = _("It is thought to grow elsewhere.");
+static const u8 gBerryDescriptionPart1_Watmel[] = _("A huge BERRY, with some over 20");
+static const u8 gBerryDescriptionPart2_Watmel[] = _("inches discovered. Exceedingly sweet.");
+static const u8 gBerryDescriptionPart1_Durin[] = _("Bitter to even look at. It is so");
+static const u8 gBerryDescriptionPart2_Durin[] = _("bitter, no one has ever eaten it as is.");
+static const u8 gBerryDescriptionPart1_Belue[] = _("It is glossy and looks delicious, but");
+static const u8 gBerryDescriptionPart2_Belue[] = _("it is awfully sour. Takes time to grow.");
+static const u8 gBerryDescriptionPart1_Liechi[] = _("A mysterious BERRY. It is rumored to");
+static const u8 gBerryDescriptionPart2_Liechi[] = _("contain the power of the sea.");
+static const u8 gBerryDescriptionPart1_Ganlon[] = _("A mysterious BERRY. It is rumored to");
+static const u8 gBerryDescriptionPart2_Ganlon[] = _("contain the power of the land.");
+static const u8 gBerryDescriptionPart1_Salac[] = _("A mysterious BERRY. It is rumored to");
+static const u8 gBerryDescriptionPart2_Salac[] = _("contain the power of the sky.");
+static const u8 gBerryDescriptionPart1_Petaya[] = _("A mysterious BERRY. It is rumored to");
+static const u8 gBerryDescriptionPart2_Petaya[] = _("contain the power of all living things.");
+static const u8 gBerryDescriptionPart1_Apicot[] = _("A very mystifying BERRY. No telling");
+static const u8 gBerryDescriptionPart2_Apicot[] = _("what may happen or how it can be used.");
+static const u8 gBerryDescriptionPart1_Lansat[] = _("Said to be a legendary BERRY.");
+static const u8 gBerryDescriptionPart2_Lansat[] = _("Holding it supposedly brings joy.");
+static const u8 gBerryDescriptionPart1_Starf[] = _("So strong, it was abandoned at the");
+static const u8 gBerryDescriptionPart2_Starf[] = _("world’s edge. Considered a mirage.");
+static const u8 gBerryDescriptionPart1_Enigma[] = _("A completely enigmatic BERRY.");
+static const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars.");
#elif defined(GERMAN)
#define NAME_CHERI_BERRY _("AMRENA")
#define NAME_CHESTO_BERRY _("MARON")
@@ -192,92 +198,92 @@ const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars
#define NAME_STARF_BERRY _("KRAMBO")
#define NAME_ENIGMA_BERRY _("ENIGMA")
-const u8 gBerryDescriptionPart1_Cheri[] = _("Erblüht mit hübschen, zarten Blumen.");
-const u8 gBerryDescriptionPart2_Cheri[] = _("Diese knallrote BEERE ist sehr scharf.");
-const u8 gBerryDescriptionPart1_Chesto[] = _("Diese BEERE hat eine dicke Haut und");
-const u8 gBerryDescriptionPart2_Chesto[] = _("hartes Fruchtfleisch. Trocken!");
-const u8 gBerryDescriptionPart1_Pecha[] = _("Sehr süß und delikat.");
-const u8 gBerryDescriptionPart2_Pecha[] = _("Sehr zart. Vorsichtig anfassen!");
-const u8 gBerryDescriptionPart1_Rawst[] = _("Wenn die Blätter lang und wellig sind,");
-const u8 gBerryDescriptionPart2_Rawst[] = _("wird die BEERE sehr bitter.");
-const u8 gBerryDescriptionPart1_Aspear[] = _("Diese harte BEERE ist sehr");
-const u8 gBerryDescriptionPart2_Aspear[] = _("saftig und sauer im Geschmack!");
-const u8 gBerryDescriptionPart1_Leppa[] = _("Wächst langsamer als AMRENA und");
-const u8 gBerryDescriptionPart2_Leppa[] = _("andere. Je kleiner, desto delikater.");
-const u8 gBerryDescriptionPart1_Oran[] = _("Eine BEERE unterschiedlichsten Ge-");
-const u8 gBerryDescriptionPart2_Oran[] = _("schmacks. Wächst an einem halben Tag.");
-const u8 gBerryDescriptionPart1_Persim[] = _("Liebt Sonnenlicht. Die BEERE");
-const u8 gBerryDescriptionPart2_Persim[] = _("wächst im Sonnenlicht sehr schnell.");
-const u8 gBerryDescriptionPart1_Lum[] = _("Langsamer Wuchs. Wird sie liebevoll ge-");
-const u8 gBerryDescriptionPart2_Lum[] = _("pflegt, kann sie 2 BEEREN tragen.");
-const u8 gBerryDescriptionPart1_Sitrus[] = _("Eng verwandt mit SINEL. Diese große");
-const u8 gBerryDescriptionPart2_Sitrus[] = _("BEERE ist von rundem Geschmack.");
-const u8 gBerryDescriptionPart1_Figy[] = _("Die BEERE sieht angekaut aus. Sie ist");
-const u8 gBerryDescriptionPart2_Figy[] = _("voller scharfer Substanzen.");
-const u8 gBerryDescriptionPart1_Wiki[] = _("Die BEERE wächst unförmig,");
-const u8 gBerryDescriptionPart2_Wiki[] = _("damit PKMN sie besser greifen können.");
-const u8 gBerryDescriptionPart1_Mago[] = _("Die BEERE hat Ausbeulungen. Je mehr");
-const u8 gBerryDescriptionPart2_Mago[] = _("Beulen, desto schmackhafter ist sie.");
-const u8 gBerryDescriptionPart1_Aguav[] = _("Die Blume ist zart. Sie ist fähig,");
-const u8 gBerryDescriptionPart2_Aguav[] = _("ohne Licht wachsen zu können.");
-const u8 gBerryDescriptionPart1_Iapapa[] = _("Die BEERE ist groß und sauer.");
-const u8 gBerryDescriptionPart2_Iapapa[] = _("Sie braucht einen Tag zum Wachsen.");
-const u8 gBerryDescriptionPart1_Razz[] = _("Diese rote BEERE schmeckt etwas");
-const u8 gBerryDescriptionPart2_Razz[] = _("scharf. Sie wächst in nur 4 Stunden.");
-const u8 gBerryDescriptionPart1_Bluk[] = _("Die BEERE ist außen blau, verfärbt");
-const u8 gBerryDescriptionPart2_Bluk[] = _("sich im Mund aber schwarz.");
-const u8 gBerryDescriptionPart1_Nanab[] = _("Diese BEERE war die 7., die auf der");
-const u8 gBerryDescriptionPart2_Nanab[] = _("Welt entdeckt wurde. Sie ist süß.");
-const u8 gBerryDescriptionPart1_Wepear[] = _("Die Blume ist klein und weiß. Angenehm");
-const u8 gBerryDescriptionPart2_Wepear[] = _("bitter und sauer zugleich.");
-const u8 gBerryDescriptionPart1_Pinap[] = _("Wind und Kälte verträgt sie nicht.");
-const u8 gBerryDescriptionPart2_Pinap[] = _("Fruchtfleisch: Scharf. Haut: Sauer.");
-const u8 gBerryDescriptionPart1_Pomeg[] = _("Egal wie viel Wasser sie bekommt, sie");
-const u8 gBerryDescriptionPart2_Pomeg[] = _("trägt immer bis zu 6 BEEREN.");
-const u8 gBerryDescriptionPart1_Kelpsy[] = _("Eine Seltenheit. Geformt wie eine");
-const u8 gBerryDescriptionPart2_Kelpsy[] = _("Wurzel. Hat eine große Blume.");
-const u8 gBerryDescriptionPart1_Qualot[] = _("Liebt das Wasser. Wächst besonders");
-const u8 gBerryDescriptionPart2_Qualot[] = _("gut in regenreichen Gegenden.");
-const u8 gBerryDescriptionPart1_Hondew[] = _("Eine wertvolle und seltene BEERE.");
-const u8 gBerryDescriptionPart2_Hondew[] = _("Sie ist sehr schmackhaft.");
-const u8 gBerryDescriptionPart1_Grepa[] = _("Die BEERE ist zart und von runder");
-const u8 gBerryDescriptionPart2_Grepa[] = _("Form. Aber sie ist unglaublich sauer!");
-const u8 gBerryDescriptionPart1_Tamato[] = _("Die Schärfe der BEERE verbrennt die");
-const u8 gBerryDescriptionPart2_Tamato[] = _("Lippen. Sie braucht Zeit zum Wachsen.");
-const u8 gBerryDescriptionPart1_Cornn[] = _("Eine BEERE aus alten Zeiten. Wächst");
-const u8 gBerryDescriptionPart2_Cornn[] = _("nur, wenn in großen Mengen gepflanzt.");
-const u8 gBerryDescriptionPart1_Magost[] = _("Eine BEERE, die für ihren feinen, aus-");
-const u8 gBerryDescriptionPart2_Magost[] = _("gewogenen Geschmack bekannt ist.");
-const u8 gBerryDescriptionPart1_Rabuta[] = _("Eine Seltenheit, die über und über mit");
-const u8 gBerryDescriptionPart2_Rabuta[] = _("Haaren bewachsen ist. Sehr bitter!");
-const u8 gBerryDescriptionPart1_Nomel[] = _("Sehr sauer. Ein Biss betäubt die");
-const u8 gBerryDescriptionPart2_Nomel[] = _("Geschmacksnerven für 3 Tage!");
-const u8 gBerryDescriptionPart1_Spelon[] = _("Die leuchtend rote BEERE ist sehr");
-const u8 gBerryDescriptionPart2_Spelon[] = _("scharf. Gibt scharfe Substanzen ab!");
-const u8 gBerryDescriptionPart1_Pamtre[] = _("Wird vom Meer angespült. Sie wächst");
-const u8 gBerryDescriptionPart2_Pamtre[] = _("an einem anderen Ort.");
-const u8 gBerryDescriptionPart1_Watmel[] = _("Eine große BEERE, 25 cm groß.");
-const u8 gBerryDescriptionPart2_Watmel[] = _("Außergewöhnlich süß.");
-const u8 gBerryDescriptionPart1_Durin[] = _("Bitter schon ihr Anblick! Sie ist so");
-const u8 gBerryDescriptionPart2_Durin[] = _("bitter, dass niemand sie pur isst.");
-const u8 gBerryDescriptionPart1_Belue[] = _("Sie glänzt, sieht zart aus, ist extrem");
-const u8 gBerryDescriptionPart2_Belue[] = _("sauer und braucht Zeit zum Wachsen.");
-const u8 gBerryDescriptionPart1_Liechi[] = _("Eine geheimnisvolle BEERE. Man sagt,");
-const u8 gBerryDescriptionPart2_Liechi[] = _("sie enthalte die Kraft des Meeres.");
-const u8 gBerryDescriptionPart1_Ganlon[] = _("Eine geheimnisvolle BEERE. Man sagt,");
-const u8 gBerryDescriptionPart2_Ganlon[] = _("sie enthalte die Kraft des Landes.");
-const u8 gBerryDescriptionPart1_Salac[] = _("Eine geheimnisvolle BEERE. Man sagt,");
-const u8 gBerryDescriptionPart2_Salac[] = _("sie enthalte die Kraft des Himmels.");
-const u8 gBerryDescriptionPart1_Petaya[] = _("Eine geheimnisvolle BEERE. Man sagt,");
-const u8 gBerryDescriptionPart2_Petaya[] = _("sie enthalte die Kraft allen Lebens.");
-const u8 gBerryDescriptionPart1_Apicot[] = _("Eine rätselhafte BEERE. Man kann");
-const u8 gBerryDescriptionPart2_Apicot[] = _("nicht sagen, wie und was sie ist.");
-const u8 gBerryDescriptionPart1_Lansat[] = _("Eine legendäre BEERE. Sie zu");
-const u8 gBerryDescriptionPart2_Lansat[] = _("tragen bringt Freude.");
-const u8 gBerryDescriptionPart1_Starf[] = _("So stark, dass sie an den Rand der");
-const u8 gBerryDescriptionPart2_Starf[] = _("Welt verbannt wurde. Ein Märchen?");
-const u8 gBerryDescriptionPart1_Enigma[] = _("Eine enigmatische BEERE. Sie scheint");
-const u8 gBerryDescriptionPart2_Enigma[] = _("die Macht der Sterne zu besitzen.");
+static const u8 gBerryDescriptionPart1_Cheri[] = _("Erblüht mit hübschen, zarten Blumen.");
+static const u8 gBerryDescriptionPart2_Cheri[] = _("Diese knallrote BEERE ist sehr scharf.");
+static const u8 gBerryDescriptionPart1_Chesto[] = _("Diese BEERE hat eine dicke Haut und");
+static const u8 gBerryDescriptionPart2_Chesto[] = _("hartes Fruchtfleisch. Trocken!");
+static const u8 gBerryDescriptionPart1_Pecha[] = _("Sehr süß und delikat.");
+static const u8 gBerryDescriptionPart2_Pecha[] = _("Sehr zart. Vorsichtig anfassen!");
+static const u8 gBerryDescriptionPart1_Rawst[] = _("Wenn die Blätter lang und wellig sind,");
+static const u8 gBerryDescriptionPart2_Rawst[] = _("wird die BEERE sehr bitter.");
+static const u8 gBerryDescriptionPart1_Aspear[] = _("Diese harte BEERE ist sehr");
+static const u8 gBerryDescriptionPart2_Aspear[] = _("saftig und sauer im Geschmack!");
+static const u8 gBerryDescriptionPart1_Leppa[] = _("Wächst langsamer als AMRENA und");
+static const u8 gBerryDescriptionPart2_Leppa[] = _("andere. Je kleiner, desto delikater.");
+static const u8 gBerryDescriptionPart1_Oran[] = _("Eine BEERE unterschiedlichsten Ge-");
+static const u8 gBerryDescriptionPart2_Oran[] = _("schmacks. Wächst an einem halben Tag.");
+static const u8 gBerryDescriptionPart1_Persim[] = _("Liebt Sonnenlicht. Die BEERE");
+static const u8 gBerryDescriptionPart2_Persim[] = _("wächst im Sonnenlicht sehr schnell.");
+static const u8 gBerryDescriptionPart1_Lum[] = _("Langsamer Wuchs. Wird sie liebevoll ge-");
+static const u8 gBerryDescriptionPart2_Lum[] = _("pflegt, kann sie 2 BEEREN tragen.");
+static const u8 gBerryDescriptionPart1_Sitrus[] = _("Eng verwandt mit SINEL. Diese große");
+static const u8 gBerryDescriptionPart2_Sitrus[] = _("BEERE ist von rundem Geschmack.");
+static const u8 gBerryDescriptionPart1_Figy[] = _("Die BEERE sieht angekaut aus. Sie ist");
+static const u8 gBerryDescriptionPart2_Figy[] = _("voller scharfer Substanzen.");
+static const u8 gBerryDescriptionPart1_Wiki[] = _("Die BEERE wächst unförmig,");
+static const u8 gBerryDescriptionPart2_Wiki[] = _("damit PKMN sie besser greifen können.");
+static const u8 gBerryDescriptionPart1_Mago[] = _("Die BEERE hat Ausbeulungen. Je mehr");
+static const u8 gBerryDescriptionPart2_Mago[] = _("Beulen, desto schmackhafter ist sie.");
+static const u8 gBerryDescriptionPart1_Aguav[] = _("Die Blume ist zart. Sie ist fähig,");
+static const u8 gBerryDescriptionPart2_Aguav[] = _("ohne Licht wachsen zu können.");
+static const u8 gBerryDescriptionPart1_Iapapa[] = _("Die BEERE ist groß und sauer.");
+static const u8 gBerryDescriptionPart2_Iapapa[] = _("Sie braucht einen Tag zum Wachsen.");
+static const u8 gBerryDescriptionPart1_Razz[] = _("Diese rote BEERE schmeckt etwas");
+static const u8 gBerryDescriptionPart2_Razz[] = _("scharf. Sie wächst in nur 4 Stunden.");
+static const u8 gBerryDescriptionPart1_Bluk[] = _("Die BEERE ist außen blau, verfärbt");
+static const u8 gBerryDescriptionPart2_Bluk[] = _("sich im Mund aber schwarz.");
+static const u8 gBerryDescriptionPart1_Nanab[] = _("Diese BEERE war die 7., die auf der");
+static const u8 gBerryDescriptionPart2_Nanab[] = _("Welt entdeckt wurde. Sie ist süß.");
+static const u8 gBerryDescriptionPart1_Wepear[] = _("Die Blume ist klein und weiß. Angenehm");
+static const u8 gBerryDescriptionPart2_Wepear[] = _("bitter und sauer zugleich.");
+static const u8 gBerryDescriptionPart1_Pinap[] = _("Wind und Kälte verträgt sie nicht.");
+static const u8 gBerryDescriptionPart2_Pinap[] = _("Fruchtfleisch: Scharf. Haut: Sauer.");
+static const u8 gBerryDescriptionPart1_Pomeg[] = _("Egal wie viel Wasser sie bekommt, sie");
+static const u8 gBerryDescriptionPart2_Pomeg[] = _("trägt immer bis zu 6 BEEREN.");
+static const u8 gBerryDescriptionPart1_Kelpsy[] = _("Eine Seltenheit. Geformt wie eine");
+static const u8 gBerryDescriptionPart2_Kelpsy[] = _("Wurzel. Hat eine große Blume.");
+static const u8 gBerryDescriptionPart1_Qualot[] = _("Liebt das Wasser. Wächst besonders");
+static const u8 gBerryDescriptionPart2_Qualot[] = _("gut in regenreichen Gegenden.");
+static const u8 gBerryDescriptionPart1_Hondew[] = _("Eine wertvolle und seltene BEERE.");
+static const u8 gBerryDescriptionPart2_Hondew[] = _("Sie ist sehr schmackhaft.");
+static const u8 gBerryDescriptionPart1_Grepa[] = _("Die BEERE ist zart und von runder");
+static const u8 gBerryDescriptionPart2_Grepa[] = _("Form. Aber sie ist unglaublich sauer!");
+static const u8 gBerryDescriptionPart1_Tamato[] = _("Die Schärfe der BEERE verbrennt die");
+static const u8 gBerryDescriptionPart2_Tamato[] = _("Lippen. Sie braucht Zeit zum Wachsen.");
+static const u8 gBerryDescriptionPart1_Cornn[] = _("Eine BEERE aus alten Zeiten. Wächst");
+static const u8 gBerryDescriptionPart2_Cornn[] = _("nur, wenn in großen Mengen gepflanzt.");
+static const u8 gBerryDescriptionPart1_Magost[] = _("Eine BEERE, die für ihren feinen, aus-");
+static const u8 gBerryDescriptionPart2_Magost[] = _("gewogenen Geschmack bekannt ist.");
+static const u8 gBerryDescriptionPart1_Rabuta[] = _("Eine Seltenheit, die über und über mit");
+static const u8 gBerryDescriptionPart2_Rabuta[] = _("Haaren bewachsen ist. Sehr bitter!");
+static const u8 gBerryDescriptionPart1_Nomel[] = _("Sehr sauer. Ein Biss betäubt die");
+static const u8 gBerryDescriptionPart2_Nomel[] = _("Geschmacksnerven für 3 Tage!");
+static const u8 gBerryDescriptionPart1_Spelon[] = _("Die leuchtend rote BEERE ist sehr");
+static const u8 gBerryDescriptionPart2_Spelon[] = _("scharf. Gibt scharfe Substanzen ab!");
+static const u8 gBerryDescriptionPart1_Pamtre[] = _("Wird vom Meer angespült. Sie wächst");
+static const u8 gBerryDescriptionPart2_Pamtre[] = _("an einem anderen Ort.");
+static const u8 gBerryDescriptionPart1_Watmel[] = _("Eine große BEERE, 25 cm groß.");
+static const u8 gBerryDescriptionPart2_Watmel[] = _("Außergewöhnlich süß.");
+static const u8 gBerryDescriptionPart1_Durin[] = _("Bitter schon ihr Anblick! Sie ist so");
+static const u8 gBerryDescriptionPart2_Durin[] = _("bitter, dass niemand sie pur isst.");
+static const u8 gBerryDescriptionPart1_Belue[] = _("Sie glänzt, sieht zart aus, ist extrem");
+static const u8 gBerryDescriptionPart2_Belue[] = _("sauer und braucht Zeit zum Wachsen.");
+static const u8 gBerryDescriptionPart1_Liechi[] = _("Eine geheimnisvolle BEERE. Man sagt,");
+static const u8 gBerryDescriptionPart2_Liechi[] = _("sie enthalte die Kraft des Meeres.");
+static const u8 gBerryDescriptionPart1_Ganlon[] = _("Eine geheimnisvolle BEERE. Man sagt,");
+static const u8 gBerryDescriptionPart2_Ganlon[] = _("sie enthalte die Kraft des Landes.");
+static const u8 gBerryDescriptionPart1_Salac[] = _("Eine geheimnisvolle BEERE. Man sagt,");
+static const u8 gBerryDescriptionPart2_Salac[] = _("sie enthalte die Kraft des Himmels.");
+static const u8 gBerryDescriptionPart1_Petaya[] = _("Eine geheimnisvolle BEERE. Man sagt,");
+static const u8 gBerryDescriptionPart2_Petaya[] = _("sie enthalte die Kraft allen Lebens.");
+static const u8 gBerryDescriptionPart1_Apicot[] = _("Eine rätselhafte BEERE. Man kann");
+static const u8 gBerryDescriptionPart2_Apicot[] = _("nicht sagen, wie und was sie ist.");
+static const u8 gBerryDescriptionPart1_Lansat[] = _("Eine legendäre BEERE. Sie zu");
+static const u8 gBerryDescriptionPart2_Lansat[] = _("tragen bringt Freude.");
+static const u8 gBerryDescriptionPart1_Starf[] = _("So stark, dass sie an den Rand der");
+static const u8 gBerryDescriptionPart2_Starf[] = _("Welt verbannt wurde. Ein Märchen?");
+static const u8 gBerryDescriptionPart1_Enigma[] = _("Eine enigmatische BEERE. Sie scheint");
+static const u8 gBerryDescriptionPart2_Enigma[] = _("die Macht der Sterne zu besitzen.");
#endif
const struct Berry gBerries[] =
@@ -972,7 +978,7 @@ const struct Berry gBerries[] =
},
};
-const struct BerryTree gBlankBerryTree = {0};
+static const struct BerryTree gBlankBerryTree = {0};
extern u8 S_BerryTree[];
extern u16 gScriptLastTalked;
@@ -980,7 +986,21 @@ extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
extern u16 gSpecialVar_0x8006;
+/*
+ An enigma berry is a type of berry which functions
+ as though it is a custom berry. Because it behaves
+ like its a custom berry, it doesn't hold an identity
+ represented in its icons or descriptions, leaving its
+ information to be decided by the e-reader cards
+ which were intended to deliver these custom
+ berries.
+*/
+
+static u8 CalcBerryYield(struct BerryTree *tree);
+static u16 GetStageDurationByBerryType(u8 berry);
+
// unused
+// this could be static, but making it so causes a compile-time warning.
void ClearEnigmaBerries(void)
{
CpuFill16(0, &gSaveBlock1.enigmaBerry, sizeof(gSaveBlock1.enigmaBerry));
@@ -988,17 +1008,21 @@ void ClearEnigmaBerries(void)
void SetEnigmaBerry(u8 *src)
{
+ // initialize the enigma berry by copying the data from the script.
u32 i;
u8 *dest = (u8*)&gSaveBlock1.enigmaBerry;
for (i = 0; i < sizeof(gSaveBlock1.enigmaBerry); i++)
dest[i] = src[i];
+ // at this point, the description pointer is not yet initialized. we need to initialize it since
+ // we dont know where in memory this is going to be. set the berry desc pointers to the
+ // EnigmaBerry struct's description arrays since these are where the descriptions are stored.
gSaveBlock1.enigmaBerry.berry.description1 = gSaveBlock1.enigmaBerry.description1;
gSaveBlock1.enigmaBerry.berry.description2 = gSaveBlock1.enigmaBerry.description2;
}
-u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
+static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
{
const u8 *description1;
const u8 *description2;
@@ -1006,10 +1030,13 @@ u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
u32 checksum;
u8 *dest;
+ // the description pointers could be pointing to anywhere in memory. we do not want these
+ // pointers to factor into the checksum as it will produce a different result every time: so
+ // back the pointers up and set them to null so the checksum is safe to calculate.
description1 = gSaveBlock1.enigmaBerry.berry.description1;
description2 = gSaveBlock1.enigmaBerry.berry.description2;
- gSaveBlock1.enigmaBerry.berry.description1 = 0;
- gSaveBlock1.enigmaBerry.berry.description2 = 0;
+ gSaveBlock1.enigmaBerry.berry.description1 = NULL;
+ gSaveBlock1.enigmaBerry.berry.description2 = NULL;
dest = (u8*)enigmaBerry;
checksum = 0;
@@ -1018,17 +1045,20 @@ u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
checksum += dest[i];
}
+ // the checksum is calculated: the descriptions are safe to restore now.
gSaveBlock1.enigmaBerry.berry.description1 = description1;
gSaveBlock1.enigmaBerry.berry.description2 = description2;
return checksum;
}
+// due to e-reader scans being particularly volatile to failure, it is a requirement to check for
+// their integrity here due to scans possibly failing to produce the correct result.
bool32 IsEnigmaBerryValid(void)
{
- if (!gSaveBlock1.enigmaBerry.berry.stageDuration)
+ if (gSaveBlock1.enigmaBerry.berry.stageDuration == 0)
return FALSE;
- if (!gSaveBlock1.enigmaBerry.berry.maxYield)
+ if (gSaveBlock1.enigmaBerry.berry.maxYield == 0)
return FALSE;
if (GetEnigmaBerryChecksum(&gSaveBlock1.enigmaBerry) != gSaveBlock1.enigmaBerry.checksum)
return FALSE;
@@ -1037,37 +1067,51 @@ bool32 IsEnigmaBerryValid(void)
const struct Berry *GetBerryInfo(u8 berry)
{
- if (berry == 0x2B && IsEnigmaBerryValid())
+ // when getting the pointer to the berry info, enigma berries are handled differently. if your
+ // berry is an Enigma Berry and its checksum is valid, fetch the pointer to its information in
+ // the save block.
+ if (berry == GETBERRYID(ITEM_ENIGMA_BERRY) && IsEnigmaBerryValid())
return &gSaveBlock1.enigmaBerry.berry;
else
{
- if (berry == 0 || berry > 0x2B)
- berry = 1;
+ // invalid berries will be flattened into a cheri berry. Interestingly, if your berry was
+ // an enigma berry whos checksum failed, the game will use the Enigma Berry information
+ // for this: meaning if you see the Enigma Berry information, its actually because the
+ // checksum failed.
+ if (berry == BERRY_NONE || berry > GETBERRYID(LAST_BERRY))
+ berry = GETBERRYID(FIRST_BERRY);
return &gBerries[berry - 1];
}
}
-struct BerryTree *GetBerryTreeInfo(u8 id)
+// the save file can handle up to a number of 128 berry trees as indicated by its definition
+// in global.h. Interestingly, this function does not check that limit of 128.
+static struct BerryTree *GetBerryTreeInfo(u8 id)
{
return &gSaveBlock1.berryTrees[id];
}
+// this was called because the berry script was successful: meaning the player chose to
+// water the tree. We need to check for the current tree stage and set the appropriate
+// water flag to true.
bool32 FieldObjectInteractionWaterBerryTree(void)
{
+ // GetBerryTreeInfo does not sanitize the tree retrieved, but there are no known
+ // instances where this can cause problems.
struct BerryTree *tree = GetBerryTreeInfo(FieldObjectGetBerryTreeId(gSelectedMapObject));
switch (tree->stage)
{
- case 1:
+ case BERRY_STAGE_PLANTED:
tree->watered1 = TRUE;
break;
- case 2:
+ case BERRY_STAGE_SPROUTED:
tree->watered2 = TRUE;
break;
- case 3:
+ case BERRY_STAGE_TALLER:
tree->watered3 = TRUE;
break;
- case 4:
+ case BERRY_STAGE_FLOWERING:
tree->watered4 = TRUE;
break;
default:
@@ -1076,10 +1120,10 @@ bool32 FieldObjectInteractionWaterBerryTree(void)
return TRUE;
}
-bool8 IsPlayerFacingPlantedBerryTree(void)
+bool8 IsPlayerFacingUnplantedSoil(void)
{
- if (GetFieldObjectScriptPointerForComparison() == S_BerryTree
- && GetStageByBerryTreeId(FieldObjectGetBerryTreeId(gSelectedMapObject)) == 0)
+ if (GetFieldObjectScriptPointerPlayerFacing() == S_BerryTree
+ && GetStageByBerryTreeId(FieldObjectGetBerryTreeId(gSelectedMapObject)) == BERRY_STAGE_NO_BERRY)
return TRUE;
else
return FALSE;
@@ -1087,7 +1131,7 @@ bool8 IsPlayerFacingPlantedBerryTree(void)
bool8 TryToWaterBerryTree(void)
{
- if (GetFieldObjectScriptPointerForComparison() != S_BerryTree)
+ if (GetFieldObjectScriptPointerPlayerFacing() != S_BerryTree)
return FALSE;
else
return FieldObjectInteractionWaterBerryTree();
@@ -1099,70 +1143,84 @@ void ClearBerryTrees(void)
struct SaveBlock1 *saveBlock1 = &gSaveBlock1;
struct BerryTree berryTree = gBlankBerryTree;
- for (i = 0; i < (u8)ARRAY_COUNT(saveBlock1->berryTrees); i++) // casting to u8 fixes a mismatched signed compare. what
+ for (i = 0; i < MAX_BERRY_TREES; i++)
saveBlock1->berryTrees[i] = berryTree;
}
-bool32 BerryTreeGrow(struct BerryTree *tree)
+// when the player does not interact with the tree for a period of time, this is called
+// to advance the grow state.
+static bool32 BerryTreeGrow(struct BerryTree *tree)
{
if (tree->growthSparkle)
return FALSE;
switch (tree->stage)
{
- case 0:
+ case BERRY_STAGE_NO_BERRY:
return FALSE;
- case 4:
+ case BERRY_STAGE_FLOWERING:
tree->berryYield = CalcBerryYield(tree);
- case 1:
- case 2:
- case 3:
+ case BERRY_STAGE_PLANTED:
+ case BERRY_STAGE_SPROUTED:
+ case BERRY_STAGE_TALLER:
tree->stage++;
break;
- case 5:
+ case BERRY_STAGE_BERRIES:
tree->watered1 = 0;
tree->watered2 = 0;
tree->watered3 = 0;
tree->watered4 = 0;
tree->berryYield = 0;
- tree->stage = 2;
- if (++tree->regrowthCount == 10)
+ tree->stage = BERRY_STAGE_SPROUTED;
+ if (++tree->regrowthCount == BERRY_REGROW_LIMIT)
*tree = gBlankBerryTree;
break;
}
return TRUE;
}
-void BerryTreeTimeUpdate(s32 minutes)
+void BerryTreeTimeUpdate(s32 minutesPassed)
{
int i;
struct BerryTree *tree;
- for (i = 0; i < (u8)ARRAY_COUNT(gSaveBlock1.berryTrees); i++)
+ for (i = 0; i < MAX_BERRY_TREES; i++)
{
tree = &gSaveBlock1.berryTrees[i];
- if (tree->berry && tree->stage && !tree->growthSparkle)
+ if (tree->berry != BERRY_NONE && tree->stage != BERRY_STAGE_NO_BERRY && tree->growthSparkle == FALSE)
{
- if (minutes >= GetStageDurationByBerryType(tree->berry) * 71)
+ // the player has waited too long to water the berry. Reset the tree. This is because
+ // if the berry state is not in the unwatered state, the tree will grow anyway despite this
+ // check, which means BerryTreeGrow will handle the regrow process for this, removing the
+ // need for this check. This only handles the unwatered soil state.
+ if (minutesPassed >= GetStageDurationByBerryType(tree->berry) * 71)
{
*tree = gBlankBerryTree;
}
else
{
- s32 time = minutes;
+ // because time is altered below, perhaps they thought it was unsafe to change it, even
+ // though that is not how passed arguments behave.
+ s32 time = minutesPassed;
while (time != 0)
{
if (tree->minutesUntilNextStage > time)
{
- tree->minutesUntilNextStage -= time;
+ // its been X minutes since the last berry update, so update
+ // minutesUntilNextStage appropriately to match the time offset
+ // that has passed since the update.
+ tree->minutesUntilNextStage -= time;
break;
}
+ // perform the subtraction the other way around to get the number of minutes since
+ // the inferred stage update that occured, since minutesUntilNextStage is <= time.
+ // we may need this variable to simulate multiple berry cycles in the while loop.
time -= tree->minutesUntilNextStage;
- tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry);
- if (!BerryTreeGrow(tree))
+ tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry); // since the tree was inferred to update, set the new minutesUntilNextStage.
+ if (BerryTreeGrow(tree) == FALSE)
break;
- if (tree->stage == 5)
+ if (tree->stage == BERRY_STAGE_BERRIES)
tree->minutesUntilNextStage *= 4;
}
}
@@ -1170,7 +1228,7 @@ void BerryTreeTimeUpdate(s32 minutes)
}
}
-void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle)
+void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 noSparkle)
{
struct BerryTree *tree = GetBerryTreeInfo(id);
@@ -1178,12 +1236,12 @@ void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle)
tree->berry = berry;
tree->minutesUntilNextStage = GetStageDurationByBerryType(berry);
tree->stage = stage;
- if (stage == 5)
+ if (stage == BERRY_STAGE_BERRIES)
{
tree->berryYield = CalcBerryYield(tree);
tree->minutesUntilNextStage *= 4;
}
- if (!sparkle)
+ if (noSparkle == FALSE)
{
tree->growthSparkle = TRUE;
}
@@ -1209,19 +1267,19 @@ u8 ItemIdToBerryType(u16 item)
u16 berry = item - FIRST_BERRY;
if (berry > LAST_BERRY - FIRST_BERRY)
- return 1;
+ return GETBERRYID(FIRST_BERRY);
else
- return item - FIRST_BERRY + 1;
+ return GETBERRYID(item);
}
-u16 BerryTypeToItemId(u16 berry)
+static u16 BerryTypeToItemId(u16 berry)
{
u16 item = berry - 1;
if (item > LAST_BERRY - FIRST_BERRY)
return FIRST_BERRY;
else
- return berry + FIRST_BERRY - 1;
+ return GETITEMID(berry);
}
void GetBerryNameByBerryType(u8 berry, u8 *string)
@@ -1232,10 +1290,10 @@ void GetBerryNameByBerryType(u8 berry, u8 *string)
void ResetBerryTreeSparkleFlag(u8 id)
{
- GetBerryTreeInfo(id)->growthSparkle = 0;
+ GetBerryTreeInfo(id)->growthSparkle = FALSE;
}
-u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree)
+static u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree)
{
u8 count = 0;
@@ -1250,18 +1308,20 @@ u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree)
return count;
}
-u8 GetNumStagesWateredByBerryTreeId(u8 id)
+static u8 GetNumStagesWateredByBerryTreeId(u8 id)
{
return BerryTreeGetNumStagesWatered(GetBerryTreeInfo(id));
}
-u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
+static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
{
u32 randMin;
u32 randMax;
u32 rand;
u32 extraYield;
+ // depending on if the player gave the tree plenty of water, berry yield will be affected proportionally.
+
if (water == 0)
return min;
else
@@ -1270,7 +1330,7 @@ u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
randMax = (max - min) * (water);
rand = randMin + Random() % (randMax - randMin + 1);
- if ((rand & 3) > 1)
+ if ((rand % 4) > 1)
extraYield = rand / 4 + 1;
else
extraYield = rand / 4;
@@ -1278,7 +1338,7 @@ u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
}
}
-u8 CalcBerryYield(struct BerryTree *tree)
+static u8 CalcBerryYield(struct BerryTree *tree)
{
const struct Berry *berry = GetBerryInfo(tree->berry);
u8 min = berry->minYield;
@@ -1287,12 +1347,12 @@ u8 CalcBerryYield(struct BerryTree *tree)
return CalcBerryYieldInternal(max, min, BerryTreeGetNumStagesWatered(tree));
}
-u8 GetBerryCountByBerryTreeId(u8 id)
+static u8 GetBerryCountByBerryTreeId(u8 id)
{
return gSaveBlock1.berryTrees[id].berryYield;
}
-u16 GetStageDurationByBerryType(u8 berry)
+static u16 GetStageDurationByBerryType(u8 berry)
{
return GetBerryInfo(berry)->stageDuration * 60;
}
@@ -1301,18 +1361,23 @@ void FieldObjectInteractionGetBerryTreeData(void)
{
u8 id;
u8 berry;
- u8 unk;
+ u8 localId;
u8 group;
u8 num;
id = FieldObjectGetBerryTreeId(gSelectedMapObject);
berry = GetBerryTypeByBerryTreeId(id);
ResetBerryTreeSparkleFlag(id);
- unk = gScriptLastTalked;
+ localId = gScriptLastTalked;
num = gSaveBlock1.location.mapNum;
group = gSaveBlock1.location.mapGroup;
- if (sub_8060234(unk, num, group))
- gSpecialVar_0x8004 = 0xFF;
+ if (IsBerryTreeSparkling(localId, num, group))
+ {
+ // we cannot allow the player to grow/interact with the tree while the tree
+ // is undergoing the sparkling effect, so set the special var to the sparkling
+ // state and let the event script process the flag.
+ gSpecialVar_0x8004 = BERRY_STAGE_SPARKLING;
+ }
else
gSpecialVar_0x8004 = GetStageByBerryTreeId(id);
gSpecialVar_0x8005 = GetNumStagesWateredByBerryTreeId(id);
@@ -1320,7 +1385,7 @@ void FieldObjectInteractionGetBerryTreeData(void)
GetBerryNameByBerryType(berry, gStringVar1);
}
-void sub_80B4EE4(void)
+void Berry_FadeAndGoToBerryBagMenu(void)
{
SetMainCallback2(sub_80A68CC);
}
@@ -1347,11 +1412,13 @@ void FieldObjectInteractionRemoveBerryTree(void)
sub_8060288(gScriptLastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
}
-u8 PlayerHasBerries(void)
+bool8 PlayerHasBerries(void)
{
return IsBagPocketNonEmpty(BAG_BERRIES);
}
+// whenever the player is not within view of the berry tree during its sparkle state, the
+// sparkle state will be reset.
void ResetBerryTreeSparkleFlags(void)
{
s16 cam_left;
@@ -1369,7 +1436,7 @@ void ResetBerryTreeSparkleFlags(void)
bottom = top + 8;
for (i = 0; i < (u8)ARRAY_COUNT(gSaveBlock1.mapObjects); i++)
{
- if (gMapObjects[i].active && gMapObjects[i].animPattern == 12)
+ if (gMapObjects[i].active && gMapObjects[i].animPattern == 12) // is the object an active berry tree?
{
cam_left = gMapObjects[i].coords2.x;
cam_top = gMapObjects[i].coords2.y;
diff --git a/src/field/daycare.c b/src/field/daycare.c
index 60cc61e40..9c5808a0e 100644
--- a/src/field/daycare.c
+++ b/src/field/daycare.c
@@ -388,8 +388,8 @@ static void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData)
SetMonData(egg, MON_DATA_DEF_IV, &iv);
break;
case 3:
- iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPD_IV);
- SetMonData(egg, MON_DATA_SPD_IV, &iv);
+ iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPEED_IV);
+ SetMonData(egg, MON_DATA_SPEED_IV, &iv);
break;
case 4:
iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPATK_IV);
diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c
index 65357ac83..e9dd0e9a6 100644
--- a/src/field/field_control_avatar.c
+++ b/src/field/field_control_avatar.c
@@ -856,7 +856,7 @@ u8 sub_8068F18(void)
return 0;
}
-u8 *GetFieldObjectScriptPointerForComparison(void)
+u8 *GetFieldObjectScriptPointerPlayerFacing(void)
{
u8 r4;
struct MapPosition position;
diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c
index 9d37d90ad..0e1ce2a31 100644
--- a/src/field/field_map_obj.c
+++ b/src/field/field_map_obj.c
@@ -5549,17 +5549,16 @@ static bool8 DoesObjectCollideWithObjectAt(struct MapObject *mapObject, s16 x, s
return 0;
}
-bool8 sub_8060234(u8 localId, u8 mapNum, u8 mapGroup)
+// this function is only used in berry.c, but its unknown whether its intended context is the berry tree check or if its checking for the flickering.
+bool8 IsBerryTreeSparkling(u8 localId, u8 mapNum, u8 mapGroup)
{
u8 mapObjectId;
+
if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
- {
if (gSprites[gMapObjects[mapObjectId].spriteId].data7 & 2)
- {
- return 1;
- }
- }
- return 0;
+ return TRUE;
+
+ return FALSE;
}
void sub_8060288(u8 localId, u8 mapNum, u8 mapGroup)
diff --git a/src/field/field_special_scene.c b/src/field/field_special_scene.c
index 255b1d42b..5758929b6 100644
--- a/src/field/field_special_scene.c
+++ b/src/field/field_special_scene.c
@@ -94,8 +94,7 @@ s16 GetTruckBoxMovement(int a1) // for the box movement?
void Task_Truck1(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- s16 cameraYpan;
- s16 cameraXpan = 0;
+ s16 cameraYpan, cameraXpan = 0;
s16 box1, box2, box3;
box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box.
diff --git a/src/field/item_use.c b/src/field/item_use.c
index 68da27fdb..14b13ca3b 100644
--- a/src/field/item_use.c
+++ b/src/field/item_use.c
@@ -780,7 +780,7 @@ void ItemUseOutOfBattle_SSTicket(u8 taskId)
void sub_80C9C7C(u8 taskId)
{
- if (IsPlayerFacingPlantedBerryTree() == TRUE)
+ if (IsPlayerFacingUnplantedSoil() == TRUE)
{
gFieldItemUseCallback = sub_80C9D00;
gFieldCallback = ExecuteItemUseFromBlackPalette;
diff --git a/src/field/party_menu.c b/src/field/party_menu.c
index 86ad9ecc9..a4c66d891 100644
--- a/src/field/party_menu.c
+++ b/src/field/party_menu.c
@@ -460,7 +460,7 @@ static const u8 StatDataTypes[] = {
MON_DATA_DEF,
MON_DATA_SPATK,
MON_DATA_SPDEF,
- MON_DATA_SPD,
+ MON_DATA_SPEED,
};
struct Unk201C000
diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c
index 1d597cb17..345a9668b 100644
--- a/src/pokemon/pokemon_1.c
+++ b/src/pokemon/pokemon_1.c
@@ -45,7 +45,7 @@ void ZeroMonData(struct Pokemon *mon)
SetMonData(mon, MON_DATA_MAX_HP, (u8 *)&arg);
SetMonData(mon, MON_DATA_ATK, (u8 *)&arg);
SetMonData(mon, MON_DATA_DEF, (u8 *)&arg);
- SetMonData(mon, MON_DATA_SPD, (u8 *)&arg);
+ SetMonData(mon, MON_DATA_SPEED, (u8 *)&arg);
SetMonData(mon, MON_DATA_SPATK, (u8 *)&arg);
SetMonData(mon, MON_DATA_SPDEF, (u8 *)&arg);
arg = 255;
@@ -141,7 +141,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV);
SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV);
SetBoxMonData(boxMon, MON_DATA_DEF_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_SPD_IV, &fixedIV);
+ SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &fixedIV);
SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &fixedIV);
SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &fixedIV);
}
@@ -160,7 +160,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
value = Random();
iv = value & 0x1F;
- SetBoxMonData(boxMon, MON_DATA_SPD_IV, (u8 *)&iv);
+ SetBoxMonData(boxMon, MON_DATA_SPEED_IV, (u8 *)&iv);
iv = (value & 0x3E0) >> 5;
SetBoxMonData(boxMon, MON_DATA_SPATK_IV, (u8 *)&iv);
iv = (value & 0x7C00) >> 10;
@@ -247,7 +247,7 @@ void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u
SetMonData(mon, MON_DATA_HP_IV, &ivs[0]);
SetMonData(mon, MON_DATA_ATK_IV, &ivs[1]);
SetMonData(mon, MON_DATA_DEF_IV, &ivs[2]);
- SetMonData(mon, MON_DATA_SPD_IV, &ivs[3]);
+ SetMonData(mon, MON_DATA_SPEED_IV, &ivs[3]);
SetMonData(mon, MON_DATA_SPATK_IV, &ivs[4]);
SetMonData(mon, MON_DATA_SPDEF_IV, &ivs[5]);
CalculateMonStats(mon);
@@ -326,7 +326,7 @@ void sub_803ADE8(struct Pokemon *mon, struct UnknownPokemonStruct *src)
value = src->defenseIV;
SetMonData(mon, MON_DATA_DEF_IV, &value);
value = src->speedIV;
- SetMonData(mon, MON_DATA_SPD_IV, &value);
+ SetMonData(mon, MON_DATA_SPEED_IV, &value);
value = src->spAttackIV;
SetMonData(mon, MON_DATA_SPATK_IV, &value);
value = src->spDefenseIV;
@@ -363,7 +363,7 @@ void sub_803AF78(struct Pokemon *mon, struct UnknownPokemonStruct *dest)
dest->hpIV = GetMonData(mon, MON_DATA_HP_IV, NULL);
dest->attackIV = GetMonData(mon, MON_DATA_ATK_IV, NULL);
dest->defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL);
- dest->speedIV = GetMonData(mon, MON_DATA_SPD_IV, NULL);
+ dest->speedIV = GetMonData(mon, MON_DATA_SPEED_IV, NULL);
dest->spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL);
dest->spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL);
dest->altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL);
@@ -414,7 +414,7 @@ void CalculateMonStats(struct Pokemon *mon)
s32 attackEV = GetMonData(mon, MON_DATA_ATK_EV, NULL);
s32 defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL);
s32 defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL);
- s32 speedIV = GetMonData(mon, MON_DATA_SPD_IV, NULL);
+ s32 speedIV = GetMonData(mon, MON_DATA_SPEED_IV, NULL);
s32 speedEV = GetMonData(mon, MON_DATA_SPD_EV, NULL);
s32 spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL);
s32 spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL);
@@ -444,7 +444,7 @@ void CalculateMonStats(struct Pokemon *mon)
CALC_STAT(baseAttack, attackIV, attackEV, 1, MON_DATA_ATK)
CALC_STAT(baseDefense, defenseIV, defenseEV, 2, MON_DATA_DEF)
- CALC_STAT(baseSpeed, speedIV, speedEV, 3, MON_DATA_SPD)
+ CALC_STAT(baseSpeed, speedIV, speedEV, 3, MON_DATA_SPEED)
CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, 4, MON_DATA_SPATK)
CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, 5, MON_DATA_SPDEF)
diff --git a/src/pokemon/pokemon_2.c b/src/pokemon/pokemon_2.c
index f02ce6170..eaa0b86b8 100644
--- a/src/pokemon/pokemon_2.c
+++ b/src/pokemon/pokemon_2.c
@@ -278,7 +278,7 @@ u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data)
return mon->attack;
case MON_DATA_DEF:
return mon->defense;
- case MON_DATA_SPD:
+ case MON_DATA_SPEED:
return mon->speed;
case MON_DATA_SPATK:
return mon->spAttack;
@@ -476,7 +476,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
case MON_DATA_DEF_IV:
retVal = substruct3->defenseIV;
break;
- case MON_DATA_SPD_IV:
+ case MON_DATA_SPEED_IV:
retVal = substruct3->speedIV;
break;
case MON_DATA_SPATK_IV:
@@ -653,7 +653,7 @@ void SetMonData(struct Pokemon *mon, s32 field, const u8 *data)
case MON_DATA_DEF:
SET16(mon->defense);
break;
- case MON_DATA_SPD:
+ case MON_DATA_SPEED:
SET16(mon->speed);
break;
case MON_DATA_SPATK:
@@ -844,7 +844,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const u8 *data)
case MON_DATA_DEF_IV:
SET8(substruct3->defenseIV);
break;
- case MON_DATA_SPD_IV:
+ case MON_DATA_SPEED_IV:
SET8(substruct3->speedIV);
break;
case MON_DATA_SPATK_IV:
@@ -1185,7 +1185,7 @@ void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex)
gBattleMons[battleIndex].hpIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP_IV, NULL);
gBattleMons[battleIndex].attackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK_IV, NULL);
gBattleMons[battleIndex].defenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF_IV, NULL);
- gBattleMons[battleIndex].speedIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPD_IV, NULL);
+ gBattleMons[battleIndex].speedIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED_IV, NULL);
gBattleMons[battleIndex].spAttackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK_IV, NULL);
gBattleMons[battleIndex].spDefenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF_IV, NULL);
gBattleMons[battleIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY, NULL);
@@ -1195,7 +1195,7 @@ void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex)
gBattleMons[battleIndex].maxHP = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MAX_HP, NULL);
gBattleMons[battleIndex].attack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK, NULL);
gBattleMons[battleIndex].defense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF, NULL);
- gBattleMons[battleIndex].speed = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPD, NULL);
+ gBattleMons[battleIndex].speed = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED, NULL);
gBattleMons[battleIndex].spAttack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK, NULL);
gBattleMons[battleIndex].spDefense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF, NULL);
gBattleMons[battleIndex].isEgg = GetMonData(&gPlayerParty[partyIndex], MON_DATA_IS_EGG, NULL);
diff --git a/src/pokemon/pokemon_size_record.c b/src/pokemon/pokemon_size_record.c
index f2222bd3b..a71e6f1fd 100644
--- a/src/pokemon/pokemon_size_record.c
+++ b/src/pokemon/pokemon_size_record.c
@@ -46,7 +46,7 @@ static u32 GetMonSizeHash(struct Pokemon *pkmn)
u16 hpIV = GetMonData(pkmn, MON_DATA_HP_IV) & 0xF;
u16 attackIV = GetMonData(pkmn, MON_DATA_ATK_IV) & 0xF;
u16 defenseIV = GetMonData(pkmn, MON_DATA_DEF_IV) & 0xF;
- u16 speedIV = GetMonData(pkmn, MON_DATA_SPD_IV) & 0xF;
+ u16 speedIV = GetMonData(pkmn, MON_DATA_SPEED_IV) & 0xF;
u16 spAtkIV = GetMonData(pkmn, MON_DATA_SPATK_IV) & 0xF;
u16 spDefIV = GetMonData(pkmn, MON_DATA_SPDEF_IV) & 0xF;
u32 hibyte = ((attackIV ^ defenseIV) * hpIV) ^ (personality & 0xFF);