summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_9.s24
-rw-r--r--data/battle_scripts_1.s6
-rw-r--r--include/battle.h146
-rw-r--r--include/battle_script_commands.h65
-rw-r--r--include/battle_string_ids.h387
-rw-r--r--include/battle_util.h4
-rw-r--r--include/ewram.h2
-rw-r--r--src/battle/battle_2.c46
-rw-r--r--src/battle/battle_4.c3264
-rw-r--r--src/battle/battle_7.c8
-rw-r--r--src/battle/battle_ai.c18
-rw-r--r--src/battle/battle_controller_linkpartner.c10
-rw-r--r--src/battle/battle_controller_player.c16
-rw-r--r--src/battle/battle_controller_wally.c6
-rw-r--r--src/battle/battle_message.c40
-rw-r--r--src/battle/battle_util.c362
-rw-r--r--src/data/battle_strings_de.h2
-rw-r--r--src/data/battle_strings_en.h2
-rw-r--r--src/pokemon/pokemon_3.c10
-rw-r--r--src/rom3.c10
-rw-r--r--src/rom_800D42C.c8
-rw-r--r--src/script_pokemon_util_80C4BF0.c4
-rw-r--r--sym_ewram.txt6
23 files changed, 1726 insertions, 2720 deletions
diff --git a/asm/battle_9.s b/asm/battle_9.s
index fc4cbcf4b..9dbb7c619 100644
--- a/asm/battle_9.s
+++ b/asm/battle_9.s
@@ -273,7 +273,7 @@ sub_80361E8: @ 80361E8
beq _08036214
b _08036400
_08036214:
- ldr r1, _0803627C @ =gMoveHitWith
+ ldr r1, _0803627C @ =gLastLandedMoves
ldr r5, _08036280 @ =gActiveBank
ldrb r3, [r5]
lsls r0, r3, 1
@@ -326,7 +326,7 @@ _08036242:
ldrb r7, [r5]
b _080362B2
.align 2, 0
-_0803627C: .4byte gMoveHitWith
+_0803627C: .4byte gLastLandedMoves
_08036280: .4byte gActiveBank
_08036284: .4byte 0x0000ffff
_08036288: .4byte gBattleMoves
@@ -348,7 +348,7 @@ _080362AE:
mov r8, r7
_080362B2:
ldr r3, _080362D4 @ =gBattleMoves
- ldr r1, _080362D8 @ =gMoveHitWith
+ ldr r1, _080362D8 @ =gLastLandedMoves
ldr r2, _080362DC @ =gActiveBank
ldrb r0, [r2]
lsls r0, 1
@@ -366,7 +366,7 @@ _080362B2:
b _080362F2
.align 2, 0
_080362D4: .4byte gBattleMoves
-_080362D8: .4byte gMoveHitWith
+_080362D8: .4byte gLastLandedMoves
_080362DC: .4byte gActiveBank
_080362E0:
cmp r0, 0xB
@@ -548,7 +548,7 @@ AI_SwitchIfNaturalCure: @ 8036410
lsrs r0, 1
cmp r1, r0
bcc _080364D8
- ldr r1, _08036470 @ =gMoveHitWith
+ ldr r1, _08036470 @ =gLastLandedMoves
lsls r0, r4, 1
adds r0, r1
ldrh r1, [r0]
@@ -568,11 +568,11 @@ _08036456:
.align 2, 0
_08036468: .4byte gBattleMons
_0803646C: .4byte gActiveBank
-_08036470: .4byte gMoveHitWith
+_08036470: .4byte gLastLandedMoves
_08036474: .4byte 0x0000ffff
_08036478:
ldr r2, _080364A4 @ =gBattleMoves
- ldr r1, _080364A8 @ =gMoveHitWith
+ ldr r1, _080364A8 @ =gLastLandedMoves
ldr r4, _080364AC @ =gActiveBank
ldrb r0, [r4]
lsls r0, 1
@@ -594,7 +594,7 @@ _08036478:
b _080364E0
.align 2, 0
_080364A4: .4byte gBattleMoves
-_080364A8: .4byte gMoveHitWith
+_080364A8: .4byte gLastLandedMoves
_080364AC: .4byte gActiveBank
_080364B0:
movs r0, 0x8
@@ -863,7 +863,7 @@ sub_80366A4: @ 80366A4
lsls r1, 24
lsrs r1, 24
str r1, [sp, 0x4]
- ldr r1, _08036730 @ =gMoveHitWith
+ ldr r1, _08036730 @ =gLastLandedMoves
ldr r5, _08036734 @ =gActiveBank
ldrb r3, [r5]
lsls r0, r3, 1
@@ -924,7 +924,7 @@ _080366F6:
mov r10, r5
b _0803679C
.align 2, 0
-_08036730: .4byte gMoveHitWith
+_08036730: .4byte gLastLandedMoves
_08036734: .4byte gActiveBank
_08036738: .4byte 0x0000ffff
_0803673C: .4byte gUnknown_02024C5C
@@ -1053,7 +1053,7 @@ _08036844:
adds r0, r2
ldrb r2, [r0, 0x16]
_08036850:
- ldr r1, _080368F0 @ =gMoveHitWith
+ ldr r1, _080368F0 @ =gLastLandedMoves
ldr r5, _080368F4 @ =gActiveBank
ldrb r0, [r5]
lsls r0, 1
@@ -1132,7 +1132,7 @@ _080368DA:
bx r1
.align 2, 0
_080368EC: .4byte gBaseStats
-_080368F0: .4byte gMoveHitWith
+_080368F0: .4byte gLastLandedMoves
_080368F4: .4byte gActiveBank
_080368F8: .4byte gUnknown_02024C5C
_080368FC: .4byte gBattleMons
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index b04ebefe5..d309aea7e 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -2589,12 +2589,12 @@ BattleScript_EffectEndeavor: @ 81D8852
attackstring
ppreduce
setdamagetohealthdifference BattleScript_ButItFailed
- copyword gHP_dealt, gBattleMoveDamage
+ copyword gHpDealt, gBattleMoveDamage
accuracycheck BattleScript_MoveMissed, ACC_CURR_MOVE
typecalc
jumpifmovehadnoeffect BattleScript_HitFromAtkAnimation
bicbyte gBattleMoveFlags, MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE
- copyword gBattleMoveDamage, gHP_dealt
+ copyword gBattleMoveDamage, gHpDealt
adjustsetdamage
goto BattleScript_HitFromAtkAnimation
@@ -3314,7 +3314,7 @@ BattleScript_LeechSeedTurnDrain:: @ 81D904B
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
healthbarupdate USER
datahpupdate USER
- copyword gBattleMoveDamage, gHP_dealt
+ copyword gBattleMoveDamage, gHpDealt
jumpifability USER, ABILITY_LIQUID_OOZE, BattleScript_LeechSeedTurnPrintLiquidOoze
manipulatedamage 0
setbyte cMULTISTRING_CHOOSER, 3
diff --git a/include/battle.h b/include/battle.h
index c94325cd5..d3cbd24f5 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -4,6 +4,30 @@
#include "sprite.h"
#include "constants/battle_constants.h"
+/*
+ Banks are a name given to what could be called a 'battlerId' or 'monControllerId'.
+ Each bank has a value consisting of two bits.
+ 0x1 bit is responsible for the side, 0 = player's side, 1 = opponent's side.
+ 0x2 bit is responsible for the id of sent out pokemon. 0 means it's the first sent out pokemon, 1 it's the second one. (Triple battle didn't exist at the time yet.)
+*/
+
+#define BATTLE_BANKS_COUNT 4
+
+#define IDENTITY_PLAYER_MON1 0
+#define IDENTITY_OPPONENT_MON1 1
+#define IDENTITY_PLAYER_MON2 2
+#define IDENTITY_OPPONENT_MON2 3
+
+#define SIDE_PLAYER 0x0
+#define SIDE_OPPONENT 0x1
+
+#define BIT_SIDE 0x1
+#define BIT_MON 0x2
+
+#define GET_BANK_IDENTITY(bank)((gBanksByIdentity[bank]))
+#define GET_BANK_SIDE(bank)((GetBankIdentity(bank) & BIT_SIDE))
+#define GET_BANK_SIDE2(bank)((GET_BANK_IDENTITY(bank) & BIT_SIDE))
+
enum
{
BATTLE_TERRAIN_GRASS,
@@ -49,16 +73,16 @@ struct AI_Stack
struct AI_ThinkingStruct /* 0x2016800 */
{
-/* 0x00 */ u8 aiState;
-/* 0x01 */ u8 movesetIndex;
-/* 0x02 */ u16 moveConsidered;
-/* 0x04 */ s8 score[4]; // score?
-/* 0x08 */ u32 funcResult;
-/* 0x0C */ u32 aiFlags;
-/* 0x10 */ u8 aiAction;
-/* 0x11 */ u8 aiLogicId;
-/* 0x12 */ u8 filler12[6];
-/* 0x18 */ u8 simulatedRNG[4];
+ /*0x00*/ u8 aiState;
+ /*0x01*/ u8 movesetIndex;
+ /*0x02*/ u16 moveConsidered;
+ /*0x04*/ s8 score[4]; // score?
+ /*0x08*/ u32 funcResult;
+ /*0x0C*/ u32 aiFlags;
+ /*0x10*/ u8 aiAction;
+ /*0x11*/ u8 aiLogicId;
+ /*0x12*/ u8 filler12[6];
+ /*0x18*/ u8 simulatedRNG[4];
};
struct BattleStruct /* 0x2000000 */
@@ -302,6 +326,18 @@ struct BattleStruct /* 0x2000000 */
/* 0x16A00 */ struct UnkBattleStruct1 unk_2016A00_2;
};
+struct StatsArray
+{
+ u16 hp;
+ u16 atk;
+ u16 def;
+ u16 spd;
+ u16 spAtk;
+ u16 spDef;
+};
+
+#define gBattleResources_statsBeforeLvlUp ((struct StatsArray *)(gSharedMem + 0x17180))
+
struct DisableStruct
{
/*0x00*/ u32 transformedMonPersonality;
@@ -491,7 +527,7 @@ struct WishFutureKnock
u8 wishCounter[MAX_BANKS_BATTLE];
u8 wishUserID[MAX_BANKS_BATTLE];
u8 weatherDuration;
- u16 knockedOffPokes;
+ u8 knockedOffPokes[2];
};
extern struct UnkBattleStruct1 unk_2016A00;
@@ -504,6 +540,88 @@ extern struct WishFutureKnock gWishFutureKnock;
extern struct AI_ThinkingStruct gAIThinkingSpace;
extern struct Struct20238C8 gUnknown_020238C8;
+#define GET_MOVE_TYPE(move, typeArg) \
+{ \
+ if (gBattleStruct->dynamicMoveType) \
+ typeArg = gBattleStruct->dynamicMoveType & 0x3F; \
+ else \
+ typeArg = gBattleMoves[move].type; \
+}
+
+#define MOVE_EFFECT_SLEEP 0x1
+#define MOVE_EFFECT_POISON 0x2
+#define MOVE_EFFECT_BURN 0x3
+#define MOVE_EFFECT_FREEZE 0x4
+#define MOVE_EFFECT_PARALYSIS 0x5
+#define MOVE_EFFECT_TOXIC 0x6
+#define MOVE_EFFECT_CONFUSION 0x7
+#define MOVE_EFFECT_FLINCH 0x8
+#define MOVE_EFFECT_TRI_ATTACK 0x9
+#define MOVE_EFFECT_UPROAR 0xA
+#define MOVE_EFFECT_PAYDAY 0xB
+#define MOVE_EFFECT_CHARGING 0xC
+#define MOVE_EFFECT_WRAP 0xD
+#define MOVE_EFFECT_RECOIL_25 0xE
+#define MOVE_EFFECT_ATK_PLUS_1 0xF
+#define MOVE_EFFECT_DEF_PLUS_1 0x10
+#define MOVE_EFFECT_SPD_PLUS_1 0x11
+#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12
+#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13
+#define MOVE_EFFECT_ACC_PLUS_1 0x14
+#define MOVE_EFFECT_EVS_PLUS_1 0x15
+#define MOVE_EFFECT_ATK_MINUS_1 0x16
+#define MOVE_EFFECT_DEF_MINUS_1 0x17
+#define MOVE_EFFECT_SPD_MINUS_1 0x18
+#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19
+#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A
+#define MOVE_EFFECT_ACC_MINUS_1 0x1B
+#define MOVE_EFFECT_EVS_MINUS_1 0x1C
+#define MOVE_EFFECT_RECHARGE 0x1D
+#define MOVE_EFFECT_RAGE 0x1E
+#define MOVE_EFFECT_STEAL_ITEM 0x1F
+#define MOVE_EFFECT_PREVENT_ESCAPE 0x20
+#define MOVE_EFFECT_NIGHTMARE 0x21
+#define MOVE_EFFECT_ALL_STATS_UP 0x22
+#define MOVE_EFFECT_RAPIDSPIN 0x23
+#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
+#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
+#define MOVE_EFFECT_RECOIL_33_PARALYSIS 0x26
+#define MOVE_EFFECT_ATK_PLUS_2 0x27
+#define MOVE_EFFECT_DEF_PLUS_2 0x28
+#define MOVE_EFFECT_SPD_PLUS_2 0x29
+#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A
+#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B
+#define MOVE_EFFECT_ACC_PLUS_2 0x2C
+#define MOVE_EFFECT_EVS_PLUS_2 0x2D
+#define MOVE_EFFECT_ATK_MINUS_2 0x2E
+#define MOVE_EFFECT_DEF_MINUS_2 0x2F
+#define MOVE_EFFECT_SPD_MINUS_2 0x30
+#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31
+#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32
+#define MOVE_EFFECT_ACC_MINUS_2 0x33
+#define MOVE_EFFECT_EVS_MINUS_2 0x34
+#define MOVE_EFFECT_THRASH 0x35
+#define MOVE_EFFECT_KNOCK_OFF 0x36
+#define MOVE_EFFECT_NOTHING_37 0x37
+#define MOVE_EFFECT_NOTHING_38 0x38
+#define MOVE_EFFECT_NOTHING_39 0x39
+#define MOVE_EFFECT_NOTHING_3A 0x3A
+#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B
+#define MOVE_EFFECT_NOTHING_3C 0x3C
+#define MOVE_EFFECT_NOTHING_3D 0x3D
+#define MOVE_EFFECT_NOTHING_3E 0x3E
+#define MOVE_EFFECT_NOTHING_3F 0x3F
+#define MOVE_EFFECT_AFFECTS_USER 0x40
+#define MOVE_EFFECT_CERTAIN 0x80
+
+#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
+#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
+#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit
+
+#define SET_STAT_BUFF_VALUE(n)(((s8)(((s8)(n) << 4)) & 0xF0))
+
+#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + (stage << 4) + (goesDown << 7))
+
// used in many battle files, it seems as though Hisashi Sogabe wrote
// some sort of macro to replace the use of actually calling memset.
// Perhaps it was thought calling memset was much slower?
@@ -540,7 +658,7 @@ struct funcStack
struct scriptsStack
{
- u8* ptr[8];
+ const u8 *ptr[8];
u8 size;
};
@@ -676,11 +794,11 @@ void nullsub_10(int);
void load_gfxc_health_bar();
u8 battle_load_something();
void sub_8031F88(u8);
-void sub_80324F8(struct Pokemon *, u8);
+void HandleLowHpMusicChange(struct Pokemon *, u8);
void sub_8032638();
void sub_8032AA8(u8, u8);
void SetBankFuncToOpponentBufferRunCommand(void);
-void BattleMusicStop(void);
+void BattleStopLowHpSound(void);
// asm/battle_9.o
void SetBankFuncToLinkOpponentBufferRunCommand(void);
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
new file mode 100644
index 000000000..030844ec3
--- /dev/null
+++ b/include/battle_script_commands.h
@@ -0,0 +1,65 @@
+#ifndef GUARD_BATTLE_SCRIPT_COMMANDS_H
+#define GUARD_BATTLE_SCRIPT_COMMANDS_H
+
+#define NO_ACC_CALC 0xFFFE
+#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
+#define ACC_CURR_MOVE 0
+
+#define CMP_EQUAL 0x0
+#define CMP_NOT_EQUAL 0x1
+#define CMP_GREATER_THAN 0x2
+#define CMP_LESS_THAN 0x3
+#define CMP_COMMON_BITS 0x4
+#define CMP_NO_COMMON_BITS 0x5
+
+#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
+#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
+#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
+
+#define ATK48_STAT_NEGATIVE 0x1
+#define ATK48_STAT_BY_TWO 0x2
+#define ATK48_BIT_x4 0x4
+#define ATK48_LOWER_FAIL_CHECK 0x8
+
+#define ATK4F_DONT_CHECK_STATUSES 0x80
+
+#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
+#define VARIOUS_SET_MAGIC_COAT_TARGET 1
+#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2
+#define VARIOUS_GET_MOVE_TARGET 3
+#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
+#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
+#define VARIOUS_EMIT_YESNOBOX 13
+#define VARIOUS_WAIT_CRY 18
+#define VARIOUS_RETURN_OPPONENT_MON1 19
+#define VARIOUS_RETURN_OPPONENT_MON2 20
+#define VARIOUS_SET_TELEPORT_OUTCOME 25
+#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26
+
+#define ATK80_DMG_CHANGE_SIGN 0
+#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1
+#define ATK80_DMG_DOUBLED 2
+
+#define STAT_CHANGE_BS_PTR 0x1
+#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20
+
+#define STAT_CHANGE_WORKED 0
+#define STAT_CHANGE_DIDNT_WORK 1
+
+#define WINDOW_CLEAR 0x1
+#define WINDOW_x80 0x80
+
+void AI_CalcDmg(u8 bankAtk, u8 bankDef);
+u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef);
+u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility);
+u8 BankGetTurnOrder(u8 bank);
+void SetMoveEffect(bool8 primary, u8 certain);
+void BattleDestroyYesNoCursorAt(u8 cursorPosition);
+void BattleCreateYesNoCursorAt(u8 cursorPosition);
+void BufferMoveToLearnIntoBattleTextBuff2(void);
+void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags);
+bool8 UproarWakeUpCheck(u8 bank);
+
+extern void (* const gBattleScriptingCommandsTable[])(void);
+
+#endif // GUARD_BATTLE_SCRIPT_COMMANDS_H
diff --git a/include/battle_string_ids.h b/include/battle_string_ids.h
new file mode 100644
index 000000000..f242284b0
--- /dev/null
+++ b/include/battle_string_ids.h
@@ -0,0 +1,387 @@
+#ifndef GUARD_BATTLE_STRING_IDS_H
+#define GUARD_BATTLE_STRING_IDS_H
+
+#define BATTLESTRINGS_COUNT 369
+
+#define BATTLESTRINGS_ID_ADDER 12 // all battlestrings have its ID + 12, because first 5 are reserved
+
+#define STRINGID_INTROMSG 0
+#define STRINGID_INTROSENDOUT 1
+#define STRINGID_RETURNMON 2
+#define STRINGID_SWITCHINMON 3
+#define STRINGID_USEDMOVE 4
+#define STRINGID_BATTLEEND 5
+
+
+// todo: make some of those names less vague: attacker/target vs pkmn, etc.
+#define STRINGID_TRAINER1LOSETEXT 12
+#define STRINGID_PKMNGAINEDEXP 13
+#define STRINGID_PKMNGREWTOLV 14
+#define STRINGID_PKMNLEARNEDMOVE 15
+#define STRINGID_TRYTOLEARNMOVE1 16
+#define STRINGID_TRYTOLEARNMOVE2 17
+#define STRINGID_TRYTOLEARNMOVE3 18
+#define STRINGID_PKMNFORGOTMOVE 19
+#define STRINGID_STOPLEARNINGMOVE 20
+#define STRINGID_DIDNOTLEARNMOVE 21
+#define STRINGID_PKMNLEARNEDMOVE2 22
+#define STRINGID_ATTACKMISSED 23
+#define STRINGID_PKMNPROTECTEDITSELF 24
+#define STRINGID_STATSWONTINCREASE2 25
+#define STRINGID_AVOIDEDDAMAGE 26
+#define STRINGID_ITDOESNTAFFECT 27
+#define STRINGID_ATTACKERFAINTED 28
+#define STRINGID_TARGETFAINTED 29
+#define STRINGID_PLAYERGOTMONEY 30
+#define STRINGID_PLAYERWHITEOUT 31
+#define STRINGID_PLAYERWHITEOUT2 32
+#define STRINGID_PREVENTSESCAPE 33
+#define STRINGID_HITXTIMES 34
+#define STRINGID_PKMNFELLASLEEP 35
+#define STRINGID_PKMNMADESLEEP 36
+#define STRINGID_PKMNALREADYASLEEP 37
+#define STRINGID_PKMNALREADYASLEEP2 38
+#define STRINGID_PKMNWASNTAFFECTED 39
+#define STRINGID_PKMNWASPOISONED 40
+#define STRINGID_PKMNPOISONEDBY 41
+#define STRINGID_PKMNHURTBYPOISON 42
+#define STRINGID_PKMNALREADYPOISONED 43
+#define STRINGID_PKMNBADLYPOISONED 44
+#define STRINGID_PKMNENERGYDRAINED 45
+#define STRINGID_PKMNWASBURNED 46
+#define STRINGID_PKMNBURNEDBY 47
+#define STRINGID_PKMNHURTBYBURN 48
+#define STRINGID_PKMNWASFROZEN 49
+#define STRINGID_PKMNFROZENBY 50
+#define STRINGID_PKMNISFROZEN 51
+#define STRINGID_PKMNWASDEFROSTED 52
+#define STRINGID_PKMNWASDEFROSTED2 53
+#define STRINGID_PKMNWASDEFROSTEDBY 54
+#define STRINGID_PKMNWASPARALYZED 55
+#define STRINGID_PKMNWASPARALYZEDBY 56
+#define STRINGID_PKMNISPARALYZED 57
+#define STRINGID_PKMNISALREADYPARALYZED 58
+#define STRINGID_PKMNHEALEDPARALYSIS 59
+#define STRINGID_PKMNDREAMEATEN 60
+#define STRINGID_STATSWONTINCREASE 61
+#define STRINGID_STATSWONTDECREASE 62
+#define STRINGID_TEAMSTOPPEDWORKING 63
+#define STRINGID_FOESTOPPEDWORKING 64
+#define STRINGID_PKMNISCONFUSED 65
+#define STRINGID_PKMNHEALEDCONFUSION 66
+#define STRINGID_PKMNWASCONFUSED 67
+#define STRINGID_PKMNALREADYCONFUSED 68
+#define STRINGID_PKMNFELLINLOVE 69
+#define STRINGID_PKMNINLOVE 70
+#define STRINGID_PKMNIMMOBILIZEDBYLOVE 71
+#define STRINGID_PKMNBLOWNAWAY 72
+#define STRINGID_PKMNCHANGEDTYPE 73
+#define STRINGID_PKMNFLINCHED 74
+#define STRINGID_PKMNREGAINEDHEALTH 75
+#define STRINGID_PKMNHPFULL 76
+#define STRINGID_PKMNRAISEDSPDEF 77
+#define STRINGID_PKMNRAISEDDEF 78
+#define STRINGID_PKMNCOVEREDBYVEIL 79
+#define STRINGID_PKMNUSEDSAFEGUARD 80
+#define STRINGID_PKMNSAFEGUARDEXPIRED 81
+#define STRINGID_PKMNWENTTOSLEEP 82
+#define STRINGID_PKMNSLEPTHEALTHY 83
+#define STRINGID_PKMNWHIPPEDWHIRLWIND 84
+#define STRINGID_PKMNTOOKSUNLIGHT 85
+#define STRINGID_PKMNLOWEREDHEAD 86
+#define STRINGID_PKMNISGLOWING 87
+#define STRINGID_PKMNFLEWHIGH 88
+#define STRINGID_PKMNDUGHOLE 89
+#define STRINGID_PKMNSQUEEZEDBYBIND 90
+#define STRINGID_PKMNTRAPPEDINVORTEX 91
+#define STRINGID_PKMNWRAPPEDBY 92
+#define STRINGID_PKMNCLAMPED 93
+#define STRINGID_PKMNHURTBY 94
+#define STRINGID_PKMNFREEDFROM 95
+#define STRINGID_PKMNCRASHED 96
+#define STRINGID_PKMNSHROUDEDINMIST 97
+#define STRINGID_PKMNPROTECTEDBYMIST 98
+#define STRINGID_PKMNGETTINGPUMPED 99
+#define STRINGID_PKMNHITWITHRECOIL 100
+#define STRINGID_PKMNPROTECTEDITSELF2 101
+#define STRINGID_PKMNBUFFETEDBYSANDSTORM 102
+#define STRINGID_PKMNPELTEDBYHAIL 103
+#define STRINGID_PKMNSEEDED 104
+#define STRINGID_PKMNEVADEDATTACK 105
+#define STRINGID_PKMNSAPPEDBYLEECHSEED 106
+#define STRINGID_PKMNFASTASLEEP 107
+#define STRINGID_PKMNWOKEUP 108
+#define STRINGID_PKMNUPROARKEPTAWAKE 109
+#define STRINGID_PKMNWOKEUPINUPROAR 110
+#define STRINGID_PKMNCAUSEDUPROAR 111
+#define STRINGID_PKMNMAKINGUPROAR 112
+#define STRINGID_PKMNCALMEDDOWN 113
+#define STRINGID_PKMNCANTSLEEPINUPROAR 114
+#define STRINGID_PKMNSTOCKPILED 115
+#define STRINGID_PKMNCANTSTOCKPILE 116
+#define STRINGID_PKMNCANTSLEEPINUPROAR2 117
+#define STRINGID_UPROARKEPTPKMNAWAKE 118
+#define STRINGID_PKMNSTAYEDAWAKEUSING 119
+#define STRINGID_PKMNSTORINGENERGY 120
+#define STRINGID_PKMNUNLEASHEDENERGY 121
+#define STRINGID_PKMNFATIGUECONFUSION 122
+#define STRINGID_PKMNPICKEDUPITEM 123
+#define STRINGID_PKMNUNAFFECTED 124
+#define STRINGID_PKMNTRANSFORMEDINTO 125
+#define STRINGID_PKMNMADESUBSTITUTE 126
+#define STRINGID_PKMNHASSUBSTITUTE 127
+#define STRINGID_SUBSTITUTEDAMAGED 128
+#define STRINGID_PKMNSUBSTITUTEFADED 129
+#define STRINGID_PKMNMUSTRECHARGE 130
+#define STRINGID_PKMNRAGEBUILDING 131
+#define STRINGID_PKMNMOVEWASDISABLED 132
+#define STRINGID_PKMNMOVEISDISABLED 133
+#define STRINGID_PKMNMOVEDISABLEDNOMORE 134
+#define STRINGID_PKMNGOTENCORE 135
+#define STRINGID_PKMNENCOREENDED 136
+#define STRINGID_PKMNTOOKAIM 137
+#define STRINGID_PKMNSKETCHEDMOVE 138
+#define STRINGID_PKMNTRYINGTOTAKEFOE 139
+#define STRINGID_PKMNTOOKFOE 140
+#define STRINGID_PKMNREDUCEDPP 141
+#define STRINGID_PKMNSTOLEITEM 142
+#define STRINGID_TARGETCANTESCAPENOW 143
+#define STRINGID_PKMNFELLINTONIGHTMARE 144
+#define STRINGID_PKMNLOCKEDINNIGHTMARE 145
+#define STRINGID_PKMNLAIDCURSE 146
+#define STRINGID_PKMNAFFLICTEDBYCURSE 147
+#define STRINGID_SPIKESSCATTERED 148
+#define STRINGID_PKMNHURTBYSPIKES 149
+#define STRINGID_PKMNIDENTIFIED 150
+#define STRINGID_PKMNPERISHCOUNTFELL 151
+#define STRINGID_PKMNBRACEDITSELF 152
+#define STRINGID_PKMNENDUREDHIT 153
+#define STRINGID_MAGNITUDESTRENGTH 154
+#define STRINGID_PKMNCUTHPMAXEDATTACK 155
+#define STRINGID_PKMNCOPIEDSTATCHANGES 156
+#define STRINGID_PKMNGOTFREE 157
+#define STRINGID_PKMNSHEDLEECHSEED 158
+#define STRINGID_PKMNBLEWAWAYSPIKES 159
+#define STRINGID_PKMNFLEDFROMBATTLE 160
+#define STRINGID_PKMNFORESAWATTACK 161
+#define STRINGID_PKMNTOOKATTACK 162
+#define STRINGID_PKMNATTACK 163
+#define STRINGID_PKMNCENTERATTENTION 164
+#define STRINGID_PKMNCHARGINGPOWER 165
+#define STRINGID_NATUREPOWERTURNEDINTO 166
+#define STRINGID_PKMNSTATUSNORMAL 167
+#define STRINGID_PKMNHASNOMOVESLEFT 168
+#define STRINGID_PKMNSUBJECTEDTOTORMENT 169
+#define STRINGID_PKMNCANTUSEMOVETORMENT 170
+#define STRINGID_PKMNTIGHTENINGFOCUS 171
+#define STRINGID_PKMNFELLFORTAUNT 172
+#define STRINGID_PKMNCANTUSEMOVETAUNT 173
+#define STRINGID_PKMNREADYTOHELP 174
+#define STRINGID_PKMNSWITCHEDITEMS 175
+#define STRINGID_PKMNCOPIEDFOE 176
+#define STRINGID_PKMNMADEWISH 177
+#define STRINGID_PKMNWISHCAMETRUE 178
+#define STRINGID_PKMNPLANTEDROOTS 179
+#define STRINGID_PKMNABSORBEDNUTRIENTS 180
+#define STRINGID_PKMNANCHOREDITSELF 181
+#define STRINGID_PKMNWASMADEDROWSY 182
+#define STRINGID_PKMNKNOCKEDOFF 183
+#define STRINGID_PKMNSWAPPEDABILITIES 184
+#define STRINGID_PKMNSEALEDOPPONENTMOVE 185
+#define STRINGID_PKMNCANTUSEMOVESEALED 186
+#define STRINGID_PKMNWANTSGRUDGE 187
+#define STRINGID_PKMNLOSTPPGRUDGE 188
+#define STRINGID_PKMNSHROUDEDITSELF 189
+#define STRINGID_PKMNMOVEBOUNCED 190
+#define STRINGID_PKMNWAITSFORTARGET 191
+#define STRINGID_PKMNSNATCHEDMOVE 192
+#define STRINGID_PKMNMADEITRAIN 193
+#define STRINGID_PKMNRAISEDSPEED 194
+#define STRINGID_PKMNPROTECTEDBY 195
+#define STRINGID_PKMNPREVENTSUSAGE 196
+#define STRINGID_PKMNRESTOREDHPUSING 197
+#define STRINGID_PKMNCHANGEDTYPEWITH 198
+#define STRINGID_PKMNPREVENTSPARALYSISWITH 199
+#define STRINGID_PKMNPREVENTSROMANCEWITH 200
+#define STRINGID_PKMNPREVENTSPOISONINGWITH 201
+#define STRINGID_PKMNPREVENTSCONFUSIONWITH 202
+#define STRINGID_PKMNRAISEDFIREPOWERWITH 203
+#define STRINGID_PKMNANCHORSITSELFWITH 204
+#define STRINGID_PKMNCUTSATTACKWITH 205
+#define STRINGID_PKMNPREVENTSSTATLOSSWITH 206
+#define STRINGID_PKMNHURTSWITH 207
+#define STRINGID_PKMNTRACED 208
+#define STRINGID_STATSHARPLY 209
+#define STRINGID_STATROSE 210
+#define STRINGID_STATHARSHLY 211
+#define STRINGID_STATFELL 212
+#define STRINGID_PKMNSSTATCHANGED 213
+#define STRINGID_PKMNSSTATCHANGED2 214
+#define STRINGID_PKMNSSTATCHANGED3 215
+#define STRINGID_PKMNSSTATCHANGED4 216
+#define STRINGID_CRITICALHIT 217
+#define STRINGID_ONEHITKO 218
+#define STRINGID_123POOF 219
+#define STRINGID_ANDELLIPSIS 220
+#define STRINGID_NOTVERYEFFECTIVE 221
+#define STRINGID_SUPEREFFECTIVE 222
+#define STRINGID_GOTAWAYSAFELY 223
+#define STRINGID_WILDPKMNFLED 224
+#define STRINGID_NORUNNINGFROMTRAINERS 225
+#define STRINGID_CANTESCAPE 226
+#define STRINGID_DONTLEAVEBIRCH 227
+#define STRINGID_BUTNOTHINGHAPPENED 228
+#define STRINGID_BUTITFAILED 229
+#define STRINGID_ITHURTCONFUSION 230
+#define STRINGID_MIRRORMOVEFAILED 231
+#define STRINGID_STARTEDTORAIN 232
+#define STRINGID_DOWNPOURSTARTED 233
+#define STRINGID_RAINCONTINUES 234
+#define STRINGID_DOWNPOURCONTINUES 235
+#define STRINGID_RAINSTOPPED 236
+#define STRINGID_SANDSTORMBREWED 237
+#define STRINGID_SANDSTORMRAGES 238
+#define STRINGID_SANDSTORMSUBSIDED 239
+#define STRINGID_SUNLIGHTGOTBRIGHT 240
+#define STRINGID_SUNLIGHTSTRONG 241
+#define STRINGID_SUNLIGHTFADED 242
+#define STRINGID_STARTEDHAIL 243
+#define STRINGID_HAILCONTINUES 244
+#define STRINGID_HAILSTOPPED 245
+#define STRINGID_FAILEDTOSPITUP 246
+#define STRINGID_FAILEDTOSWALLOW 247
+#define STRINGID_WINDBECAMEHEATWAVE 248
+#define STRINGID_STATCHANGESGONE 249
+#define STRINGID_COINSSCATTERED 250
+#define STRINGID_TOOWEAKFORSUBSTITUTE 251
+#define STRINGID_SHAREDPAIN 252
+#define STRINGID_BELLCHIMED 253
+#define STRINGID_FAINTINTHREE 254
+#define STRINGID_NOPPLEFT 255
+#define STRINGID_BUTNOPPLEFT 256
+#define STRINGID_PLAYERUSEDITEM 257
+#define STRINGID_WALLYUSEDITEM 258
+#define STRINGID_TRAINERBLOCKEDBALL 259
+#define STRINGID_DONTBEATHIEF 260
+#define STRINGID_ITDODGEDBALL 261
+#define STRINGID_YOUMISSEDPKMN 262
+#define STRINGID_PKMNBROKEFREE 263
+#define STRINGID_ITAPPEAREDCAUGHT 264
+#define STRINGID_AARGHALMOSTHADIT 265
+#define STRINGID_SHOOTSOCLOSE 266
+#define STRINGID_GOTCHAPKMNCAUGHT 267
+#define STRINGID_GOTCHAPKMNCAUGHT2 268
+#define STRINGID_GIVENICKNAMECAPTURED 269
+#define STRINGID_PKMNSENTTOPC 270
+#define STRINGID_PKMNDATAADDEDTODEX 271
+#define STRINGID_ITISRAINING 272
+#define STRINGID_SANDSTORMISRAGING 273
+#define STRINGID_CANTESCAPE2 274
+#define STRINGID_PKMNIGNORESASLEEP 275
+#define STRINGID_PKMNIGNOREDORDERS 276
+#define STRINGID_PKMNBEGANTONAP 277
+#define STRINGID_PKMNLOAFING 278
+#define STRINGID_PKMNWONTOBEY 279
+#define STRINGID_PKMNTURNEDAWAY 280
+#define STRINGID_PKMNPRETENDNOTNOTICE 281
+#define STRINGID_ENEMYABOUTTOSWITCHPKMN 282
+#define STRINGID_CREPTCLOSER 283
+#define STRINGID_CANTGETCLOSER 284
+#define STRINGID_PKMNWATCHINGCAREFULLY 285
+#define STRINGID_PKMNCURIOUSABOUTX 286
+#define STRINGID_PKMNENTHRALLEDBYX 287
+#define STRINGID_PKMNIGNOREDX 288
+#define STRINGID_THREWPOKEBLOCKATPKMN 289
+#define STRINGID_OUTOFSAFARIBALLS 290
+#define STRINGID_PKMNSITEMCUREDPARALYSIS 291
+#define STRINGID_PKMNSITEMCUREDPOISON 292
+#define STRINGID_PKMNSITEMHEALEDBURN 293
+#define STRINGID_PKMNSITEMDEFROSTEDIT 294
+#define STRINGID_PKMNSITEMWOKEIT 295
+#define STRINGID_PKMNSITEMSNAPPEDOUT 296
+#define STRINGID_PKMNSITEMCUREDPROBLEM 297
+#define STRINGID_PKMNSITEMRESTOREDHEALTH 298
+#define STRINGID_PKMNSITEMRESTOREDPP 299
+#define STRINGID_PKMNSITEMRESTOREDSTATUS 300
+#define STRINGID_PKMNSITEMRESTOREDHPALITTLE 301
+#define STRINGID_ITEMALLOWSONLYYMOVE 302
+#define STRINGID_PKMNHUNGONWITHX 303
+#define STRINGID_EMPTYSTRING3 304
+#define STRINGID_PKMNSXPREVENTSBURNS 305
+#define STRINGID_PKMNSXBLOCKSY 306
+#define STRINGID_PKMNSXRESTOREDHPALITTLE2 307
+#define STRINGID_PKMNSXWHIPPEDUPSANDSTORM 308
+#define STRINGID_PKMNSXPREVENTSYLOSS 309
+#define STRINGID_PKMNSXINFATUATEDY 310
+#define STRINGID_PKMNSXMADEYINEFFECTIVE 311
+#define STRINGID_PKMNSXCUREDYPROBLEM 312
+#define STRINGID_ITSUCKEDLIQUIDOOZE 313
+#define STRINGID_PKMNTRANSFORMED 314
+#define STRINGID_ELECTRICITYWEAKENED 315
+#define STRINGID_FIREWEAKENED 316
+#define STRINGID_PKMNHIDUNDERWATER 317
+#define STRINGID_PKMNSPRANGUP 318
+#define STRINGID_HMMOVESCANTBEFORGOTTEN 319
+#define STRINGID_XFOUNDONEY 320
+#define STRINGID_PLAYERDEFEATEDTRAINER1 321
+#define STRINGID_SOOTHINGAROMA 322
+#define STRINGID_ITEMSCANTBEUSEDNOW 323
+#define STRINGID_FORXCOMMAYZ 324
+#define STRINGID_USINGXTHEYOFZN 325
+#define STRINGID_PKMNUSEDXTOGETPUMPED 326
+#define STRINGID_PKMNSXMADEYUSELESS 327
+#define STRINGID_PKMNTRAPPEDBYSANDTOMB 328
+#define STRINGID_EMPTYSTRING4 329
+#define STRINGID_ABOOSTED 330
+#define STRINGID_PKMNSXINTENSIFIEDSUN 331
+#define STRINGID_PKMNMAKESGROUNDMISS 332
+#define STRINGID_YOUTHROWABALLNOWRIGHT 333
+#define STRINGID_PKMNSXTOOKATTACK 334
+#define STRINGID_PKMNCHOSEXASDESTINY 335
+#define STRINGID_PKMNLOSTFOCUS 336
+#define STRINGID_USENEXTPKMN 337
+#define STRINGID_PKMNFLEDUSINGITS 338
+#define STRINGID_PKMNFLEDUSING 339
+#define STRINGID_PKMNWASDRAGGEDOUT 340
+#define STRINGID_PREVENTEDFROMWORKING 341
+#define STRINGID_PKMNSITEMNORMALIZEDSTATUS 342
+#define STRINGID_TRAINER1USEDITEM 343
+#define STRINGID_BOXISFULL 344
+#define STRINGID_PKMNAVOIDEDATTACK 345
+#define STRINGID_PKMNSXMADEITINEFFECTIVE 346
+#define STRINGID_PKMNSXPREVENTSFLINCHING 347
+#define STRINGID_PKMNALREADYHASBURN 348
+#define STRINGID_STATSWONTDECREASE2 349
+#define STRINGID_PKMNSXBLOCKSY2 350
+#define STRINGID_PKMNSXWOREOFF 351
+#define STRINGID_PKMNRAISEDDEFALITTLE 352
+#define STRINGID_PKMNRAISEDSPDEFALITTLE 353
+#define STRINGID_THEWALLSHATTERED 354
+#define STRINGID_PKMNSXPREVENTSYSZ 355
+#define STRINGID_PKMNSXCUREDITSYPROBLEM 356
+#define STRINGID_ATTACKERCANTESCAPE 357
+#define STRINGID_PKMNOBTAINEDX 358
+#define STRINGID_PKMNOBTAINEDX2 359
+#define STRINGID_PKMNOBTAINEDXYOBTAINEDZ 360
+#define STRINGID_BUTNOEFFECT 361
+#define STRINGID_PKMNSXHADNOEFFECTONY 362
+#define STRINGID_TWOENEMIESDEFEATED 363
+#define STRINGID_TRAINER2LOSETEXT 364
+#define STRINGID_PKMNINCAPABLEOFPOWER 365
+#define STRINGID_GLINTAPPEARSINEYE 366
+#define STRINGID_PKMNGETTINGINTOPOSITION 367
+#define STRINGID_PKMNBEGANGROWLINGDEEPLY 368
+#define STRINGID_PKMNEAGERFORMORE 369
+#define STRINGID_DEFEATEDOPPONENTBYREFEREE 370
+#define STRINGID_LOSTTOOPPONENTBYREFEREE 371
+#define STRINGID_TIEDOPPONENTBYREFEREE 372
+#define STRINGID_QUESTIONFORFEITMATCH 373
+#define STRINGID_FORFEITEDMATCH 374
+#define STRINGID_PKMNTRANSFERREDSOMEONESPC 375
+#define STRINGID_PKMNTRANSFERREDLANETTESPC 376
+#define STRINGID_PKMNBOXSOMEONESPCFULL 377
+#define STRINGID_PKMNBOXLANETTESPCFULL 378
+#define STRINGID_TRAINER1WINTEXT 379
+#define STRINGID_TRAINER2WINTEXT 380
+
+#endif // GUARD_BATTLE_STRING_IDS_H
diff --git a/include/battle_util.h b/include/battle_util.h
index f47b00b2c..15fa39d1a 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -11,7 +11,7 @@
#define BS_GET_OPPONENT2 14
void TryClearRageStatuses(void);
-void BattleScriptPush(u8* BS_ptr);
+void BattleScriptPush(const u8* BS_ptr);
void PressurePPLoseOnUsingImprision(u8 bankAtk);
void PressurePPLoseOnUsingPerishSong(u8 bankAtk);
void sub_80155A4(u8);
@@ -22,7 +22,7 @@ void ResetSentPokesToOpponentValue(void);
void sub_8015740(u8 bank);
void sub_80157C4(u8 bank);
bool8 HandleWishPerishSongOnTurnEnd(void);
-void BattleScriptExecute(u8* BS_ptr);
+void BattleScriptExecute(const u8* BS_ptr);
void BattleScriptPushCursorAndCallback(u8* BS_ptr);
u8 IsMonDisobedient(void);
diff --git a/include/ewram.h b/include/ewram.h
index 36081dd2a..6f42925c1 100644
--- a/include/ewram.h
+++ b/include/ewram.h
@@ -9,7 +9,7 @@ extern u8 gSharedMem[];
// dupes can be determined to be the same, they will be deliberate
// seperated.
#define eWeatherPaletteData (*(struct WeatherPaletteData *)gSharedMem)
-#define BATTLE_STRUCT ((struct BattleStruct *) (gSharedMem + 0x0))
+#define gBattleStruct ((struct BattleStruct *) (gSharedMem + 0x0))
#define ewram0_2 (*(struct Struct2000000 *)(gSharedMem + 0x0))
#define namingScreenData (*(struct NamingScreenData *)(gSharedMem + 0x0))
#define ewramBerryPic (gSharedMem + 0x0)
diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c
index 990535b4e..b00c35312 100644
--- a/src/battle/battle_2.c
+++ b/src/battle/battle_2.c
@@ -87,8 +87,8 @@ extern u8 gMultiHitCounter;
extern u8 gActionForBanks[];
extern u16 gUnknown_02024C2C[];
extern u16 gLastUsedMove[];
-extern u16 gMoveHitWith[];
-extern u16 gUnknown_02024C44[];
+extern u16 gLastLandedMoves[];
+extern u16 gLastHitByType[];
extern u16 gUnknown_02024C4C[];
extern u16 gLockedMoves[];
extern u8 gUnknown_02024C5C[];
@@ -301,8 +301,8 @@ void sub_800E9EC(void)
if (species != SPECIES_EGG && hp == 0)
r6 |= 3 << i * 2;
}
- BATTLE_STRUCT->unk2 = r6;
- BATTLE_STRUCT->unk3 = r6 >> 8;
+ gBattleStruct->unk2 = r6;
+ gBattleStruct->unk3 = r6 >> 8;
}
void sub_800EAAC(void)
@@ -398,11 +398,11 @@ void sub_800EC9C(void)
{
if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC())
{
- BATTLE_STRUCT->unk0 = 1;
- BATTLE_STRUCT->unk1 = 1;
+ gBattleStruct->unk0 = 1;
+ gBattleStruct->unk1 = 1;
sub_800E9EC();
sub_800EAAC();
- SendBlock(bitmask_all_link_players_but_self(), BATTLE_STRUCT, 32);
+ SendBlock(bitmask_all_link_players_but_self(), gBattleStruct, 32);
gBattleCommunication[0] = 1;
}
}
@@ -458,7 +458,7 @@ void sub_800EC9C(void)
gTasks[taskId].data[1] = 0x10E;
gTasks[taskId].data[2] = 0x5A;
gTasks[taskId].data[5] = 0;
- gTasks[taskId].data[3] = BATTLE_STRUCT->unk2 | (BATTLE_STRUCT->unk3 << 8);
+ gTasks[taskId].data[3] = gBattleStruct->unk2 | (gBattleStruct->unk3 << 8);
gTasks[taskId].data[4] = gBlockRecvBuffer[enemyId][1];
gBattleCommunication[0]++;
}
@@ -641,8 +641,8 @@ void sub_800F298(void)
case 0:
if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC())
{
- BATTLE_STRUCT->unk0 = 1;
- BATTLE_STRUCT->unk1 = 1;
+ gBattleStruct->unk0 = 1;
+ gBattleStruct->unk1 = 1;
sub_800E9EC();
sub_800EAAC();
SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x20);
@@ -1579,8 +1579,8 @@ void sub_8010874(void)
gDisableStructs[i].isFirstTurn= 2;
gUnknown_02024C70[i] = 0;
gLastUsedMove[i] = 0;
- gMoveHitWith[i] = 0;
- gUnknown_02024C44[i] = 0;
+ gLastLandedMoves[i] = 0;
+ gLastHitByType[i] = 0;
gUnknown_02024C4C[i] = 0;
gUnknown_02024C5C[i] = 0xFF;
gLockedMoves[i] = 0;
@@ -1664,7 +1664,7 @@ void sub_8010874(void)
}
}
-void SwitchInClearStructs(void)
+void SwitchInClearSetData(void)
{
struct DisableStruct sp0 = gDisableStructs[gActiveBank];
s32 i;
@@ -1732,8 +1732,8 @@ void SwitchInClearStructs(void)
gDisableStructs[gActiveBank].isFirstTurn= 2;
gLastUsedMove[gActiveBank] = 0;
- gMoveHitWith[gActiveBank] = 0;
- gUnknown_02024C44[gActiveBank] = 0;
+ gLastLandedMoves[gActiveBank] = 0;
+ gLastHitByType[gActiveBank] = 0;
gUnknown_02024C4C[gActiveBank] = 0;
gUnknown_02024C2C[gActiveBank] = 0;
gUnknown_02024C5C[gActiveBank] = 0xFF;
@@ -1796,8 +1796,8 @@ void UndoEffectsAfterFainting(void)
gDisableStructs[gActiveBank].isFirstTurn= 2;
gLastUsedMove[gActiveBank] = 0;
- gMoveHitWith[gActiveBank] = 0;
- gUnknown_02024C44[gActiveBank] = 0;
+ gLastLandedMoves[gActiveBank] = 0;
+ gLastHitByType[gActiveBank] = 0;
gUnknown_02024C4C[gActiveBank] = 0;
gUnknown_02024C2C[gActiveBank] = 0;
gUnknown_02024C5C[gActiveBank] = 0xFF;
@@ -4222,7 +4222,7 @@ void CheckFocusPunch_ClearVarsBeforeTurnStarts(void)
}
gDynamicBasePower = 0;
- BATTLE_STRUCT->dynamicMoveType = 0;
+ gBattleStruct->dynamicMoveType = 0;
gBattleMainFunc = RunTurnActionsFunctions;
gBattleCommunication[3] = 0;
gBattleCommunication[4] = 0;
@@ -4235,7 +4235,7 @@ static void RunTurnActionsFunctions(void)
if (gBattleOutcome != 0)
gCurrentActionFuncId = 12;
- BATTLE_STRUCT->unk16057 = gCurrentTurnActionNumber;
+ gBattleStruct->unk16057 = gCurrentTurnActionNumber;
gUnknown_081FA640[gCurrentActionFuncId]();
if (gCurrentTurnActionNumber >= gNoOfAllBanks) // everyone did their actions, turn finished
@@ -4245,7 +4245,7 @@ static void RunTurnActionsFunctions(void)
}
else
{
- if (BATTLE_STRUCT->unk16057 != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another bank
+ if (gBattleStruct->unk16057 != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another bank
{
gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING);
gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE);
@@ -4270,7 +4270,7 @@ void HandleEndTurn_BattleWon(void)
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
{
- BattleMusicStop();
+ BattleStopLowHpSound();
gBattlescriptCurrInstr = BattleScript_LocalTrainerBattleWon;
switch (gTrainers[gTrainerBattleOpponent].trainerClass)
@@ -5378,8 +5378,8 @@ void HandleAction_ActionFinished(void)
gBattleMoveDamage = 0;
ewram16002 = 0;
ewram160A1 = 0;
- gMoveHitWith[gBankAttacker] = 0;
- gUnknown_02024C44[gBankAttacker] = 0;
+ gLastLandedMoves[gBankAttacker] = 0;
+ gLastHitByType[gBankAttacker] = 0;
eDynamicMoveType = 0;
gDynamicBasePower = 0;
ewram1600C = 0;
diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c
index 6b048f0ab..3763fc309 100644
--- a/src/battle/battle_4.c
+++ b/src/battle/battle_4.c
@@ -1,5 +1,8 @@
#include "global.h"
#include "battle.h"
+#include "battle_message.h"
+#include "battle_string_ids.h"
+#include "battle_script_commands.h"
#include "battle_util.h"
#include "constants/battle_move_effects.h"
#include "constants/moves.h"
@@ -22,22 +25,89 @@
#include "pokemon_summary_screen.h"
#include "naming_screen.h"
#include "ewram.h"
+#include "util.h"
+
+// TODO: put this into battle_controllers.h
+
+#define RET_VALUE_LEVELLED_UP 11
+
+enum
+{
+ CONTROLLER_GETMONDATA,
+ CONTROLLER_GETRAWMONDATA,
+ CONTROLLER_SETMONDATA,
+ CONTROLLER_SETRAWMONDATA,
+ CONTROLLER_LOADMONSPRITE,
+ CONTROLLER_SWITCHINANIM,
+ CONTROLLER_RETURNMONTOBALL,
+ CONTROLLER_DRAWTRAINERPIC,
+ CONTROLLER_TRAINERSLIDE,
+ CONTROLLER_TRAINERSLIDEBACK,
+ CONTROLLER_FAINTANIMATION,
+ CONTROLLER_PALETTEFADE,
+ CONTROLLER_SUCCESSBALLTHROWANIM,
+ CONTROLLER_BALLTHROWANIM,
+ CONTROLLER_PAUSE,
+ CONTROLLER_MOVEANIMATION,
+ CONTROLLER_PRINTSTRING,
+ CONTROLLER_PRINTSTRINGPLAYERONLY,
+ CONTROLLER_CHOOSEACTION,
+ CONTROLLER_UNKNOWNYESNOBOX,
+ CONTROLLER_CHOOSEMOVE,
+ CONTROLLER_OPENBAG,
+ CONTROLLER_CHOOSEPOKEMON,
+ CONTROLLER_23,
+ CONTROLLER_HEALTHBARUPDATE,
+ CONTROLLER_EXPUPDATE,
+ CONTROLLER_STATUSICONUPDATE,
+ CONTROLLER_STATUSANIMATION,
+ CONTROLLER_STATUSXOR,
+ CONTROLLER_DATATRANSFER,
+ CONTROLLER_DMA3TRANSFER,
+ CONTROLLER_31,
+ CONTROLLER_32,
+ CONTROLLER_TWORETURNVALUES,
+ CONTROLLER_CHOSENMONRETURNVALUE,
+ CONTROLLER_ONERETURNVALUE,
+ CONTROLLER_ONERETURNVALUE_DUPLICATE,
+ CONTROLLER_37,
+ CONTROLLER_38,
+ CONTROLLER_39,
+ CONTROLLER_40,
+ CONTROLLER_HITANIMATION,
+ CONTROLLER_42,
+ CONTROLLER_EFFECTIVENESSSOUND,
+ CONTROLLER_PLAYFANFAREORBGM,
+ CONTROLLER_FAINTINGCRY,
+ CONTROLLER_INTROSLIDE,
+ CONTROLLER_INTROTRAINERBALLTHROW,
+ CONTROLLER_DRAWPARTYSTATUSSUMMARY,
+ CONTROLLER_49,
+ CONTROLLER_50,
+ CONTROLLER_SPRITEINVISIBILITY,
+ CONTROLLER_BATTLEANIMATION,
+ CONTROLLER_LINKSTANDBYMSG,
+ CONTROLLER_RESETACTIONMOVESELECTION,
+ CONTROLLER_55,
+ /*new controllers should go here*/
+ CONTROLLER_TERMINATOR_NOP,
+ CONTROLLER_CMDS_COUNT
+};
//extern needed variables
extern u8 gCritMultiplier;
extern s32 gBattleMoveDamage;
-extern u32 gStatuses3[4];
+extern u32 gStatuses3[BATTLE_BANKS_COUNT];
extern u16 gBattleTypeFlags;
-extern const u32 gBitTable[];
extern const struct BaseStats gBaseStats[];
-extern struct BattleEnigmaBerry gEnigmaBerries[4];
-extern struct BattlePokemon gBattleMons[4];
+extern struct BattleEnigmaBerry gEnigmaBerries[BATTLE_BANKS_COUNT];
+extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
extern u8 gActiveBank;
extern u32 gBattleExecBuffer;
extern u8 gNoOfAllBanks;
-extern u16 gBattlePartyID[4];
-extern u8 gBanksByTurnOrder[4];
-extern u8 gActionsByTurnOrder[4];
+extern u16 gBattlePartyID[BATTLE_BANKS_COUNT];
+extern u8 gBanksByTurnOrder[BATTLE_BANKS_COUNT];
+extern u8 gActionsByTurnOrder[BATTLE_BANKS_COUNT];
extern u16 gCurrentMove;
extern u8 gLastUsedAbility;
extern u16 gBattleWeather;
@@ -57,23 +127,23 @@ extern u8 gBattleTerrain;
extern u16 gTrainerBattleOpponent;
extern u8 gBankAttacker;
extern u8 gBankTarget;
-extern u8* gBattlescriptCurrInstr;
+extern const u8* gBattlescriptCurrInstr;
extern u8 gCurrMovePos;
extern u8 gCurrentActionFuncId;
extern u32 gHitMarker;
extern u8 gBattleMoveFlags;
extern u8 gBattleCommunication[];
-extern u16 gMoveHitWith[4];
-extern u16 gUnknown_02024C44[4];
+extern u16 gLastLandedMoves[4];
+extern u16 gLastHitByType[4];
extern u8 gStringBank;
extern u16 gDynamicBasePower;
extern const u8 gTypeEffectiveness[];
extern u16 gLastUsedItem;
extern u16 gBattleMovePower;
-extern s32 gHP_dealt;
-extern s32 gTakenDmg[4];
-extern u8 gTakenDmgBanks[4];
-extern const u16 gMissStrings[];
+extern s32 gHpDealt;
+extern s32 gTakenDmg[BATTLE_BANKS_COUNT];
+extern u8 gTakenDmgBanks[BATTLE_BANKS_COUNT];
+extern const u16 gMissStringIds[];
extern u8 gSentPokesToOpponent[2];
extern u8 gBank1;
extern u16 gExpShareExp;
@@ -98,32 +168,44 @@ extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one
extern u8 gCurrentTurnActionNumber;
extern u16 gTrappingMoves[];
+extern u8 BattleScript_MoveEffectSleep[];
+extern u8 BattleScript_MoveEffectPoison[];
+extern u8 BattleScript_MoveEffectBurn[];
+extern u8 BattleScript_MoveEffectFreeze[];
+extern u8 BattleScript_MoveEffectParalysis[];
+extern u8 BattleScript_MoveEffectToxic[];
+extern u8 BattleScript_MoveEffectConfusion[];
+extern u8 BattleScript_MoveEffectUproar[];
+extern u8 BattleScript_MoveEffectWrap[];
+extern u8 BattleScript_MoveEffectPayDay[];
+extern u8 BattleScript_MoveEffectRecoil33[];
+
//extern functions
u8 AtkCanceller_UnableToUseMove(void);
void PressurePPLose(u8 bank_atk, u8 bank_def, u16 move);
void CancelMultiTurnMoves(u8 bank);
-void BattleScriptPush(u8* BS_ptr);
+void BattleScriptPush(const u8* BS_ptr);
void BattleScriptPushCursor(void);
void RecordAbilityBattle(u8 bank, u8 ability);
void RecordItemBattle(u8 bank, u8 holdEffect);
static bool8 IsTwoTurnsMove(u16 move);
-static void DestinyBondFlagUpdate(void);
-static void b_wonderguard_and_levitate(void);
+static void TrySetDestinyBondToHappen(void);
+static void CheckWonderGuardAndLevitate(void);
u8 GetBankIdentity(u8 bank);
u8 GetBankSide(u8 bank);
u8 GetBattleBank(u8 bankValue);
s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 bank_atk, u8 bank_def);
static u8 AttacksThisTurn(u8 bank, u16 move); //Note: returns 1 if it's a charging turn, otherwise 2
void UndoEffectsAfterFainting(void);
-void BattleMusicStop(void);
+void BattleStopLowHpSound(void);
void PlayBGM(u16 songID);
void MonGainEVs(struct Pokemon*, u16 defeatedSpecies);
extern u8 gBattleBufferB[4][0x200];
-void sub_80324F8(struct Pokemon*, u8 bank);
+void HandleLowHpMusicChange(struct Pokemon*, u8 bank);
void AdjustFriendship(struct Pokemon*, u8 value);
bool8 IsTradedMon(struct Pokemon*);
void BattleScriptPop(void);
-void SwitchInClearStructs(void);
+void SwitchInClearSetData(void);
u8* ConvertIntToDecimalStringN(u8*, s32, u8, u8);
u8 GetSetPokedexFlag(u16 nationalNum, u8 caseID);
u16 SpeciesToNationalPokedexNum(u16 species);
@@ -225,7 +307,7 @@ extern u8 BattleScript_SelectingImprisionedMoveInPalace[];
#define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8))
#define BS2ScriptReadPtr(ptr) ((void *)BS2ScriptRead32(ptr))
-#define TargetProtectAffected ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
+#define TARGET_PROTECT_AFFECTED ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
//array entries for battle communication
#define MOVE_EFFECT_BYTE 0x3
@@ -267,7 +349,7 @@ extern u8 BattleScript_SelectingImprisionedMoveInPalace[];
#define RecordAbilitySetField6(ability, fieldValue) \
(gLastUsedAbility = ability, gBattleCommunication[6] = fieldValue, RecordAbilityBattle(gBankTarget, ability))
-#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_physical.moveturnLostHP_special)))
+#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special)))
#define HP_ON_SWITCHOUT (((u16*)(ewram_addr + 0x160BC)))
@@ -344,7 +426,7 @@ static void atk45_playanimation(void);
static void atk46_playanimation2(void);
static void atk47_setgraphicalstatchangevalues(void);
static void atk48_playstatchangeanimation(void);
-static void atk49_moveend(void);
+void atk49_moveend(void);
static void atk4A_typecalc2(void);
static void atk4B_returnatktoball(void);
static void atk4C_getswitchedmondata(void);
@@ -408,7 +490,7 @@ static void atk85_stockpile(void);
static void atk86_stockpiletobasedamage(void);
static void atk87_stockpiletohpheal(void);
static void atk88_negativedamage(void);
-static u8 ChangeStatBuffs(s8, u8, u8, u8*);
+static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr);
static void atk89_statbuffchange(void);
static void atk8A_normalisebuffs(void);
static void atk8B_setbide(void);
@@ -521,7 +603,7 @@ static void atkF5_removeattackerstatus1(void);
static void atkF6_finishaction(void);
static void atkF7_finishturn(void);
-const BattleCmdFunc gBattleScriptingCommandsTable[] =
+void (* const gBattleScriptingCommandsTable[])(void) =
{
atk00_attackcanceler,
atk01_accuracycheck,
@@ -773,13 +855,13 @@ const BattleCmdFunc gBattleScriptingCommandsTable[] =
atkF7_finishturn,
};
-struct statFractions
+struct StatFractions
{
u8 dividend;
u8 divisor;
};
-static const struct statFractions gAccuracyStageRatios[] =
+static const struct StatFractions gAccuracyStageRatios[] =
{
{ 33, 100}, // -6
{ 36, 100}, // -5
@@ -796,25 +878,25 @@ static const struct statFractions gAccuracyStageRatios[] =
{ 3, 1}, // +6
};
-//The chance is 1/N for each stage.
-static const u16 gCriticalHitChance[] = {16, 8, 4, 3, 2};
+// The chance is 1/N for each stage.
+static const u16 sCriticalHitChance[] = {16, 8, 4, 3, 2};
-static const u32 gStatusFlagsForMoveEffects[] =
+static const u32 sStatusFlagsForMoveEffects[] =
{
0x00000000,
- 0x00000007,
- 0x00000008,
- 0x00000010,
- 0x00000020,
- 0x00000040,
- 0x00000080,
- 0x00000007,
- 0x00000008,
+ STATUS_SLEEP,
+ STATUS_POISON,
+ STATUS_BURN,
+ STATUS_FREEZE,
+ STATUS_PARALYSIS,
+ STATUS_TOXIC_POISON,
+ STATUS2_CONFUSION,
+ STATUS2_FLINCHED,
0x00000000,
- 0x00000070,
+ STATUS2_UPROAR,
0x00000000,
- 0x00001000,
- 0x0000E000,
+ STATUS2_MULTIPLETURNS,
+ STATUS2_WRAPPED,
0x00000000,
0x00000000,
0x00000000,
@@ -830,11 +912,11 @@ static const u32 gStatusFlagsForMoveEffects[] =
0x00000000,
0x00000000,
0x00000000,
- 0x00400000,
+ STATUS2_RECHARGE,
0x00000000,
0x00000000,
- 0x04000000,
- 0x08000000,
+ STATUS2_ESCAPE_PREVENTION,
+ STATUS2_NIGHTMARE,
0x00000000,
0x00000000,
0x00000000,
@@ -854,7 +936,7 @@ static const u32 gStatusFlagsForMoveEffects[] =
0x00000000,
0x00000000,
0x00000000,
- 0x00000C00,
+ STATUS2_LOCK_CONFUSE,
0x00000000,
0x00000000,
0x00000000,
@@ -863,18 +945,6 @@ static const u32 gStatusFlagsForMoveEffects[] =
0x00000000
};
-extern u8 BattleScript_MoveEffectSleep[];
-extern u8 BattleScript_MoveEffectPoison[];
-extern u8 BattleScript_MoveEffectBurn[];
-extern u8 BattleScript_MoveEffectFreeze[];
-extern u8 BattleScript_MoveEffectParalysis[];
-extern u8 BattleScript_MoveEffectToxic[];
-extern u8 BattleScript_MoveEffectConfusion[];
-extern u8 BattleScript_MoveEffectUproar[];
-extern u8 BattleScript_MoveEffectWrap[];
-extern u8 BattleScript_MoveEffectPayDay[];
-extern u8 BattleScript_MoveEffectRecoil33[];
-
u8* const gMoveEffectBS_Ptrs[] =
{
BattleScript_MoveEffectSleep,
@@ -920,17 +990,25 @@ 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_SPEED};
+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};
-static const u16 sUnknown_081FACFE[] = //banned moves to copy
+#define MIMIC_FORBIDDEN_END 0xFFFE
+#define METRONOME_FORBIDDEN_END 0xFFFF
+#define ASSIST_FORBIDDEN_END 0xFFFF
+
+static const u16 sMovesForbiddenToCopy[] =
{
MOVE_METRONOME,
MOVE_STRUGGLE,
MOVE_SKETCH,
MOVE_MIMIC,
- 0xFFFE,
+ MIMIC_FORBIDDEN_END,
MOVE_COUNTER,
MOVE_MIRROR_COAT,
MOVE_PROTECT,
@@ -945,10 +1023,10 @@ static const u16 sUnknown_081FACFE[] = //banned moves to copy
MOVE_COVET,
MOVE_TRICK,
MOVE_FOCUS_PUNCH,
- 0xFFFF
+ METRONOME_FORBIDDEN_END
};
-static const u8 sUnknown_081FAD26[] = //reversal+flail HP thresholds to power
+static const u8 sFlailHpScaleToPowerTable[] = //reversal+flail HP thresholds to power
{
1, 200,
4, 150,
@@ -972,16 +1050,16 @@ static const u16 sNaturePowerMoves[] =
MOVE_SWIFT
};
-//weight-based damage table for Low Kick
-//format: min. weight (hectograms), base power
-static const u16 sWeightDamage[] =
+// weight-based damage table for Low Kick
+// format: min. weight (hectograms), base power
+static const u16 sWeightToDamageTable[] =
{
100, 20,
250, 40,
500, 60,
1000, 80,
2000, 100,
- -1, -1
+ 0xFFFF, 0xFFFF
};
static const u16 sPickupItems[] =
@@ -1006,23 +1084,24 @@ static const u8 sTerrainToType[] =
TYPE_WATER, // underwater
TYPE_WATER, // water
TYPE_WATER, // pond water
- TYPE_ROCK , // rock
- TYPE_ROCK , // cave
+ TYPE_ROCK, // rock
+ TYPE_ROCK, // cave
TYPE_NORMAL, // building
TYPE_NORMAL, // plain
};
static const u8 sBallCatchBonuses[] =
{
- 20, 15, 10, 15 //Ultra, Great, Poke, Safari
+ 20, 15, 10, 15 // Ultra, Great, Poke, Safari
};
static void atk00_attackcanceler(void)
{
- int i;
- if (gBattleOutcome)
+ s32 i;
+
+ if (gBattleOutcome != 0)
{
- gCurrentActionFuncId = 0xC;
+ gCurrentActionFuncId = ACTION_FINISHED;
return;
}
if (gBattleMons[gBankAttacker].hp == 0 && !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
@@ -1033,7 +1112,7 @@ static void atk00_attackcanceler(void)
}
if (AtkCanceller_UnableToUseMove())
return;
- if (AbilityBattleEffects(2, gBankTarget, 0, 0, 0))
+ if (AbilityBattleEffects(ABILITYEFFECT_MOVES_BLOCK, gBankTarget, 0, 0, 0))
return;
if (!gBattleMons[gBankAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE && !(gHitMarker & 0x800200)
&& !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS))
@@ -1042,22 +1121,27 @@ static void atk00_attackcanceler(void)
gBattleMoveFlags |= MOVESTATUS_MISSED;
return;
}
+
gHitMarker &= ~(HITMARKER_x800000);
+
if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS))
{
- u8 disobedient = IsMonDisobedient();
- asm("":::"r0"); //It's impossible to match
- asm("":::"r1");
- if ((disobedient))
+ i = IsMonDisobedient(); // why use the 'i' variable...?
+ switch (i)
{
- if (disobedient == 2)
- gHitMarker |= HITMARKER_OBEYS;
- else
- gBattleMoveFlags |= MOVESTATUS_MISSED;
+ case 0:
+ break;
+ case 2:
+ gHitMarker |= HITMARKER_OBEYS;
+ return;
+ default:
+ gBattleMoveFlags |= MOVESTATUS_MISSED;
return;
}
}
+
gHitMarker |= HITMARKER_OBEYS;
+
if (gProtectStructs[gBankTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGICCOAT_AFFECTED)
{
PressurePPLose(gBankAttacker, gBankTarget, MOVE_MAGIC_COAT);
@@ -1066,18 +1150,20 @@ static void atk00_attackcanceler(void)
gBattlescriptCurrInstr = BattleScript_MagicCoatBounce;
return;
}
+
for (i = 0; i < gNoOfAllBanks; i++)
{
if ((gProtectStructs[gBanksByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED)
{
PressurePPLose(gBankAttacker, gBanksByTurnOrder[i], MOVE_SNATCH);
gProtectStructs[gBanksByTurnOrder[i]].stealMove = 0;
- BATTLE_STRUCT->scriptingActive = gBanksByTurnOrder[i];
+ gBattleStruct->scriptingActive = gBanksByTurnOrder[i];
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_SnatchedMove;
return;
}
}
+
if (gSpecialStatuses[gBankTarget].lightningRodRedirected)
{
gSpecialStatuses[gBankTarget].lightningRodRedirected = 0;
@@ -1086,14 +1172,14 @@ static void atk00_attackcanceler(void)
gBattlescriptCurrInstr = BattleScript_TookAttack;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
- else if (TargetProtectAffected
+ else if (TARGET_PROTECT_AFFECTED
&& (gCurrentMove != MOVE_CURSE || (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST))
&& ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS))))
{
CancelMultiTurnMoves(gBankAttacker);
gBattleMoveFlags |= MOVESTATUS_MISSED;
- gMoveHitWith[gBankTarget] = 0;
- gUnknown_02024C44[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
+ gLastHitByType[gBankTarget] = 0;
gBattleCommunication[6] = 1;
gBattlescriptCurrInstr++;
}
@@ -1105,25 +1191,25 @@ static void atk00_attackcanceler(void)
static void JumpIfMoveFailed(u8 adder, u16 move)
{
- void* to_store = gBattlescriptCurrInstr + adder;
+ const u8 *BS_ptr = gBattlescriptCurrInstr + adder;
if (gBattleMoveFlags & MOVESTATUS_NOEFFECT)
{
- gMoveHitWith[gBankTarget] = 0;
- gUnknown_02024C44[gBankTarget] = 0;
- to_store = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ gLastLandedMoves[gBankTarget] = 0;
+ gLastHitByType[gBankTarget] = 0;
+ BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
- DestinyBondFlagUpdate();
- if (AbilityBattleEffects(3, gBankTarget, 0, 0, move))
+ TrySetDestinyBondToHappen();
+ if (AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBankTarget, 0, 0, move))
return;
}
- gBattlescriptCurrInstr = to_store;
+ gBattlescriptCurrInstr = BS_ptr;
}
static void atk40_jumpifaffectedbyprotect(void)
{
- if (TargetProtectAffected)
+ if (TARGET_PROTECT_AFFECTED)
{
gBattleMoveFlags |= MOVESTATUS_MISSED;
JumpIfMoveFailed(5, 0);
@@ -1137,13 +1223,13 @@ static void atk40_jumpifaffectedbyprotect(void)
static bool8 JumpIfMoveAffectedByProtect(u16 move)
{
- bool8 affected = 0;
- if (TargetProtectAffected)
+ bool8 affected = FALSE;
+ if (TARGET_PROTECT_AFFECTED)
{
gBattleMoveFlags |= MOVESTATUS_MISSED;
JumpIfMoveFailed(7, move);
gBattleCommunication[6] = 1;
- affected = 1;
+ affected = TRUE;
}
return affected;
}
@@ -1162,6 +1248,7 @@ static bool8 AccuracyCalcHelper(u16 move)
JumpIfMoveFailed(7, move);
return TRUE;
}
+
gHitMarker &= ~HITMARKER_IGNORE_ON_AIR;
if (!(gHitMarker & HITMARKER_IGNORE_UNDERGROUND) && gStatuses3[gBankTarget] & STATUS3_UNDERGROUND)
@@ -1170,6 +1257,7 @@ static bool8 AccuracyCalcHelper(u16 move)
JumpIfMoveFailed(7, move);
return TRUE;
}
+
gHitMarker &= ~HITMARKER_IGNORE_UNDERGROUND;
if (!(gHitMarker & HITMARKER_IGNORE_UNDERWATER) && gStatuses3[gBankTarget] & STATUS3_UNDERWATER)
@@ -1178,6 +1266,7 @@ static bool8 AccuracyCalcHelper(u16 move)
JumpIfMoveFailed(7, move);
return TRUE;
}
+
gHitMarker &= ~HITMARKER_IGNORE_UNDERWATER;
if ((WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) && gBattleMoves[move].effect == EFFECT_THUNDER)
@@ -1186,12 +1275,14 @@ static bool8 AccuracyCalcHelper(u16 move)
JumpIfMoveFailed(7, move);
return TRUE;
}
+
return FALSE;
}
static void atk01_accuracycheck(void)
{
u16 move = T2_READ_16(gBattlescriptCurrInstr + 5);
+
if (move == 0xFFFE || move == 0xFFFF)
{
if (gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBankTarget].bankWithSureHit == gBankAttacker)
@@ -1203,13 +1294,14 @@ static void atk01_accuracycheck(void)
}
else
{
- u8 type; s8 buff; u8 MoveAcc; u16 calc; u8 hold_effect; u8 quality;
- if (move == 0) {move = gCurrentMove;}
+ u8 type, moveAcc, holdEffect, quality;
+ s8 buff;
+ u16 calc;
- if (BATTLE_STRUCT->dynamicMoveType)
- type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
- else
- type = gBattleMoves[move].type;
+ if (move == 0)
+ move = gCurrentMove;
+
+ GET_MOVE_TYPE(move, type);
if (JumpIfMoveAffectedByProtect(move))
return;
@@ -1227,47 +1319,52 @@ static void atk01_accuracycheck(void)
buff = acc + 6 - gBattleMons[gBankTarget].statStages[STAT_STAGE_EVASION];
}
- if (buff < 0) {buff = 0;}
- if (buff > 0xC) {buff = 0xC;}
+ if (buff < 0)
+ buff = 0;
+ if (buff > 0xC)
+ buff = 0xC;
- MoveAcc = gBattleMoves[move].accuracy;
- //check Thunder on sunny weather
+ moveAcc = gBattleMoves[move].accuracy;
+ // check Thunder on sunny weather
if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && gBattleMoves[move].effect == EFFECT_THUNDER)
- MoveAcc = 50;
+ moveAcc = 50;
- calc = gAccuracyStageRatios[buff].dividend * MoveAcc;
+ calc = gAccuracyStageRatios[buff].dividend * moveAcc;
calc /= gAccuracyStageRatios[buff].divisor;
if (gBattleMons[gBankAttacker].ability == ABILITY_COMPOUND_EYES)
- calc = (calc * 130) / 100; //1.3 compound eyes boost
+ calc = (calc * 130) / 100; // 1.3 compound eyes boost
if (WEATHER_HAS_EFFECT && gBattleMons[gBankTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORM_ANY)
- calc = (calc * 80) / 100; //1.2 sand veil loss;
+ calc = (calc * 80) / 100; // 1.2 sand veil loss;
if (gBattleMons[gBankAttacker].ability == ABILITY_HUSTLE && type < 9)
- calc = (calc * 80) / 100; //1.2 hustle loss;
+ calc = (calc * 80) / 100; // 1.2 hustle loss;
if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY)
- hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam;
+ {
+ holdEffect = gEnigmaBerries[gBankTarget].holdEffect;
+ quality = gEnigmaBerries[gBankTarget].holdEffectParam;
+ }
else
{
- hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item);
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item);
quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item);
}
gStringBank = gBankTarget;
- if (hold_effect == HOLD_EFFECT_EVASION_UP)
+ if (holdEffect == HOLD_EFFECT_EVASION_UP)
calc = (calc * (100 - quality)) / 100;
- //final calculation
+ // final calculation
if ((Random() % 100 + 1) > calc)
{
gBattleMoveFlags |= MOVESTATUS_MISSED;
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && (gBattleMoves[move].target == 0x8 || gBattleMoves[move].target == 0x20))
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE &&
+ (gBattleMoves[move].target == 0x8 || gBattleMoves[move].target == 0x20))
gBattleCommunication[6] = 2;
else
gBattleCommunication[6] = 0;
- b_wonderguard_and_levitate();
-
+ CheckWonderGuardAndLevitate();
}
JumpIfMoveFailed(7, move);
}
@@ -1288,31 +1385,35 @@ static void atk02_attackstring(void)
static void atk03_ppreduce(void)
{
- int to_deduct = 1;
+ s32 ppToDeduct = 1;
+
if (gBattleExecBuffer)
return;
+
if (!gSpecialStatuses[gBankAttacker].flag20)
{
switch (gBattleMoves[gCurrentMove].target)
{
case TARGET_FOES_AND_ALLY:
- to_deduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBankAttacker, ABILITY_PRESSURE, 0, 0);
+ ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBankAttacker, ABILITY_PRESSURE, 0, 0);
break;
case TARGET_BOTH:
case TARGET_OPPONENTS_FIELD:
- to_deduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIZE, gBankAttacker, ABILITY_PRESSURE, 0, 0);
+ ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIZE, gBankAttacker, ABILITY_PRESSURE, 0, 0);
break;
default:
if (gBankAttacker != gBankTarget && gBattleMons[gBankTarget].ability == ABILITY_PRESSURE)
- to_deduct++;
+ ppToDeduct++;
break;
}
}
+
if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBankAttacker].pp[gCurrMovePos])
{
gProtectStructs[gBankAttacker].notFirstStrike = 1;
- if (gBattleMons[gBankAttacker].pp[gCurrMovePos] > to_deduct)
- gBattleMons[gBankAttacker].pp[gCurrMovePos] -= to_deduct;
+
+ if (gBattleMons[gBankAttacker].pp[gCurrMovePos] > ppToDeduct)
+ gBattleMons[gBankAttacker].pp[gCurrMovePos] -= ppToDeduct;
else
gBattleMons[gBankAttacker].pp[gCurrMovePos] = 0;
@@ -1324,56 +1425,45 @@ static void atk03_ppreduce(void)
MarkBufferBankForExecution(gBankAttacker);
}
}
+
gHitMarker &= ~(HITMARKER_NO_PPDEDUCT);
gBattlescriptCurrInstr++;
}
static void atk04_critcalc(void)
{
- u8 hold_effect; u16 item; u16 crit_chance; int adderv3, adderv5, adderv6, adderv7, adderv8, adderv9, adderv10, adderv11; u16 adderv12;
+ u8 holdEffect;
+ u16 item, critChance;
+
item = gBattleMons[gBankAttacker].item;
+
if (item == ITEM_ENIGMA_BERRY)
- hold_effect = gEnigmaBerries[gBankAttacker].holdEffect;
+ holdEffect = gEnigmaBerries[gBankAttacker].holdEffect;
else
- hold_effect = ItemId_GetHoldEffect(item);
+ holdEffect = ItemId_GetHoldEffect(item);
gStringBank = gBankAttacker;
- if (gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY)
- adderv3 = 2;
- else
- adderv3 = 0;
-
- if (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL) {adderv3++;}
- adderv5 = adderv3;
- if (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK) {adderv5 = adderv3 + 1;}
-
- if (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK) {adderv5++;}
- adderv6 = adderv5;
- if (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL) {adderv6 = adderv5 + 1;}
-
- adderv7 = 0;
- if (hold_effect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBankAttacker].species == SPECIES_CHANSEY) {adderv7 = 1;}
- adderv8 = 2 * adderv7;
- adderv9 = 0;
- if (hold_effect == HOLD_EFFECT_STICK && gBattleMons[gBankAttacker].species == SPECIES_FARFETCHD) {adderv9 = 1;}
- adderv11 = 2 * adderv9;
- if (hold_effect == HOLD_EFFECT_SCOPE_LENS)
- {adderv10 = 1 + adderv6 + adderv8; adderv12 = adderv10 + adderv11;}
- else
- {adderv10 = adderv6 + adderv8; adderv12 = adderv10 + adderv11;}
-
- crit_chance = adderv12;
+ critChance = 2 * ((gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY) != 0)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL)
+ + (holdEffect == HOLD_EFFECT_SCOPE_LENS)
+ + 2 * (holdEffect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBankAttacker].species == SPECIES_CHANSEY)
+ + 2 * (holdEffect == HOLD_EFFECT_STICK && gBattleMons[gBankAttacker].species == SPECIES_FARFETCHD);
- if (crit_chance > 4) {crit_chance = 4;}
+ if (critChance > 4)
+ critChance = 4;
if ((gBattleMons[gBankTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBankTarget].ability != ABILITY_SHELL_ARMOR)
&& !(gStatuses3[gBankAttacker] & STATUS3_CANT_SCORE_A_CRIT)
&& !(gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE))
- && !(Random() % gCriticalHitChance[crit_chance]))
+ && !(Random() % sCriticalHitChance[critChance]))
gCritMultiplier = 2;
else
gCritMultiplier = 1;
+
gBattlescriptCurrInstr++;
}
@@ -1382,8 +1472,8 @@ static void atk05_damagecalc(void)
u16 side_hword = gSideAffecting[GetBankIdentity(gBankTarget) & 1];
gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove,
side_hword, gDynamicBasePower,
- BATTLE_STRUCT->dynamicMoveType, gBankAttacker, gBankTarget);
- gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier;
+ gBattleStruct->dynamicMoveType, gBankAttacker, gBankTarget);
+ gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleStruct->dmgMultiplier;
if (gStatuses3[gBankAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
gBattleMoveDamage *= 2;
@@ -1398,9 +1488,9 @@ void AI_CalcDmg(u8 BankAtk, u8 BankDef)
u16 side_hword = gSideAffecting[GetBankIdentity(BankDef) & 1];
gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[BankAtk], &gBattleMons[BankDef], gCurrentMove,
side_hword, gDynamicBasePower,
- BATTLE_STRUCT->dynamicMoveType, BankAtk, BankDef);
+ gBattleStruct->dynamicMoveType, BankAtk, BankDef);
gDynamicBasePower = 0;
- gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier;
+ gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleStruct->dmgMultiplier;
if (gStatuses3[BankAtk] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
gBattleMoveDamage *= 2;
@@ -1448,8 +1538,8 @@ static void atk06_typecalc(void)
u8 move_type;
if (gCurrentMove != MOVE_STRUGGLE)
{
- if (BATTLE_STRUCT->dynamicMoveType)
- move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ if (gBattleStruct->dynamicMoveType)
+ move_type = gBattleStruct->dynamicMoveType & 0x3F;
else
move_type = gBattleMoves[gCurrentMove].type;
@@ -1464,8 +1554,8 @@ static void atk06_typecalc(void)
{
gLastUsedAbility = gBattleMons[gBankTarget].ability;
gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED);
- gMoveHitWith[gBankTarget] = 0;
- gUnknown_02024C44[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
+ gLastHitByType[gBankTarget] = 0;
gBattleCommunication[6] = move_type;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
@@ -1501,8 +1591,8 @@ static void atk06_typecalc(void)
{
gLastUsedAbility = ABILITY_WONDER_GUARD;
gBattleMoveFlags |= MOVESTATUS_MISSED;
- gMoveHitWith[gBankTarget] = 0;
- gUnknown_02024C44[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
+ gLastHitByType[gBankTarget] = 0;
gBattleCommunication[6] = 3;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
@@ -1511,7 +1601,7 @@ static void atk06_typecalc(void)
}
gBattlescriptCurrInstr++;
}
-static void b_wonderguard_and_levitate(void)
+static void CheckWonderGuardAndLevitate(void)
{
u8 flags = 0;
int i = 0;
@@ -1520,8 +1610,8 @@ static void b_wonderguard_and_levitate(void)
if (gCurrentMove == MOVE_STRUGGLE || !gBattleMoves[gCurrentMove].power)
return;
- if (BATTLE_STRUCT->dynamicMoveType)
- move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ if (gBattleStruct->dynamicMoveType)
+ move_type = gBattleStruct->dynamicMoveType & 0x3F;
else
move_type = gBattleMoves[gCurrentMove].type;
@@ -1841,12 +1931,12 @@ static void atk09_attackanimation(void)
{
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_Pausex20;
- BATTLE_STRUCT->animTurn += 1;
- BATTLE_STRUCT->animTargetsHit += 1;
+ gBattleStruct->animTurn += 1;
+ gBattleStruct->animTargetsHit += 1;
}
else
{
- if ((gBattleMoves[gCurrentMove].target & TARGET_BOTH || gBattleMoves[gCurrentMove].target & TARGET_FOES_AND_ALLY || gBattleMoves[gCurrentMove].target & TARGET_DEPENDS) && BATTLE_STRUCT->animTargetsHit)
+ if ((gBattleMoves[gCurrentMove].target & TARGET_BOTH || gBattleMoves[gCurrentMove].target & TARGET_FOES_AND_ALLY || gBattleMoves[gCurrentMove].target & TARGET_DEPENDS) && gBattleStruct->animTargetsHit)
{
gBattlescriptCurrInstr++;
return;
@@ -1855,9 +1945,9 @@ static void atk09_attackanimation(void)
{
gActiveBank = gBankAttacker;
- EmitMoveAnimation(0, gCurrentMove, BATTLE_STRUCT->animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBankAttacker].friendship, &gDisableStructs[gBankAttacker]);
- BATTLE_STRUCT->animTurn += 1;
- BATTLE_STRUCT->animTargetsHit += 1;
+ EmitMoveAnimation(0, gCurrentMove, gBattleStruct->animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBankAttacker].friendship, &gDisableStructs[gBankAttacker]);
+ gBattleStruct->animTurn += 1;
+ gBattleStruct->animTargetsHit += 1;
MarkBufferBankForExecution(gBankAttacker);
gBattlescriptCurrInstr++;
}
@@ -1879,49 +1969,60 @@ static void atk0B_healthbarupdate(void)
{
if (gBattleExecBuffer)
return;
- if (gBattleMoveFlags & MOVESTATUS_NOEFFECT)
- goto END;
-
- gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
- if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
+ if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT))
{
- PrepareStringBattle(0x80, gActiveBank);
- goto END;
- }
+ gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
- EmitHealthBarUpdate(0, gBattleMoveDamage);
- MarkBufferBankForExecution(gActiveBank);
+ if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
+ {
+ PrepareStringBattle(0x80, gActiveBank);
+ }
+ else
+ {
+ // Emerald
+ /*
+ s16 healthValue;
- if (!GetBankSide(gActiveBank) && gBattleMoveDamage > 0)
- gBattleResults.unk5_0 = 1;
+ s32 currDmg = gBattleMoveDamage;
+ s32 maxPossibleDmgValue = 10000; // not present in R/S, ensures that huge damage values don't change sign
- END:
- gBattlescriptCurrInstr += 2;
+ if (currDmg <= maxPossibleDmgValue)
+ healthValue = currDmg;
+ else
+ healthValue = maxPossibleDmgValue;
+
+ EmitHealthBarUpdate(0, healthValue);
+ */
+
+ EmitHealthBarUpdate(0, gBattleMoveDamage);
+ MarkBufferBankForExecution(gActiveBank);
+
+ if (GetBankSide(gActiveBank) == SIDE_PLAYER && gBattleMoveDamage > 0)
+ gBattleResults.unk5_0 = 1;
+ }
+ }
+
+ gBattlescriptCurrInstr += 2;
}
static void atk0C_datahpupdate(void)
{
- register u32 move_type asm("r6"); //no idea how to match it otherwise
- u8 dynamic_move_type;
+ u32 moveType;
if (gBattleExecBuffer)
return;
- dynamic_move_type = BATTLE_STRUCT->dynamicMoveType;
- if (dynamic_move_type && !(dynamic_move_type & 0x40))
- {
- move_type = 0x3F;
- move_type &= dynamic_move_type;
- }
+ if (gBattleStruct->dynamicMoveType == 0)
+ moveType = gBattleMoves[gCurrentMove].type;
+ else if (!(gBattleStruct->dynamicMoveType & 0x40))
+ moveType = gBattleStruct->dynamicMoveType & 0x3F;
else
- {
- move_type = gBattleMoves[gCurrentMove].type;
- }
+ moveType = gBattleMoves[gCurrentMove].type;
if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT))
{
- gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
+ gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
{
if (gDisableStructs[gActiveBank].substituteHP >= gBattleMoveDamage)
@@ -1929,16 +2030,16 @@ static void atk0C_datahpupdate(void)
if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0)
gSpecialStatuses[gActiveBank].moveturnLostHP = gBattleMoveDamage;
gDisableStructs[gActiveBank].substituteHP -= gBattleMoveDamage;
- gHP_dealt = gBattleMoveDamage;
+ gHpDealt = gBattleMoveDamage;
}
else
{
if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0)
gSpecialStatuses[gActiveBank].moveturnLostHP = gDisableStructs[gActiveBank].substituteHP;
- gHP_dealt = gDisableStructs[gActiveBank].substituteHP;
+ gHpDealt = gDisableStructs[gActiveBank].substituteHP;
gDisableStructs[gActiveBank].substituteHP = 0;
}
- //check substitute fading
+ // check substitute fading
if (gDisableStructs[gActiveBank].substituteHP == 0)
{
gBattlescriptCurrInstr += 2;
@@ -1950,14 +2051,14 @@ static void atk0C_datahpupdate(void)
else
{
gHitMarker &= ~(HITMARKER_IGNORE_SUBSTITUTE);
- if (gBattleMoveDamage < 0) //hp goes up
+ if (gBattleMoveDamage < 0) // hp goes up
{
gBattleMons[gActiveBank].hp -= gBattleMoveDamage;
if (gBattleMons[gActiveBank].hp > gBattleMons[gActiveBank].maxHP)
gBattleMons[gActiveBank].hp = gBattleMons[gActiveBank].maxHP;
}
- else //hp goes down
+ else // hp goes down
{
if (gHitMarker & HITMARKER_x20)
{
@@ -1966,7 +2067,7 @@ static void atk0C_datahpupdate(void)
else
{
gTakenDmg[gActiveBank] += gBattleMoveDamage;
- if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0)
+ if (gBattlescriptCurrInstr[1] == BS_GET_TARGET)
gTakenDmgBanks[gActiveBank] = gBankAttacker;
else
gTakenDmgBanks[gActiveBank] = gBankTarget;
@@ -1975,22 +2076,22 @@ static void atk0C_datahpupdate(void)
if (gBattleMons[gActiveBank].hp > gBattleMoveDamage)
{
gBattleMons[gActiveBank].hp -= gBattleMoveDamage;
- gHP_dealt = gBattleMoveDamage;
+ gHpDealt = gBattleMoveDamage;
}
else
{
- gHP_dealt = gBattleMons[gActiveBank].hp;
+ gHpDealt = gBattleMons[gActiveBank].hp;
gBattleMons[gActiveBank].hp = 0;
}
if (!gSpecialStatuses[gActiveBank].moveturnLostHP && !(gHitMarker & HITMARKER_x100000))
- gSpecialStatuses[gActiveBank].moveturnLostHP = gHP_dealt;
+ gSpecialStatuses[gActiveBank].moveturnLostHP = gHpDealt;
- if (move_type <= 8 && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT)
+ if (moveType <= 8 && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT)
{
- gProtectStructs[gActiveBank].physicalDmg = gHP_dealt;
- gSpecialStatuses[gActiveBank].moveturnLostHP_physical = gHP_dealt;
- if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0)
+ gProtectStructs[gActiveBank].physicalDmg = gHpDealt;
+ gSpecialStatuses[gActiveBank].moveturnLostHP_physical = gHpDealt;
+ if (gBattlescriptCurrInstr[1] == BS_GET_TARGET)
{
gProtectStructs[gActiveBank].physicalBank = gBankAttacker;
gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankAttacker;
@@ -2001,11 +2102,11 @@ static void atk0C_datahpupdate(void)
gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankTarget;
}
}
- else if (move_type > 8 && !(gHitMarker & HITMARKER_x100000))
+ else if (moveType > 8 && !(gHitMarker & HITMARKER_x100000))
{
- gProtectStructs[gActiveBank].specialDmg = gHP_dealt;
- gSpecialStatuses[gActiveBank].moveturnLostHP_special = gHP_dealt;
- if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0)
+ gProtectStructs[gActiveBank].specialDmg = gHpDealt;
+ gSpecialStatuses[gActiveBank].moveturnLostHP_special = gHpDealt;
+ if (gBattlescriptCurrInstr[1] == BS_GET_TARGET)
{
gProtectStructs[gActiveBank].specialBank = gBankAttacker;
gSpecialStatuses[gActiveBank].moveturnSpecialBank = gBankAttacker;
@@ -2024,7 +2125,7 @@ static void atk0C_datahpupdate(void)
}
else
{
- gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
+ gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0)
gSpecialStatuses[gActiveBank].moveturnLostHP = 0xFFFF;
}
@@ -2048,6 +2149,7 @@ static void atk0E_effectivenesssound(void)
{
if (gBattleExecBuffer)
return;
+
gActiveBank = gBankTarget;
if (!(gBattleMoveFlags & MOVESTATUS_MISSED))
{
@@ -2092,37 +2194,39 @@ static void atk0E_effectivenesssound(void)
static void atk0F_resultmessage(void)
{
- u16 stringID = 0;
+ u32 stringId = 0;
if (gBattleExecBuffer)
return;
if (gBattleMoveFlags & MOVESTATUS_MISSED && (!(gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) || gBattleCommunication[6] > 2))
{
- stringID = gMissStrings[gBattleCommunication[6]];
+ stringId = gMissStringIds[gBattleCommunication[6]];
gBattleCommunication[MSG_DISPLAY] = 1;
}
else
{
gBattleCommunication[MSG_DISPLAY] = 1;
- switch (gBattleMoveFlags & 0xFE)
+ switch (gBattleMoveFlags & (u8)(~(MOVESTATUS_MISSED)))
{
case MOVESTATUS_SUPEREFFECTIVE:
- stringID = 0xDE;
+ stringId = STRINGID_SUPEREFFECTIVE;
break;
case MOVESTATUS_NOTVERYEFFECTIVE:
- stringID = 0xDD;
+ stringId = STRINGID_NOTVERYEFFECTIVE;
break;
case MOVESTATUS_ONEHITKO:
- stringID = 0xDA;
+ stringId = STRINGID_ONEHITKO;
break;
case MOVESTATUS_ENDURED:
- stringID = 0x99;
+ stringId = STRINGID_PKMNENDUREDHIT;
break;
case MOVESTATUS_FAILED:
- goto FAILED;
+ stringId = STRINGID_BUTITFAILED;
+ break;
case MOVESTATUS_NOTAFFECTED:
- goto NOTAFFECTED;
+ stringId = STRINGID_ITDOESNTAFFECT;
+ break;
case MOVESTATUS_HUNGON:
gLastUsedItem = gBattleMons[gBankTarget].item;
gStringBank = gBankTarget;
@@ -2132,8 +2236,9 @@ static void atk0F_resultmessage(void)
return;
default:
if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED)
- NOTAFFECTED:
- stringID = 0x1B;
+ {
+ stringId = STRINGID_ITDOESNTAFFECT;
+ }
else if (gBattleMoveFlags & MOVESTATUS_ONEHITKO)
{
gBattleMoveFlags &= ~(MOVESTATUS_ONEHITKO);
@@ -2160,18 +2265,19 @@ static void atk0F_resultmessage(void)
return;
}
else if (gBattleMoveFlags & MOVESTATUS_FAILED)
- FAILED:
- stringID = 0xE5;
+ {
+ stringId = STRINGID_BUTITFAILED;
+ }
else
+ {
gBattleCommunication[MSG_DISPLAY] = 0;
+ }
}
}
- if (stringID)
- {
- register u16 dummy asm("r0") = stringID; //Can't match it otherwise
- PrepareStringBattle(dummy, gBankAttacker);
- }
+ if (stringId)
+ PrepareStringBattle(stringId, gBankAttacker);
+
gBattlescriptCurrInstr++;
}
@@ -2268,12 +2374,12 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
gEffectBank = gBankAttacker; //bank that effects get applied on
gBattleCommunication[MOVE_EFFECT_BYTE] &= ~(EffectAffectsUser);
AffectsUser = EffectAffectsUser;
- BATTLE_STRUCT->scriptingActive = gBankTarget; //theoretically the attacker
+ gBattleStruct->scriptingActive = gBankTarget; //theoretically the attacker
}
else
{
gEffectBank = gBankTarget;
- BATTLE_STRUCT->scriptingActive = gBankAttacker;
+ gBattleStruct->scriptingActive = gBankAttacker;
}
if (gBattleMons[gEffectBank].ability == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) &&
@@ -2293,7 +2399,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) //status change
{
- switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
{
case STATUS_SLEEP:
//check active uproar
@@ -2342,7 +2448,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (gBattleMons[gEffectBank].type2 == TYPE_STEEL) {break;}
if (gBattleMons[gEffectBank].status1) {break;}
if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY) {break;}
-
+
StatusChanged = 1;
break;
case STATUS_BURN:
@@ -2454,10 +2560,10 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (StatusChanged == 1)
{
BattleScriptPush(gBattlescriptCurrInstr + 1);
- if (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP)
+ if (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP)
gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2);
else
- gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattleMons[gEffectBank].status1 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gActiveBank = gEffectBank;
EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status1);
@@ -2471,7 +2577,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
if (gBattleCommunication[MOVE_EFFECT_BYTE] == 2 || gBattleCommunication[MOVE_EFFECT_BYTE] == 6 || gBattleCommunication[MOVE_EFFECT_BYTE] == 5 || gBattleCommunication[MOVE_EFFECT_BYTE] == 3)
{
- BATTLE_STRUCT->synchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE];
+ gBattleStruct->synchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE];
gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT;
}
return;
@@ -2481,12 +2587,12 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
}
else
{
- if (gBattleMons[gEffectBank].status2 & gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ if (gBattleMons[gEffectBank].status2 & sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
{
gBattlescriptCurrInstr++;
return;
}
- switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
{
case 7: //confusion
if (gBattleMons[gEffectBank].ability == ABILITY_OWN_TEMPO)
@@ -2513,7 +2619,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
else
{
if (BankGetTurnOrder(gEffectBank) > gCurrentTurnActionNumber)
- gBattleMons[gEffectBank].status2 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattleMons[gEffectBank].status2 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr++; return;
}
break;
@@ -2553,9 +2659,9 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (gBattleMons[gEffectBank].status2 & STATUS2_WRAPPED)
{gBattlescriptCurrInstr++; return;}
gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 0xD;
- BATTLE_STRUCT->wrappedMove[gEffectBank*2] = (u8)gCurrentMove;
- (1 + BATTLE_STRUCT->wrappedMove)[gEffectBank*2] = gCurrentMove >> 8; //don't ask.
- BATTLE_STRUCT->wrappedBy[gEffectBank] = gBankAttacker;
+ gBattleStruct->wrappedMove[gEffectBank*2] = (u8)gCurrentMove;
+ (1 + gBattleStruct->wrappedMove)[gEffectBank*2] = gCurrentMove >> 8; //don't ask.
+ gBattleStruct->wrappedBy[gEffectBank] = gBankAttacker;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
@@ -2564,7 +2670,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
gBattleCommunication[MULTISTRING_CHOOSER]++;
break;
case 14: //25% recoil
- gBattleMoveDamage = (gHP_dealt) / 4;
+ gBattleMoveDamage = (gHpDealt) / 4;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
BattleScriptPush(gBattlescriptCurrInstr + 1);
@@ -2574,8 +2680,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (ChangeStatBuffs(0x10, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xF2, certain, 0)) {gBattlescriptCurrInstr++;}
else
{
- BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one
+ gBattleStruct->animArg2 = 0;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_StatUp;
}
@@ -2584,8 +2690,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (ChangeStatBuffs(~(0x6f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xEB, certain, 0)) {gBattlescriptCurrInstr++;} //TODO: negation doesnt work correctly
else
{
- BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
+ gBattleStruct->animArg2 = 0;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_StatDown;
}
@@ -2594,8 +2700,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (ChangeStatBuffs(0x20, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xDA, certain, 0)) {gBattlescriptCurrInstr++;}
else
{
- BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
+ gBattleStruct->animArg2 = 0;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_StatUp;
}
@@ -2604,8 +2710,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (ChangeStatBuffs(~(0x5f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xD3, certain, 0)) {gBattlescriptCurrInstr++;}
else
{
- BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
+ gBattleStruct->animArg2 = 0;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_StatDown;
}
@@ -2695,7 +2801,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
gBattlescriptCurrInstr = BattleScript_AtkDefDown;
return;
case 38: //33% recoil
- gBattleMoveDamage = gHP_dealt / 3;
+ gBattleMoveDamage = gHpDealt / 3;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
BattleScriptPush(gBattlescriptCurrInstr + 1);
@@ -2894,7 +3000,7 @@ _0801E50C:\n\
bls _0801E518\n\
b _0801EB4A\n\
_0801E518:\n\
- ldr r1, _0801E55C @ =gStatusFlagsForMoveEffects\n\
+ ldr r1, _0801E55C @ =sStatusFlagsForMoveEffects\n\
ldrb r0, [r7, 0x3]\n\
lsls r0, 2\n\
adds r0, r1\n\
@@ -2922,7 +3028,7 @@ _0801E54C: .4byte gBattleMons\n\
_0801E550: .4byte gHitMarker\n\
_0801E554: .4byte gSideAffecting\n\
_0801E558: .4byte gBattleCommunication\n\
-_0801E55C: .4byte gStatusFlagsForMoveEffects\n\
+_0801E55C: .4byte sStatusFlagsForMoveEffects\n\
_0801E560:\n\
cmp r0, 0x40\n\
bne _0801E566\n\
@@ -3552,7 +3658,7 @@ _0801EA1C:\n\
ldr r0, [r0]\n\
adds r0, 0x1\n\
bl BattleScriptPush\n\
- ldr r1, _0801EA60 @ =gStatusFlagsForMoveEffects\n\
+ ldr r1, _0801EA60 @ =sStatusFlagsForMoveEffects\n\
ldr r0, _0801EA64 @ =gBattleCommunication\n\
ldrb r0, [r0, 0x3]\n\
lsls r0, 2\n\
@@ -3578,7 +3684,7 @@ _0801EA1C:\n\
.align 2, 0\n\
_0801EA58: .4byte gBattleMoveFlags\n\
_0801EA5C: .4byte gBattlescriptCurrInstr\n\
-_0801EA60: .4byte gStatusFlagsForMoveEffects\n\
+_0801EA60: .4byte sStatusFlagsForMoveEffects\n\
_0801EA64: .4byte gBattleCommunication\n\
_0801EA68: .4byte gBattleMons\n\
_0801EA6C: .4byte gEffectBank\n\
@@ -3688,7 +3794,7 @@ _0801EB4A:\n\
mov r0, r9\n\
adds r0, 0x50\n\
adds r1, r0\n\
- ldr r2, _0801EB84 @ =gStatusFlagsForMoveEffects\n\
+ ldr r2, _0801EB84 @ =sStatusFlagsForMoveEffects\n\
ldrb r3, [r7, 0x3]\n\
lsls r0, r3, 2\n\
adds r0, r2\n\
@@ -3710,7 +3816,7 @@ _0801EB78:\n\
ldr r0, [r0]\n\
mov pc, r0\n\
.align 2, 0\n\
-_0801EB84: .4byte gStatusFlagsForMoveEffects\n\
+_0801EB84: .4byte sStatusFlagsForMoveEffects\n\
_0801EB88: .4byte _0801EB8C\n\
.align 2, 0\n\
_0801EB8C:\n\
@@ -3870,7 +3976,7 @@ _0801ED2E:\n\
mov r0, r9\n\
adds r0, 0x50\n\
adds r2, r0\n\
- ldr r1, _0801ED58 @ =gStatusFlagsForMoveEffects\n\
+ ldr r1, _0801ED58 @ =sStatusFlagsForMoveEffects\n\
ldr r0, _0801ED5C @ =gBattleCommunication\n\
ldrb r0, [r0, 0x3]\n\
lsls r0, 2\n\
@@ -3882,7 +3988,7 @@ _0801ED2E:\n\
bl _0801F5DC\n\
.align 2, 0\n\
_0801ED54: .4byte gCurrentTurnActionNumber\n\
-_0801ED58: .4byte gStatusFlagsForMoveEffects\n\
+_0801ED58: .4byte sStatusFlagsForMoveEffects\n\
_0801ED5C: .4byte gBattleCommunication\n\
_0801ED60:\n\
mov r3, r8\n\
@@ -4156,7 +4262,7 @@ _0801EFA0: .4byte gBattleCommunication\n\
_0801EFA4: .4byte gTrappingMoves\n\
_0801EFA8:\n\
ldr r1, _0801EFD8 @ =gBattleMoveDamage\n\
- ldr r0, _0801EFDC @ =gHP_dealt\n\
+ ldr r0, _0801EFDC @ =gHpDealt\n\
ldr r0, [r0]\n\
cmp r0, 0\n\
bge _0801EFB4\n\
@@ -4182,7 +4288,7 @@ _0801EFC0:\n\
b _0801F5F8\n\
.align 2, 0\n\
_0801EFD8: .4byte gBattleMoveDamage\n\
-_0801EFDC: .4byte gHP_dealt\n\
+_0801EFDC: .4byte gHpDealt\n\
_0801EFE0: .4byte gBattlescriptCurrInstr\n\
_0801EFE4: .4byte gMoveEffectBS_Ptrs\n\
_0801EFE8: .4byte gBattleCommunication\n\
@@ -4711,7 +4817,7 @@ _0801F45C: .4byte gBattlescriptCurrInstr\n\
_0801F460: .4byte BattleScript_AtkDefDown\n\
_0801F464:\n\
ldr r4, _0801F494 @ =gBattleMoveDamage\n\
- ldr r0, _0801F498 @ =gHP_dealt\n\
+ ldr r0, _0801F498 @ =gHpDealt\n\
ldr r0, [r0]\n\
movs r1, 0x3\n\
bl __divsi3\n\
@@ -4734,7 +4840,7 @@ _0801F47A:\n\
b _0801F5F8\n\
.align 2, 0\n\
_0801F494: .4byte gBattleMoveDamage\n\
-_0801F498: .4byte gHP_dealt\n\
+_0801F498: .4byte gHpDealt\n\
_0801F49C: .4byte gBattlescriptCurrInstr\n\
_0801F4A0: .4byte gMoveEffectBS_Ptrs\n\
_0801F4A4: .4byte gBattleCommunication\n\
@@ -4935,7 +5041,7 @@ static void atk15_seteffectwithchance(void)
else
gBattlescriptCurrInstr++;
gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
- BATTLE_STRUCT->unk16112 = 0;
+ gBattleStruct->unk16112 = 0;
}
static void atk16_seteffectprimary(void)
@@ -4952,13 +5058,13 @@ static void atk18_clearstatusfromeffect(void)
{
gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6)
- gBattleMons[gActiveBank].status1 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
+ gBattleMons[gActiveBank].status1 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
else
- gBattleMons[gActiveBank].status2 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
+ gBattleMons[gActiveBank].status2 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
gBattlescriptCurrInstr += 2;
- BATTLE_STRUCT->unk16112 = 0;
+ gBattleStruct->unk16112 = 0;
}
static void atk19_tryfaintmon(void)
@@ -5250,282 +5356,262 @@ static void atk22_jumpiftype(void) //u8 bank, u8 type, *ptr
gBattlescriptCurrInstr += 7;
}
-//here we go again...
-#ifdef NONMATCHING
static void atk23_getexp(void)
{
- u8 hold_effect;
- int via_expshare = 0, sent_in;
- u16* exp = &BATTLE_STRUCT->exp;
- gBank1 = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
- sent_in = gSentPokesToOpponent[(gBank1 & 2) >> 1];
- switch (BATTLE_STRUCT->getexpStateTracker)
+ u16 item;
+ s32 i; // also used as stringId
+ u8 holdEffect;
+ s32 sentIn;
+
+ s32 viaExpShare = 0;
+ u16* exp = &gBattleStruct->exp;
+
+ gBank1 = GetBattleBank(gBattlescriptCurrInstr[1]);
+ sentIn = gSentPokesToOpponent[(gBank1 & 2) >> 1];
+
+ switch (gBattleStruct->getexpStateTracker)
{
- case 0: //check if should receive exp at all
- if (GetBankSide(gBank1) != 1 || (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)))
- BATTLE_STRUCT->getexpStateTracker = 6; //goto last case
+ case 0: // check if should receive exp at all
+ if (GetBankSide(gBank1) != SIDE_OPPONENT || (gBattleTypeFlags &
+ (BATTLE_TYPE_LINK
+ | BATTLE_TYPE_SAFARI
+ | BATTLE_TYPE_BATTLE_TOWER
+ | BATTLE_TYPE_EREADER_TRAINER)))
+ {
+ gBattleStruct->getexpStateTracker = 6; // goto last case
+ }
else
{
- BATTLE_STRUCT->getexpStateTracker++;
- ((u8*)ewram)[0x16113] |= gBitTable[gBattlePartyID[gBank1]];
+ gBattleStruct->getexpStateTracker++;
+ gBattleStruct->unk16113 |= gBitTable[gBattlePartyID[gBank1]];
}
break;
- case 1: //calculate experience points to redistribute
+ case 1: // calculate experience points to redistribute
{
- int via_sent_in = 0;
u16 calculatedExp;
- int i;
- for (i = 0; i < 6; i++)
+ s32 viaSentIn;
+
+ for (viaSentIn = 0, i = 0; i < 6; i++)
{
- u16 item;
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == 0 || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == SPECIES_NONE || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
continue;
- if (gBitTable[i] & sent_in)
- via_sent_in++;
+ if (gBitTable[i] & sentIn)
+ viaSentIn++;
item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+
if (item == ITEM_ENIGMA_BERRY)
- hold_effect = gSaveBlock1.enigmaBerry.holdEffect;
+ holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
else
- hold_effect = ItemId_GetHoldEffect(item);
+ holdEffect = ItemId_GetHoldEffect(item);
- if (hold_effect == HOLD_EFFECT_EXP_SHARE)
- via_expshare++;
+ if (holdEffect == HOLD_EFFECT_EXP_SHARE)
+ viaExpShare++;
}
+
calculatedExp = gBaseStats[gBattleMons[gBank1].species].expYield * gBattleMons[gBank1].level / 7;
- if (via_expshare) //at least one poke is getting exp via exp share
+
+ if (viaExpShare) // at least one mon is getting exp via exp share
{
- calculatedExp /= 2;
- *exp = calculatedExp / via_sent_in;
+ *exp = calculatedExp / 2 / viaSentIn;
if (*exp == 0)
*exp = 1;
- gExpShareExp = calculatedExp / via_expshare;
+ gExpShareExp = calculatedExp / 2 / viaExpShare;
if (gExpShareExp == 0)
gExpShareExp = 1;
}
else
{
- *exp = calculatedExp / via_sent_in;
+ *exp = calculatedExp / viaSentIn;
if (*exp == 0)
*exp = 1;
gExpShareExp = 0;
}
- BATTLE_STRUCT->getexpStateTracker++;
- BATTLE_STRUCT->expGetterID = 0;
- BATTLE_STRUCT->sentInPokes = sent_in;
- } //no break statement
- case 2: //loop; set exp value to the poke in expgetter_id and print message
+
+ gBattleStruct->getexpStateTracker++;
+ gBattleStruct->expGetterID = 0;
+ gBattleStruct->sentInPokes = sentIn;
+ }
+ // fall through
+ case 2: // set exp value to the poke in expgetter_id and print message
if (gBattleExecBuffer == 0)
{
- u16 item = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HELD_ITEM);
- u8* tracker; u32 zero;
+ item = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HELD_ITEM);
+
if (item == ITEM_ENIGMA_BERRY)
- hold_effect = gSaveBlock1.enigmaBerry.holdEffect;
+ holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
else
- hold_effect = ItemId_GetHoldEffect(item);
+ holdEffect = ItemId_GetHoldEffect(item);
- if ((hold_effect != HOLD_EFFECT_EXP_SHARE && !(BATTLE_STRUCT->sentInPokes & 1)))
+ if (holdEffect != HOLD_EFFECT_EXP_SHARE && !(gBattleStruct->sentInPokes & 1))
{
- BATTLE_STRUCT->sentInPokes >>= 1;
- tracker = &BATTLE_STRUCT->getexpStateTracker;
- zero = 0;
- *tracker = 5; //increment looper
- gBattleMoveDamage = zero; //used for exp
+ gBattleStruct->sentInPokes >>= 1;
+ gBattleStruct->getexpStateTracker = 5;
+ gBattleMoveDamage = 0; // used for exp
}
- else if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) == 100)
+ else if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL) == 100)
{
- BATTLE_STRUCT->sentInPokes >>= 1;
- tracker = &BATTLE_STRUCT->getexpStateTracker;
- zero = 0;
- *tracker = 5; //increment looper
- gBattleMoveDamage = zero; //used for exp
+ gBattleStruct->sentInPokes >>= 1;
+ gBattleStruct->getexpStateTracker = 5;
+ gBattleMoveDamage = 0; // used for exp
}
else
{
- //music change in wild battle after fainting a poke
- if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !BATTLE_STRUCT->wildVictorySong)
+ // music change in wild battle after fainting a poke
+ if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !gBattleStruct->wildVictorySong)
{
- BattleMusicStop();
+ BattleStopLowHpSound();
PlayBGM(0x161);
- BATTLE_STRUCT->wildVictorySong++;
+ gBattleStruct->wildVictorySong++;
}
- if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP))
+ if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP))
{
- s16 stringID;
- if (BATTLE_STRUCT->sentInPokes & 1)
+ if (gBattleStruct->sentInPokes & 1)
gBattleMoveDamage = *exp;
else
gBattleMoveDamage = 0;
- if (hold_effect == HOLD_EFFECT_EXP_SHARE)
+ if (holdEffect == HOLD_EFFECT_EXP_SHARE)
gBattleMoveDamage += gExpShareExp;
- if (hold_effect == HOLD_EFFECT_LUCKY_EGG)
+ if (holdEffect == HOLD_EFFECT_LUCKY_EGG)
gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
- if (IsTradedMon(&gPlayerParty[BATTLE_STRUCT->expGetterID]))
+ if (IsTradedMon(&gPlayerParty[gBattleStruct->expGetterID]))
{
gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
- stringID = 0x14A;
+ i = 0x14A;
}
else
{
- stringID = 0x149;
- }
+ i = 0x149;
+ }
- //get exp getter bank
+ // get exp getter bank
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
- if (!(gBattlePartyID[2] != BATTLE_STRUCT->expGetterID) && !(gAbsentBankFlags & gBitTable[2]))
- BATTLE_STRUCT->expGetterBank = 2;
+ if (!(gBattlePartyID[2] != gBattleStruct->expGetterID) && !(gAbsentBankFlags & gBitTable[2]))
+ gBattleStruct->expGetterBank = 2;
else
{
if (!(gAbsentBankFlags & gBitTable[0]))
- BATTLE_STRUCT->expGetterBank = 0;
+ gBattleStruct->expGetterBank = 0;
else
- BATTLE_STRUCT->expGetterBank = 2;
+ gBattleStruct->expGetterBank = 2;
}
}
else
- BATTLE_STRUCT->expGetterBank = 0;
+ gBattleStruct->expGetterBank = 0;
- //buffer poke name
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 4;
- gBattleTextBuff1[2] = BATTLE_STRUCT->expGetterBank;
- gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID;
- gBattleTextBuff1[4] = 0xFF;
-
- //buffer 'gained' or 'gained a boosted'
- gBattleTextBuff2[0] = 0xFD;
- gBattleTextBuff2[1] = 0;
- gBattleTextBuff2[2] = stringID;
- stringID = (stringID >> 8) & (0xFF); //this does not want to cooperate
- gBattleTextBuff2[3] = stringID;
- gBattleTextBuff2[4] = 0xFF;
-
- //buffer exp number
- gBattleTextBuff3[0] = 0xFD;
- gBattleTextBuff3[1] = 1;
- gBattleTextBuff3[2] = 4; //word
- gBattleTextBuff3[3] = 5; //max digits
- gBattleTextBuff3[4] = gBattleMoveDamage;
- gBattleTextBuff3[5] = sBYTE1_32(gBattleMoveDamage);
- gBattleTextBuff3[6] = sBYTE2_32(gBattleMoveDamage);
- gBattleTextBuff3[7] = sBYTE3_32(gBattleMoveDamage);
- gBattleTextBuff3[8] = 0xFF;
-
- PrepareStringBattle(0xD, BATTLE_STRUCT->expGetterBank);
- MonGainEVs(&gPlayerParty[BATTLE_STRUCT->expGetterID], gBattleMons[gBank1].species);
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattleStruct->expGetterBank, gBattleStruct->expGetterID)
+
+ // buffer 'gained' or 'gained a boosted'
+ PREPARE_STRING_BUFFER(gBattleTextBuff2, i)
+
+ PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 5, gBattleMoveDamage)
+
+ PrepareStringBattle(STRINGID_PKMNGAINEDEXP, gBattleStruct->expGetterBank);
+ MonGainEVs(&gPlayerParty[gBattleStruct->expGetterID], gBattleMons[gBank1].species);
}
- BATTLE_STRUCT->sentInPokes >>= 1;
- BATTLE_STRUCT->getexpStateTracker++;
+ gBattleStruct->sentInPokes >>= 1;
+ gBattleStruct->getexpStateTracker++;
}
}
break;
- case 3: //Set Stats and give exp
+ case 3: // Set stats and give exp
if (gBattleExecBuffer == 0)
{
- gBattleBufferB[BATTLE_STRUCT->expGetterBank][0] = 0;
- if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) != 100)
+ gBattleBufferB[gBattleStruct->expGetterBank][0] = 0;
+ if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL) != 100)
{
- // Doesn't match.
- 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_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);
-
- gActiveBank = BATTLE_STRUCT->expGetterBank;
- EmitExpBarUpdate(0, BATTLE_STRUCT->expGetterID, gBattleMoveDamage);
+ gBattleResources_statsBeforeLvlUp->hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MAX_HP);
+ gBattleResources_statsBeforeLvlUp->atk = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_ATK);
+ gBattleResources_statsBeforeLvlUp->def = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_DEF);
+ gBattleResources_statsBeforeLvlUp->spd = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED);
+ gBattleResources_statsBeforeLvlUp->spAtk = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPATK);
+ gBattleResources_statsBeforeLvlUp->spDef = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPDEF);
+
+ gActiveBank = gBattleStruct->expGetterBank;
+ EmitExpBarUpdate(0, gBattleStruct->expGetterID, gBattleMoveDamage);
MarkBufferBankForExecution(gActiveBank);
}
- BATTLE_STRUCT->getexpStateTracker++;
+ gBattleStruct->getexpStateTracker++;
}
break;
- case 4: //lvl up if necessary
+ case 4: // lvl up if necessary
if (gBattleExecBuffer == 0)
{
- gActiveBank = BATTLE_STRUCT->expGetterBank;
- if (gBattleBufferB[gActiveBank][0] == 0x21 && gBattleBufferB[gActiveBank][1] == 0xB)
+ gActiveBank = gBattleStruct->expGetterBank;
+ if (gBattleBufferB[gActiveBank][0] == CONTROLLER_TWORETURNVALUES
+ && gBattleBufferB[gActiveBank][1] == RET_VALUE_LEVELLED_UP)
{
- if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID)
- sub_80324F8(&gPlayerParty[gActiveBank], gActiveBank);
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == gBattleStruct->expGetterID)
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
- //buff poke name
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 4;
- gBattleTextBuff1[2] = gActiveBank;
- gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID;
- gBattleTextBuff1[4] = 0xFF;
-
- //buff level
- gBattleTextBuff2[0] = 0xFD;
- gBattleTextBuff2[1] = 1;
- gBattleTextBuff2[2] = 1;
- gBattleTextBuff2[3] = 3;
- gBattleTextBuff2[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL);
- gBattleTextBuff2[5] = 0xFF;
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBank, gBattleStruct->expGetterID)
+
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 3, GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL))
BattleScriptPushCursor();
- gLeveledUpInBattle |= gBitTable[BATTLE_STRUCT->expGetterID];
+ gLeveledUpInBattle |= gBitTable[gBattleStruct->expGetterID];
gBattlescriptCurrInstr = BattleScript_LevelUp;
gBattleMoveDamage = (gBattleBufferB[gActiveBank][2] | (gBattleBufferB[gActiveBank][3] << 8));
- AdjustFriendship(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0);
+ AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterID], 0);
- //update battle mon structure after level up
- if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && gBattleMons[0].hp)
+ // update battle mon structure after level up
+ if (gBattlePartyID[0] == gBattleStruct->expGetterID && gBattleMons[0].hp)
{
- gBattleMons[0].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL);
- gBattleMons[0].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP);
- 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_SPEED);
- gBattleMons[0].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK);
- gBattleMons[0].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF);
+ gBattleMons[0].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL);
+ gBattleMons[0].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP);
+ gBattleMons[0].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MAX_HP);
+ gBattleMons[0].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_ATK);
+ gBattleMons[0].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_DEF);
+ // Why is this duplicated?
+ gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED);
+ gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED);
+ gBattleMons[0].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPATK);
+ gBattleMons[0].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPDEF);
}
- //What is else if? Guess it's too advanced for GameFreak
- if (gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ // What is else if?
+ if (gBattlePartyID[2] == gBattleStruct->expGetterID && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
{
- gBattleMons[2].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL);
- gBattleMons[2].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP);
- gBattleMons[2].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP);
- 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_SPEED);
- gBattleMons[2].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED /*RIP*/);
- gBattleMons[2].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK);
+ gBattleMons[2].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL);
+ gBattleMons[2].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP);
+ gBattleMons[2].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MAX_HP);
+ gBattleMons[2].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_ATK);
+ gBattleMons[2].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_DEF);
+ // Duplicated again, but this time there's no Sp Defense
+ gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED);
+ gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED);
+ gBattleMons[2].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPATK);
}
- BATTLE_STRUCT->getexpStateTracker = 5;
}
else
{
gBattleMoveDamage = 0;
- BATTLE_STRUCT->getexpStateTracker = 5;
}
+ gBattleStruct->getexpStateTracker = 5;
}
break;
- case 5: //looper increment
- if (gBattleMoveDamage) //there is exp to give, goto case 3 that gives exp
- BATTLE_STRUCT->getexpStateTracker = 3;
+ case 5: // looper increment
+ if (gBattleMoveDamage) // there is exp to give, goto case 3 that gives exp
+ gBattleStruct->getexpStateTracker = 3;
else
{
- if (++BATTLE_STRUCT->expGetterID <= 5)
- BATTLE_STRUCT->getexpStateTracker = 2; //loop again
+ gBattleStruct->expGetterID++;
+ if (gBattleStruct->expGetterID <= 5)
+ gBattleStruct->getexpStateTracker = 2; // loop again
else
- BATTLE_STRUCT->getexpStateTracker = 6; //we're done
+ gBattleStruct->getexpStateTracker = 6; // we're done
}
break;
- case 6: //increment instruction
+ case 6: // increment instruction
if (gBattleExecBuffer == 0)
{
- //not even sure why gamefreak clears that data in this place
+ // not sure why gf clears the item and ability here
gBattleMons[gBank1].item = 0;
gBattleMons[gBank1].ability = 0;
gBattlescriptCurrInstr += 2;
@@ -5533,1138 +5619,6 @@ static void atk23_getexp(void)
break;
}
}
-#else
-__attribute__((naked))
-static void atk23_getexp(void)
-{
- 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\
- movs r6, 0\n\
- ldr r0, _0802004C @ =gSharedMem + 0x1605C\n\
- mov r10, r0\n\
- ldr r0, _08020050 @ =gBattlescriptCurrInstr\n\
- ldr r0, [r0]\n\
- ldrb r0, [r0, 0x1]\n\
- bl GetBattleBank\n\
- ldr r1, _08020054 @ =gBank1\n\
- strb r0, [r1]\n\
- ldr r2, _08020058 @ =gSentPokesToOpponent\n\
- movs r1, 0x2\n\
- ands r1, r0\n\
- lsls r1, 24\n\
- lsrs r1, 25\n\
- adds r1, r2\n\
- ldrb r1, [r1]\n\
- mov r8, r1\n\
- mov r0, r10\n\
- subs r0, 0x4D\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x6\n\
- bls _08020040\n\
- bl _08020996\n\
-_08020040:\n\
- lsls r0, 2\n\
- ldr r1, _0802005C @ =_08020060\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_0802004C: .4byte gSharedMem + 0x1605C\n\
-_08020050: .4byte gBattlescriptCurrInstr\n\
-_08020054: .4byte gBank1\n\
-_08020058: .4byte gSentPokesToOpponent\n\
-_0802005C: .4byte _08020060\n\
- .align 2, 0\n\
-_08020060:\n\
- .4byte _0802007C\n\
- .4byte _080200FC\n\
- .4byte _08020216\n\
- .4byte _0802055C\n\
- .4byte _08020648\n\
- .4byte _08020910\n\
- .4byte _0802096C\n\
-_0802007C:\n\
- ldr r4, _080200A8 @ =gBank1\n\
- ldrb r0, [r4]\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _08020098\n\
- ldr r0, _080200AC @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- ldr r0, _080200B0 @ =0x00000982\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080200BC\n\
-_08020098:\n\
- ldr r0, _080200B4 @ =gSharedMem\n\
- ldr r1, _080200B8 @ =0x0001600f\n\
- adds r0, r1\n\
- movs r1, 0x6\n\
- strb r1, [r0]\n\
- bl _08020996\n\
- .align 2, 0\n\
-_080200A8: .4byte gBank1\n\
-_080200AC: .4byte gBattleTypeFlags\n\
-_080200B0: .4byte 0x00000982\n\
-_080200B4: .4byte gSharedMem\n\
-_080200B8: .4byte 0x0001600f\n\
-_080200BC:\n\
- ldr r2, _080200E8 @ =gSharedMem\n\
- ldr r3, _080200EC @ =0x0001600f\n\
- adds r1, r2, r3\n\
- ldrb r0, [r1]\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
- ldr r0, _080200F0 @ =0x00016113\n\
- adds r2, r0\n\
- ldr r3, _080200F4 @ =gBitTable\n\
- ldr r1, _080200F8 @ =gBattlePartyID\n\
- ldrb r0, [r4]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- ldrh r0, [r0]\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- ldr r0, [r0]\n\
- ldrb r1, [r2]\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- bl _08020996\n\
- .align 2, 0\n\
-_080200E8: .4byte gSharedMem\n\
-_080200EC: .4byte 0x0001600f\n\
-_080200F0: .4byte 0x00016113\n\
-_080200F4: .4byte gBitTable\n\
-_080200F8: .4byte gBattlePartyID\n\
-_080200FC:\n\
- movs r5, 0\n\
- movs r7, 0\n\
- ldr r1, _08020150 @ =gSaveBlock1 + 0x3688\n\
- mov r9, r1\n\
-_08020104:\n\
- movs r0, 0x64\n\
- adds r1, r7, 0\n\
- muls r1, r0\n\
- ldr r0, _08020154 @ =gPlayerParty\n\
- adds r4, r1, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _0802016A\n\
- adds r0, r4, 0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _0802016A\n\
- ldr r0, _08020158 @ =gBitTable\n\
- lsls r1, r7, 2\n\
- adds r1, r0\n\
- ldr r0, [r1]\n\
- mov r2, r8\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _08020138\n\
- adds r5, 0x1\n\
-_08020138:\n\
- adds r0, r4, 0\n\
- movs r1, 0xC\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0xAF\n\
- bne _0802015C\n\
- mov r3, r9\n\
- ldrb r4, [r3]\n\
- b _08020164\n\
- .align 2, 0\n\
-_08020150: .4byte gSaveBlock1 + 0x3688\n\
-_08020154: .4byte gPlayerParty\n\
-_08020158: .4byte gBitTable\n\
-_0802015C:\n\
- bl ItemId_GetHoldEffect\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
-_08020164:\n\
- cmp r4, 0x19\n\
- bne _0802016A\n\
- adds r6, 0x1\n\
-_0802016A:\n\
- adds r7, 0x1\n\
- cmp r7, 0x5\n\
- ble _08020104\n\
- ldr r3, _080201D0 @ =gBaseStats\n\
- ldr r2, _080201D4 @ =gBattleMons\n\
- ldr r0, _080201D8 @ =gBank1\n\
- ldrb r1, [r0]\n\
- movs r0, 0x58\n\
- muls r1, r0\n\
- adds r1, r2\n\
- ldrh r2, [r1]\n\
- lsls r0, r2, 3\n\
- subs r0, r2\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- ldrb r2, [r0, 0x9]\n\
- adds r1, 0x2A\n\
- ldrb r0, [r1]\n\
- muls r0, r2\n\
- movs r1, 0x7\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r1, r0, 16\n\
- cmp r6, 0\n\
- beq _080201E0\n\
- lsrs r4, r0, 17\n\
- adds r0, r4, 0\n\
- adds r1, r5, 0\n\
- bl __divsi3\n\
- mov r1, r10\n\
- strh r0, [r1]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bne _080201B6\n\
- movs r0, 0x1\n\
- strh r0, [r1]\n\
-_080201B6:\n\
- ldr r5, _080201DC @ =gExpShareExp\n\
- adds r0, r4, 0\n\
- adds r1, r6, 0\n\
- bl __divsi3\n\
- strh r0, [r5]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bne _080201FA\n\
- movs r0, 0x1\n\
- strh r0, [r5]\n\
- b _080201FA\n\
- .align 2, 0\n\
-_080201D0: .4byte gBaseStats\n\
-_080201D4: .4byte gBattleMons\n\
-_080201D8: .4byte gBank1\n\
-_080201DC: .4byte gExpShareExp\n\
-_080201E0:\n\
- adds r0, r1, 0\n\
- adds r1, r5, 0\n\
- bl __divsi3\n\
- mov r2, r10\n\
- strh r0, [r2]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bne _080201F6\n\
- movs r0, 0x1\n\
- strh r0, [r2]\n\
-_080201F6:\n\
- ldr r0, _08020248 @ =gExpShareExp\n\
- strh r6, [r0]\n\
-_080201FA:\n\
- ldr r1, _0802024C @ =gSharedMem\n\
- ldr r3, _08020250 @ =0x0001600f\n\
- adds r2, r1, r3\n\
- ldrb r0, [r2]\n\
- adds r0, 0x1\n\
- movs r3, 0\n\
- strb r0, [r2]\n\
- ldr r2, _08020254 @ =0x00016018\n\
- adds r0, r1, r2\n\
- strb r3, [r0]\n\
- ldr r3, _08020258 @ =0x0001605f\n\
- adds r1, r3\n\
- mov r0, r8\n\
- strb r0, [r1]\n\
-_08020216:\n\
- ldr r0, _0802025C @ =gBattleExecBuffer\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- beq _08020220\n\
- b _08020996\n\
-_08020220:\n\
- ldr r0, _0802024C @ =gSharedMem\n\
- ldr r1, _08020254 @ =0x00016018\n\
- adds r0, r1\n\
- ldrb r1, [r0]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _08020260 @ =gPlayerParty\n\
- adds r0, r1\n\
- movs r1, 0xC\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0xAF\n\
- bne _0802026C\n\
- ldr r0, _08020264 @ =gSaveBlock1\n\
- ldr r2, _08020268 @ =0x00003688\n\
- adds r0, r2\n\
- ldrb r4, [r0]\n\
- b _08020274\n\
- .align 2, 0\n\
-_08020248: .4byte gExpShareExp\n\
-_0802024C: .4byte gSharedMem\n\
-_08020250: .4byte 0x0001600f\n\
-_08020254: .4byte 0x00016018\n\
-_08020258: .4byte 0x0001605f\n\
-_0802025C: .4byte gBattleExecBuffer\n\
-_08020260: .4byte gPlayerParty\n\
-_08020264: .4byte gSaveBlock1\n\
-_08020268: .4byte 0x00003688\n\
-_0802026C:\n\
- bl ItemId_GetHoldEffect\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
-_08020274:\n\
- ldr r5, _08020294 @ =gSharedMem\n\
- cmp r4, 0x19\n\
- beq _080202A0\n\
- ldr r3, _08020298 @ =0x0001605f\n\
- adds r1, r5, r3\n\
- ldrb r0, [r1]\n\
- movs r2, 0x1\n\
- ands r2, r0\n\
- cmp r2, 0\n\
- bne _080202A0\n\
- lsrs r0, 1\n\
- strb r0, [r1]\n\
- ldr r0, _0802029C @ =0x0001600f\n\
- adds r1, r5, r0\n\
- b _080202C8\n\
- .align 2, 0\n\
-_08020294: .4byte gSharedMem\n\
-_08020298: .4byte 0x0001605f\n\
-_0802029C: .4byte 0x0001600f\n\
-_080202A0:\n\
- ldr r1, _080202D4 @ =0x00016018\n\
- adds r0, r5, r1\n\
- ldrb r1, [r0]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _080202D8 @ =gPlayerParty\n\
- adds r0, r1\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- cmp r0, 0x64\n\
- bne _080202E8\n\
- ldr r2, _080202DC @ =0x0001605f\n\
- adds r1, r5, r2\n\
- ldrb r0, [r1]\n\
- lsrs r0, 1\n\
- movs r2, 0\n\
- strb r0, [r1]\n\
- ldr r3, _080202E0 @ =0x0001600f\n\
- adds r1, r5, r3\n\
-_080202C8:\n\
- movs r0, 0x5\n\
- strb r0, [r1]\n\
- ldr r0, _080202E4 @ =gBattleMoveDamage\n\
- str r2, [r0]\n\
- b _08020996\n\
- .align 2, 0\n\
-_080202D4: .4byte 0x00016018\n\
-_080202D8: .4byte gPlayerParty\n\
-_080202DC: .4byte 0x0001605f\n\
-_080202E0: .4byte 0x0001600f\n\
-_080202E4: .4byte gBattleMoveDamage\n\
-_080202E8:\n\
- ldr r0, _0802034C @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08020316\n\
- ldr r0, _08020350 @ =gBattleMons\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- beq _08020316\n\
- ldr r0, _08020354 @ =0x0001601b\n\
- adds r5, r0\n\
- ldrb r0, [r5]\n\
- cmp r0, 0\n\
- bne _08020316\n\
- bl BattleMusicStop\n\
- ldr r0, _08020358 @ =0x00000161\n\
- bl PlayBGM\n\
- ldrb r0, [r5]\n\
- adds r0, 0x1\n\
- strb r0, [r5]\n\
-_08020316:\n\
- ldr r5, _0802035C @ =gSharedMem\n\
- ldr r1, _08020360 @ =0x00016018\n\
- adds r0, r5, r1\n\
- ldrb r1, [r0]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _08020364 @ =gPlayerParty\n\
- adds r0, r1\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _08020332\n\
- b _0802051E\n\
-_08020332:\n\
- ldr r2, _08020368 @ =0x0001605f\n\
- adds r0, r5, r2\n\
- ldrb r0, [r0]\n\
- movs r3, 0x1\n\
- ands r3, r0\n\
- cmp r3, 0\n\
- beq _08020370\n\
- ldr r1, _0802036C @ =gBattleMoveDamage\n\
- mov r3, r10\n\
- ldrh r0, [r3]\n\
- str r0, [r1]\n\
- mov r8, r1\n\
- b _08020376\n\
- .align 2, 0\n\
-_0802034C: .4byte gBattleTypeFlags\n\
-_08020350: .4byte gBattleMons\n\
-_08020354: .4byte 0x0001601b\n\
-_08020358: .4byte 0x00000161\n\
-_0802035C: .4byte gSharedMem\n\
-_08020360: .4byte 0x00016018\n\
-_08020364: .4byte gPlayerParty\n\
-_08020368: .4byte 0x0001605f\n\
-_0802036C: .4byte gBattleMoveDamage\n\
-_08020370:\n\
- ldr r0, _080203EC @ =gBattleMoveDamage\n\
- str r3, [r0]\n\
- mov r8, r0\n\
-_08020376:\n\
- cmp r4, 0x19\n\
- bne _08020386\n\
- ldr r0, _080203F0 @ =gExpShareExp\n\
- ldrh r1, [r0]\n\
- mov r2, r8\n\
- ldr r0, [r2]\n\
- adds r0, r1\n\
- str r0, [r2]\n\
-_08020386:\n\
- cmp r4, 0x28\n\
- bne _0802039C\n\
- mov r3, r8\n\
- ldr r1, [r3]\n\
- movs r0, 0x96\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- mov r1, r8\n\
- str r0, [r1]\n\
-_0802039C:\n\
- ldr r0, _080203F4 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080203B8\n\
- ldr r4, _080203EC @ =gBattleMoveDamage\n\
- ldr r1, [r4]\n\
- movs r0, 0x96\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- str r0, [r4]\n\
-_080203B8:\n\
- ldr r0, _080203F8 @ =gSharedMem\n\
- ldr r2, _080203FC @ =0x00016018\n\
- adds r0, r2\n\
- ldrb r1, [r0]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _08020400 @ =gPlayerParty\n\
- adds r0, r1\n\
- bl IsTradedMon\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _08020404\n\
- ldr r4, _080203EC @ =gBattleMoveDamage\n\
- ldr r1, [r4]\n\
- movs r0, 0x96\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- str r0, [r4]\n\
- movs r7, 0xA5\n\
- lsls r7, 1\n\
- mov r8, r4\n\
- b _0802040A\n\
- .align 2, 0\n\
-_080203EC: .4byte gBattleMoveDamage\n\
-_080203F0: .4byte gExpShareExp\n\
-_080203F4: .4byte gBattleTypeFlags\n\
-_080203F8: .4byte gSharedMem\n\
-_080203FC: .4byte 0x00016018\n\
-_08020400: .4byte gPlayerParty\n\
-_08020404:\n\
- ldr r7, _0802043C @ =0x00000149\n\
- ldr r3, _08020440 @ =gBattleMoveDamage\n\
- mov r8, r3\n\
-_0802040A:\n\
- ldr r0, _08020444 @ =gBattleTypeFlags\n\
- ldrh r0, [r0]\n\
- movs r1, 0x1\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _08020488\n\
- ldr r1, _08020448 @ =gBattlePartyID\n\
- ldr r0, _0802044C @ =gSharedMem\n\
- ldr r3, _08020450 @ =0x00016018\n\
- adds r2, r0, r3\n\
- ldrh r1, [r1, 0x4]\n\
- adds r5, r0, 0\n\
- ldr r4, _08020454 @ =gBitTable\n\
- ldr r3, _08020458 @ =gAbsentBankFlags\n\
- ldrb r2, [r2]\n\
- cmp r1, r2\n\
- bne _08020460\n\
- ldrb r1, [r3]\n\
- ldr r0, [r4, 0x8]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- bne _08020460\n\
- ldr r0, _0802045C @ =0x000160a2\n\
- adds r1, r5, r0\n\
- b _0802047C\n\
- .align 2, 0\n\
-_0802043C: .4byte 0x00000149\n\
-_08020440: .4byte gBattleMoveDamage\n\
-_08020444: .4byte gBattleTypeFlags\n\
-_08020448: .4byte gBattlePartyID\n\
-_0802044C: .4byte gSharedMem\n\
-_08020450: .4byte 0x00016018\n\
-_08020454: .4byte gBitTable\n\
-_08020458: .4byte gAbsentBankFlags\n\
-_0802045C: .4byte 0x000160a2\n\
-_08020460:\n\
- ldrb r2, [r3]\n\
- ldr r0, [r4]\n\
- ands r2, r0\n\
- cmp r2, 0\n\
- bne _08020478\n\
- ldr r1, _08020474 @ =0x000160a2\n\
- adds r0, r5, r1\n\
- strb r2, [r0]\n\
- b _08020490\n\
- .align 2, 0\n\
-_08020474: .4byte 0x000160a2\n\
-_08020478:\n\
- ldr r2, _08020484 @ =0x000160a2\n\
- adds r1, r5, r2\n\
-_0802047C:\n\
- movs r0, 0x2\n\
- strb r0, [r1]\n\
- b _08020490\n\
- .align 2, 0\n\
-_08020484: .4byte 0x000160a2\n\
-_08020488:\n\
- ldr r0, _08020530 @ =gSharedMem\n\
- ldr r3, _08020534 @ =0x000160a2\n\
- adds r0, r3\n\
- strb r1, [r0]\n\
-_08020490:\n\
- ldr r1, _08020538 @ =gBattleTextBuff1\n\
- movs r3, 0\n\
- movs r2, 0xFD\n\
- strb r2, [r1]\n\
- movs r5, 0x4\n\
- strb r5, [r1, 0x1]\n\
- ldr r4, _08020530 @ =gSharedMem\n\
- ldr r0, _08020534 @ =0x000160a2\n\
- adds r6, r4, r0\n\
- ldrb r0, [r6]\n\
- strb r0, [r1, 0x2]\n\
- ldr r0, _0802053C @ =0x00016018\n\
- adds r4, r0\n\
- ldrb r0, [r4]\n\
- strb r0, [r1, 0x3]\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x4]\n\
- ldr r1, _08020540 @ =gBattleTextBuff2\n\
- strb r2, [r1]\n\
- strb r3, [r1, 0x1]\n\
- strb r7, [r1, 0x2]\n\
- movs r3, 0xFF\n\
- lsls r3, 8\n\
- ands r7, r3\n\
- asrs r0, r7, 8\n\
- strb r0, [r1, 0x3]\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- strb r0, [r1, 0x4]\n\
- ldr r1, _08020544 @ =gBattleTextBuff3\n\
- strb r2, [r1]\n\
- movs r0, 0x1\n\
- strb r0, [r1, 0x1]\n\
- strb r5, [r1, 0x2]\n\
- movs r0, 0x5\n\
- strb r0, [r1, 0x3]\n\
- mov r0, r8\n\
- ldr r2, [r0]\n\
- strb r2, [r1, 0x4]\n\
- adds r0, r2, 0\n\
- ands r0, r3\n\
- asrs r0, 8\n\
- strb r0, [r1, 0x5]\n\
- movs r0, 0xFF\n\
- lsls r0, 16\n\
- ands r0, r2\n\
- asrs r0, 16\n\
- strb r0, [r1, 0x6]\n\
- lsrs r2, 24\n\
- strb r2, [r1, 0x7]\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- strb r0, [r1, 0x8]\n\
- ldrb r1, [r6]\n\
- movs r0, 0xD\n\
- bl PrepareStringBattle\n\
- ldrb r1, [r4]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _08020548 @ =gPlayerParty\n\
- adds r0, r1\n\
- ldr r3, _0802054C @ =gBattleMons\n\
- ldr r1, _08020550 @ =gBank1\n\
- ldrb r2, [r1]\n\
- movs r1, 0x58\n\
- muls r1, r2\n\
- adds r1, r3\n\
- ldrh r1, [r1]\n\
- bl MonGainEVs\n\
-_0802051E:\n\
- ldr r1, _08020530 @ =gSharedMem\n\
- ldr r3, _08020554 @ =0x0001605f\n\
- adds r2, r1, r3\n\
- ldrb r0, [r2]\n\
- lsrs r0, 1\n\
- strb r0, [r2]\n\
- ldr r0, _08020558 @ =0x0001600f\n\
- adds r1, r0\n\
- b _08020618\n\
- .align 2, 0\n\
-_08020530: .4byte gSharedMem\n\
-_08020534: .4byte 0x000160a2\n\
-_08020538: .4byte gBattleTextBuff1\n\
-_0802053C: .4byte 0x00016018\n\
-_08020540: .4byte gBattleTextBuff2\n\
-_08020544: .4byte gBattleTextBuff3\n\
-_08020548: .4byte gPlayerParty\n\
-_0802054C: .4byte gBattleMons\n\
-_08020550: .4byte gBank1\n\
-_08020554: .4byte 0x0001605f\n\
-_08020558: .4byte 0x0001600f\n\
-_0802055C:\n\
- ldr r0, _08020620 @ =gBattleExecBuffer\n\
- ldr r2, [r0]\n\
- cmp r2, 0\n\
- beq _08020566\n\
- b _08020996\n\
-_08020566:\n\
- ldr r1, _08020624 @ =gBattleBufferB\n\
- ldr r4, _08020628 @ =gSharedMem\n\
- ldr r3, _0802062C @ =0x000160a2\n\
- adds r3, r4\n\
- mov r8, r3\n\
- ldrb r0, [r3]\n\
- lsls r0, 9\n\
- adds r0, r1\n\
- strb r2, [r0]\n\
- ldr r0, _08020630 @ =0x00016018\n\
- adds r7, r4, r0\n\
- ldrb r0, [r7]\n\
- movs r6, 0x64\n\
- muls r0, r6\n\
- ldr r5, _08020634 @ =gPlayerParty\n\
- adds r0, r5\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _08020612\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- cmp r0, 0x64\n\
- beq _08020612\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x3A\n\
- bl GetMonData\n\
- ldr r1, _08020638 @ =0x00017180\n\
- adds r4, r1\n\
- strh r0, [r4]\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x3B\n\
- bl GetMonData\n\
- strh r0, [r4, 0x2]\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x3C\n\
- bl GetMonData\n\
- strh r0, [r4, 0x4]\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x3D\n\
- bl GetMonData\n\
- strh r0, [r4, 0x6]\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x3E\n\
- bl GetMonData\n\
- strh r0, [r4, 0x8]\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x3F\n\
- bl GetMonData\n\
- strh r0, [r4, 0xA]\n\
- ldr r4, _0802063C @ =gActiveBank\n\
- mov r2, r8\n\
- ldrb r0, [r2]\n\
- strb r0, [r4]\n\
- ldrb r1, [r7]\n\
- ldr r0, _08020640 @ =gBattleMoveDamage\n\
- ldrh r2, [r0]\n\
- movs r0, 0\n\
- bl EmitExpBarUpdate\n\
- ldrb r0, [r4]\n\
- bl MarkBufferBankForExecution\n\
-_08020612:\n\
- ldr r1, _08020628 @ =gSharedMem\n\
- ldr r3, _08020644 @ =0x0001600f\n\
- adds r1, r3\n\
-_08020618:\n\
- ldrb r0, [r1]\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
- b _08020996\n\
- .align 2, 0\n\
-_08020620: .4byte gBattleExecBuffer\n\
-_08020624: .4byte gBattleBufferB\n\
-_08020628: .4byte gSharedMem\n\
-_0802062C: .4byte 0x000160a2\n\
-_08020630: .4byte 0x00016018\n\
-_08020634: .4byte gPlayerParty\n\
-_08020638: .4byte 0x00017180\n\
-_0802063C: .4byte gActiveBank\n\
-_08020640: .4byte gBattleMoveDamage\n\
-_08020644: .4byte 0x0001600f\n\
-_08020648:\n\
- ldr r0, _080208AC @ =gBattleExecBuffer\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- beq _08020652\n\
- b _08020996\n\
-_08020652:\n\
- ldr r1, _080208B0 @ =gActiveBank\n\
- ldr r4, _080208B4 @ =gSharedMem\n\
- ldr r2, _080208B8 @ =0x000160a2\n\
- adds r0, r4, r2\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldr r2, _080208BC @ =gBattleBufferB\n\
- ldrb r3, [r1]\n\
- lsls r1, r3, 9\n\
- adds r0, r1, r2\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x21\n\
- beq _0802066E\n\
- b _080208F0\n\
-_0802066E:\n\
- adds r0, r2, 0x1\n\
- adds r0, r1, r0\n\
- ldrb r0, [r0]\n\
- cmp r0, 0xB\n\
- beq _0802067A\n\
- b _080208F0\n\
-_0802067A:\n\
- ldr r0, _080208C0 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080206A8\n\
- ldr r1, _080208C4 @ =gBattlePartyID\n\
- lsls r0, r3, 1\n\
- adds r2, r0, r1\n\
- ldr r0, _080208C8 @ =0x00016018\n\
- adds r1, r4, r0\n\
- ldrh r0, [r2]\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- bne _080206A8\n\
- adds r1, r0, 0\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _080208CC @ =gPlayerParty\n\
- adds r0, r1\n\
- adds r1, r3, 0\n\
- bl sub_80324F8\n\
-_080206A8:\n\
- ldr r1, _080208D0 @ =gBattleTextBuff1\n\
- movs r2, 0xFD\n\
- strb r2, [r1]\n\
- movs r0, 0x4\n\
- strb r0, [r1, 0x1]\n\
- ldr r5, _080208B0 @ =gActiveBank\n\
- ldrb r0, [r5]\n\
- strb r0, [r1, 0x2]\n\
- ldr r0, _080208B4 @ =gSharedMem\n\
- ldr r3, _080208C8 @ =0x00016018\n\
- adds r6, r0, r3\n\
- ldrb r0, [r6]\n\
- strb r0, [r1, 0x3]\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x4]\n\
- ldr r4, _080208D4 @ =gBattleTextBuff2\n\
- strb r2, [r4]\n\
- movs r0, 0x1\n\
- strb r0, [r4, 0x1]\n\
- strb r0, [r4, 0x2]\n\
- movs r0, 0x3\n\
- strb r0, [r4, 0x3]\n\
- ldrb r0, [r6]\n\
- movs r1, 0x64\n\
- mov r8, r1\n\
- mov r2, r8\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- ldr r7, _080208CC @ =gPlayerParty\n\
- adds r0, r7\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- strb r0, [r4, 0x4]\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- strb r0, [r4, 0x5]\n\
- bl BattleScriptPushCursor\n\
- ldr r2, _080208D8 @ =gLeveledUpInBattle\n\
- ldr r1, _080208DC @ =gBitTable\n\
- ldrb r0, [r6]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- ldrb r1, [r2]\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldr r1, _080208E0 @ =gBattlescriptCurrInstr\n\
- ldr r0, _080208E4 @ =BattleScript_LevelUp\n\
- str r0, [r1]\n\
- ldr r4, _080208E8 @ =gBattleMoveDamage\n\
- ldr r2, _080208BC @ =gBattleBufferB\n\
- ldrb r1, [r5]\n\
- lsls r1, 9\n\
- adds r0, r2, 0x2\n\
- adds r0, r1, r0\n\
- ldrb r3, [r0]\n\
- adds r2, 0x3\n\
- adds r1, r2\n\
- ldrb r0, [r1]\n\
- lsls r0, 8\n\
- orrs r3, r0\n\
- str r3, [r4]\n\
- ldrb r0, [r6]\n\
- mov r3, r8\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- adds r0, r7\n\
- movs r1, 0\n\
- bl AdjustFriendship\n\
- ldr r0, _080208C4 @ =gBattlePartyID\n\
- ldrb r1, [r6]\n\
- ldrh r0, [r0]\n\
- cmp r0, r1\n\
- bne _080207EC\n\
- ldr r4, _080208EC @ =gBattleMons\n\
- ldrh r0, [r4, 0x28]\n\
- cmp r0, 0\n\
- beq _080207EC\n\
- mov r0, r8\n\
- muls r0, r1\n\
- adds r0, r7\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- adds r1, r4, 0\n\
- adds r1, 0x2A\n\
- strb r0, [r1]\n\
- ldrb r0, [r6]\n\
- mov r1, r8\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r0, r7\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- strh r0, [r4, 0x28]\n\
- ldrb r0, [r6]\n\
- mov r2, r8\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- adds r0, r7\n\
- movs r1, 0x3A\n\
- bl GetMonData\n\
- strh r0, [r4, 0x2C]\n\
- ldrb r0, [r6]\n\
- mov r3, r8\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- adds r0, r7\n\
- movs r1, 0x3B\n\
- bl GetMonData\n\
- strh r0, [r4, 0x2]\n\
- ldrb r0, [r6]\n\
- mov r1, r8\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r0, r7\n\
- movs r1, 0x3C\n\
- bl GetMonData\n\
- strh r0, [r4, 0x4]\n\
- ldrb r0, [r6]\n\
- mov r2, r8\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- adds r0, r7\n\
- movs r1, 0x3D\n\
- bl GetMonData\n\
- strh r0, [r4, 0x6]\n\
- ldrb r0, [r6]\n\
- mov r3, r8\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- adds r0, r7\n\
- movs r1, 0x3D\n\
- bl GetMonData\n\
- strh r0, [r4, 0x6]\n\
- ldrb r0, [r6]\n\
- mov r1, r8\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r0, r7\n\
- movs r1, 0x3E\n\
- bl GetMonData\n\
- strh r0, [r4, 0x8]\n\
- ldrb r0, [r6]\n\
- mov r2, r8\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- adds r0, r7\n\
- movs r1, 0x3F\n\
- bl GetMonData\n\
- strh r0, [r4, 0xA]\n\
-_080207EC:\n\
- ldr r0, _080208C4 @ =gBattlePartyID\n\
- ldr r1, _080208B4 @ =gSharedMem\n\
- ldr r3, _080208C8 @ =0x00016018\n\
- adds r7, r1, r3\n\
- ldrb r2, [r7]\n\
- ldrh r0, [r0, 0x4]\n\
- cmp r0, r2\n\
- bne _080208F6\n\
- ldr r6, _080208EC @ =gBattleMons\n\
- movs r0, 0xD8\n\
- adds r0, r6\n\
- mov r8, r0\n\
- ldrh r0, [r0]\n\
- cmp r0, 0\n\
- beq _080208F6\n\
- ldr r0, _080208C0 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080208F6\n\
- movs r5, 0x64\n\
- adds r0, r2, 0\n\
- muls r0, r5\n\
- ldr r4, _080208CC @ =gPlayerParty\n\
- adds r0, r4\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xDA\n\
- strb r0, [r1]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- mov r1, r8\n\
- strh r0, [r1]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x3A\n\
- bl GetMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xDC\n\
- strh r0, [r1]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x3B\n\
- bl GetMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xB2\n\
- strh r0, [r1]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x3C\n\
- bl GetMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xB4\n\
- strh r0, [r1]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x3D\n\
- bl GetMonData\n\
- movs r2, 0xB6\n\
- adds r2, r6\n\
- mov r8, r2\n\
- strh r0, [r2]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x3D\n\
- bl GetMonData\n\
- mov r3, r8\n\
- strh r0, [r3]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x3E\n\
- bl GetMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xB8\n\
- strh r0, [r1]\n\
- b _080208F6\n\
- .align 2, 0\n\
-_080208AC: .4byte gBattleExecBuffer\n\
-_080208B0: .4byte gActiveBank\n\
-_080208B4: .4byte gSharedMem\n\
-_080208B8: .4byte 0x000160a2\n\
-_080208BC: .4byte gBattleBufferB\n\
-_080208C0: .4byte gBattleTypeFlags\n\
-_080208C4: .4byte gBattlePartyID\n\
-_080208C8: .4byte 0x00016018\n\
-_080208CC: .4byte gPlayerParty\n\
-_080208D0: .4byte gBattleTextBuff1\n\
-_080208D4: .4byte gBattleTextBuff2\n\
-_080208D8: .4byte gLeveledUpInBattle\n\
-_080208DC: .4byte gBitTable\n\
-_080208E0: .4byte gBattlescriptCurrInstr\n\
-_080208E4: .4byte BattleScript_LevelUp\n\
-_080208E8: .4byte gBattleMoveDamage\n\
-_080208EC: .4byte gBattleMons\n\
-_080208F0:\n\
- ldr r1, _08020904 @ =gBattleMoveDamage\n\
- movs r0, 0\n\
- str r0, [r1]\n\
-_080208F6:\n\
- ldr r0, _08020908 @ =gSharedMem\n\
- ldr r1, _0802090C @ =0x0001600f\n\
- adds r0, r1\n\
- movs r1, 0x5\n\
- strb r1, [r0]\n\
- b _08020996\n\
- .align 2, 0\n\
-_08020904: .4byte gBattleMoveDamage\n\
-_08020908: .4byte gSharedMem\n\
-_0802090C: .4byte 0x0001600f\n\
-_08020910:\n\
- ldr r0, _08020924 @ =gBattleMoveDamage\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- beq _08020930\n\
- ldr r0, _08020928 @ =gSharedMem\n\
- ldr r2, _0802092C @ =0x0001600f\n\
- adds r0, r2\n\
- movs r1, 0x3\n\
- strb r1, [r0]\n\
- b _08020996\n\
- .align 2, 0\n\
-_08020924: .4byte gBattleMoveDamage\n\
-_08020928: .4byte gSharedMem\n\
-_0802092C: .4byte 0x0001600f\n\
-_08020930:\n\
- ldr r2, _08020950 @ =gSharedMem\n\
- ldr r3, _08020954 @ =0x00016018\n\
- adds r1, r2, r3\n\
- ldrb r0, [r1]\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x5\n\
- bhi _0802095C\n\
- ldr r0, _08020958 @ =0x0001600f\n\
- adds r1, r2, r0\n\
- movs r0, 0x2\n\
- strb r0, [r1]\n\
- b _08020996\n\
- .align 2, 0\n\
-_08020950: .4byte gSharedMem\n\
-_08020954: .4byte 0x00016018\n\
-_08020958: .4byte 0x0001600f\n\
-_0802095C:\n\
- ldr r3, _08020968 @ =0x0001600f\n\
- adds r1, r2, r3\n\
- movs r0, 0x6\n\
- strb r0, [r1]\n\
- b _08020996\n\
- .align 2, 0\n\
-_08020968: .4byte 0x0001600f\n\
-_0802096C:\n\
- ldr r0, _080209A4 @ =gBattleExecBuffer\n\
- ldr r5, [r0]\n\
- cmp r5, 0\n\
- bne _08020996\n\
- ldr r4, _080209A8 @ =gBattleMons\n\
- ldr r2, _080209AC @ =gBank1\n\
- ldrb r0, [r2]\n\
- movs r1, 0x58\n\
- muls r0, r1\n\
- adds r0, r4\n\
- movs r3, 0\n\
- strh r5, [r0, 0x2E]\n\
- ldrb r0, [r2]\n\
- muls r0, r1\n\
- adds r0, r4\n\
- adds r0, 0x20\n\
- strb r3, [r0]\n\
- ldr r1, _080209B0 @ =gBattlescriptCurrInstr\n\
- ldr r0, [r1]\n\
- adds r0, 0x2\n\
- str r0, [r1]\n\
-_08020996:\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080209A4: .4byte gBattleExecBuffer\n\
-_080209A8: .4byte gBattleMons\n\
-_080209AC: .4byte gBank1\n\
-_080209B0: .4byte gBattlescriptCurrInstr\n\
- .syntax divided\n");
-}
-
-#endif // NONMATCHING
#ifdef NONMATCHING
static void atk24(void)
@@ -6952,7 +5906,7 @@ _08020B50: .4byte gBattlescriptCurrInstr\n\
static void MoveValuesCleanUp(void)
{
gBattleMoveFlags = 0;
- BATTLE_STRUCT->dmgMultiplier = 1;
+ gBattleStruct->dmgMultiplier = 1;
gCritMultiplier = 1;
gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
gBattleCommunication[6] = 0;
@@ -7417,7 +6371,7 @@ static void atk46_playanimation2(void) // animation Id is stored in the first po
static void atk47_setgraphicalstatchangevalues(void)
{
u8 to_add = 0;
- switch (BATTLE_STRUCT->statChanger & 0xF0)
+ switch (gBattleStruct->statChanger & 0xF0)
{
case 0x10: //+1
to_add = 0xF;
@@ -7432,8 +6386,8 @@ static void atk47_setgraphicalstatchangevalues(void)
to_add = 0x2E;
break;
}
- BATTLE_STRUCT->animArg1 = (BATTLE_STRUCT->statChanger & 0xF) + to_add - 1;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->animArg1 = (gBattleStruct->statChanger & 0xF) + to_add - 1;
+ gBattleStruct->animArg2 = 0;
gBattlescriptCurrInstr++;
}
@@ -7507,14 +6461,14 @@ static void atk48_playstatchangeanimation(void)
stat_animID = 0x38;
}
if ((T2_READ_8(gBattlescriptCurrInstr + 3) & 2 && changeable_stats <= 1)
- || changeable_stats == 0 || BATTLE_STRUCT->filler2[0] != 0)
+ || changeable_stats == 0 || gBattleStruct->filler2[0] != 0)
gBattlescriptCurrInstr += 4;
else
{
EmitBattleAnimation(0, 1, stat_animID);
MarkBufferBankForExecution(gActiveBank);
if ((T2_READ_8(gBattlescriptCurrInstr + 3) & 4) && changeable_stats > 1)
- BATTLE_STRUCT->filler2[0] = 1;
+ gBattleStruct->filler2[0] = 1;
gBattlescriptCurrInstr += 4;
}
}
@@ -7807,14 +6761,14 @@ static void atk49_moveend(void)
hold_effect_atk = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item);
choiced_move_atk = (u16*)(gBankAttacker * (ewram_addr + 0x160E8));
- if (BATTLE_STRUCT->dynamicMoveType)
- move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ if (gBattleStruct->dynamicMoveType)
+ move_type = gBattleStruct->dynamicMoveType & 0x3F;
else
move_type = gBattleMoves[gCurrentMove].type;
do
{
- switch (BATTLE_STRUCT->cmd49StateTracker)
+ switch (gBattleStruct->cmd49StateTracker)
{
case 0: //rage check
if (gBattleMons[gBankTarget].status2 & STATUS2_RAGE
@@ -7828,7 +6782,7 @@ static void atk49_moveend(void)
gBattlescriptCurrInstr = BattleScript_RageIsBuilding;
effect = 1;
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 1: //defrosting check
if (gBattleMons[gBankTarget].status1 & STATUS_FREEZE
@@ -7844,28 +6798,28 @@ static void atk49_moveend(void)
gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove;
effect = 1;
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 2: //target synchronize
if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBankTarget, 0, 0, 0))
effect = 1;
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 3: //contact abilities
if (AbilityBattleEffects(ABILITYEFFECT_CONTACT, gBankTarget, 0, 0, 0))
effect = 1;
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 4: //status immunities
if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0))
effect = 1; //it loops through 4 banks, so we increment after its done with all banks
else
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 5: //attacker synchronize
if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBankAttacker, 0, 0, 0))
effect = 1;
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 6: //update choice band move
if (gHitMarker & HITMARKER_OBEYS && hold_effect_atk == HOLD_EFFECT_CHOICE_BAND
@@ -7877,7 +6831,7 @@ static void atk49_moveend(void)
if (i == 4)
*choiced_move_atk = 0;
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 7: //changed held items
for (i = 0; i < gNoOfAllBanks; i++)
@@ -7886,7 +6840,7 @@ static void atk49_moveend(void)
if (CHANGED_ITEM(i))
gBattleMons[i].item = CHANGED_ITEM(i);
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 8: //make sprite invisible
if (gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)
@@ -7896,7 +6850,7 @@ static void atk49_moveend(void)
EmitSpriteInvisibility(0, 1);
MarkBufferBankForExecution(gActiveBank);
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 9: //semi-invlurneable attacker make visible
if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
@@ -7908,7 +6862,7 @@ static void atk49_moveend(void)
gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER);
gSpecialStatuses[gBankAttacker].restored_bank_sprite = 1;
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 10: //semi-invlurneable target make visible
if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
@@ -7920,7 +6874,7 @@ static void atk49_moveend(void)
gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER);
gSpecialStatuses[gBankTarget].restored_bank_sprite = 1;
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 11: //
}
@@ -7929,7 +6883,7 @@ static void atk49_moveend(void)
}
#else
__attribute__((naked))
-static void atk49_moveend(void)
+void atk49_moveend(void)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -8865,7 +7819,7 @@ _08021FA0:\n\
ldr r0, _08021FD4 @ =0x0000ffff\n\
cmp r2, r0\n\
bne _08021FEC\n\
- ldr r1, _08021FE8 @ =gMoveHitWith\n\
+ ldr r1, _08021FE8 @ =gLastLandedMoves\n\
ldr r4, _08021FDC @ =gBankTarget\n\
ldrb r0, [r4]\n\
lsls r0, 1\n\
@@ -8879,9 +7833,9 @@ _08021FD8: .4byte gUnknown_02024C4C\n\
_08021FDC: .4byte gBankTarget\n\
_08021FE0: .4byte gUnknown_02024C5C\n\
_08021FE4: .4byte gBattleMoveFlags\n\
-_08021FE8: .4byte gMoveHitWith\n\
+_08021FE8: .4byte gLastLandedMoves\n\
_08021FEC:\n\
- ldr r0, _08022014 @ =gMoveHitWith\n\
+ ldr r0, _08022014 @ =gLastLandedMoves\n\
ldr r5, _08022018 @ =gBankTarget\n\
ldrb r1, [r5]\n\
lsls r1, 1\n\
@@ -8894,7 +7848,7 @@ _08021FEC:\n\
ldrb r3, [r0]\n\
cmp r3, 0\n\
beq _08022028\n\
- ldr r0, _08022024 @ =gUnknown_02024C44\n\
+ ldr r0, _08022024 @ =gLastHitByType\n\
ldrb r1, [r5]\n\
lsls r1, 1\n\
adds r1, r0\n\
@@ -8902,13 +7856,13 @@ _08021FEC:\n\
ands r0, r3\n\
b _08021C22\n\
.align 2, 0\n\
-_08022014: .4byte gMoveHitWith\n\
+_08022014: .4byte gLastLandedMoves\n\
_08022018: .4byte gBankTarget\n\
_0802201C: .4byte gCurrentMove\n\
_08022020: .4byte 0x0001601c\n\
-_08022024: .4byte gUnknown_02024C44\n\
+_08022024: .4byte gLastHitByType\n\
_08022028:\n\
- ldr r0, _08022044 @ =gUnknown_02024C44\n\
+ ldr r0, _08022044 @ =gLastHitByType\n\
ldr r1, _08022048 @ =gBankTarget\n\
ldrb r2, [r1]\n\
lsls r2, 1\n\
@@ -8922,10 +7876,10 @@ _08022028:\n\
strh r0, [r2]\n\
b _08022244\n\
.align 2, 0\n\
-_08022044: .4byte gUnknown_02024C44\n\
+_08022044: .4byte gLastHitByType\n\
_08022048: .4byte gBankTarget\n\
_0802204C:\n\
- ldr r0, _0802205C @ =gMoveHitWith\n\
+ ldr r0, _0802205C @ =gLastLandedMoves\n\
ldr r2, _08022060 @ =gBankTarget\n\
ldrb r1, [r2]\n\
lsls r1, 1\n\
@@ -8933,7 +7887,7 @@ _0802204C:\n\
ldr r0, _08022064 @ =0x0000ffff\n\
b _08021C22\n\
.align 2, 0\n\
-_0802205C: .4byte gMoveHitWith\n\
+_0802205C: .4byte gLastLandedMoves\n\
_08022060: .4byte gBankTarget\n\
_08022064: .4byte 0x0000ffff\n\
_08022068:\n\
@@ -9250,7 +8204,7 @@ static void atk4A_typecalc2(void)
{
gLastUsedAbility = gBattleMons[gBankTarget].ability;
gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED);
- gMoveHitWith[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
gBattleCommunication[6] = move_type;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
@@ -9305,7 +8259,7 @@ static void atk4A_typecalc2(void)
{
gLastUsedAbility = ABILITY_WONDER_GUARD;
gBattleMoveFlags |= MOVESTATUS_MISSED;
- gMoveHitWith[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
gBattleCommunication[6] = 3;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
@@ -9340,27 +8294,19 @@ static void atk4C_getswitchedmondata(void)
gBattlescriptCurrInstr += 2;
}
-static inline u8 get_knocked_off_byte(u8 bank)
-{
- register u32 side asm("r2") = GetBankSide(bank);
- register struct WishFutureKnock* dummy = &gWishFutureKnock;
- register u8* aa = ((u8*)((u8*)(dummy)));
- register u8* bb = aa + 0x29;
- register u8* cc asm("r0") = side + bb;
- return *cc;
-}
-
static void atk4D_switchindataupdate(void)
{
- struct BattlePokemon OldData;
- int i;
+ struct BattlePokemon oldData;
+ s32 i;
u8 *monData;
+
if (gBattleExecBuffer)
return;
- gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
- OldData = gBattleMons[gActiveBank];
+ gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
+ oldData = gBattleMons[gActiveBank];
monData = (u8*)(&gBattleMons[gActiveBank]);
+
for (i = 0; i < sizeof(struct BattlePokemon); i++)
{
monData[i] = gBattleBufferB[gActiveBank][4 + i];
@@ -9369,8 +8315,10 @@ static void atk4D_switchindataupdate(void)
gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1;
gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2;
gBattleMons[gActiveBank].ability = GetAbilityBySpecies(gBattleMons[gActiveBank].species, gBattleMons[gActiveBank].altAbility);
- //check knocked off item
- if (get_knocked_off_byte(gActiveBank) & gBitTable[gBattlePartyID[gActiveBank]])
+
+ // check knocked off item
+ i = GetBankSide(gActiveBank);
+ if (gWishFutureKnock.knockedOffPokes[i] & gBitTable[gBattlePartyID[gActiveBank]])
{
gBattleMons[gActiveBank].item = 0;
}
@@ -9379,17 +8327,16 @@ static void atk4D_switchindataupdate(void)
{
for (i = 0; i < 8; i++)
{
- gBattleMons[gActiveBank].statStages[i] = OldData.statStages[i];
+ gBattleMons[gActiveBank].statStages[i] = oldData.statStages[i];
}
- gBattleMons[gActiveBank].status2 = OldData.status2;
+ gBattleMons[gActiveBank].status2 = oldData.status2;
}
- SwitchInClearStructs();
- BATTLE_STRUCT->scriptingActive = gActiveBank;
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 7;
- gBattleTextBuff1[2] = gActiveBank;
- gBattleTextBuff1[3] = gBattlePartyID[gActiveBank];
- gBattleTextBuff1[4] = EOS;
+
+ SwitchInClearSetData();
+
+ gBattleStruct->scriptingActive = gActiveBank;
+
+ PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gActiveBank, gBattlePartyID[gActiveBank]);
gBattlescriptCurrInstr += 2;
}
@@ -9484,7 +8431,7 @@ static void atk4F_jumpifcantswitch(void)
void sub_8022A3C(u8 unkown)
{
BATTLE_PARTY_ID(gActiveBank) = gBattlePartyID[gActiveBank];
- EmitChoosePokemon(0, 1, unkown, 0, BATTLE_STRUCT->unk1606C[gActiveBank]);
+ EmitChoosePokemon(0, 1, unkown, 0, gBattleStruct->unk1606C[gActiveBank]);
MarkBufferBankForExecution(gActiveBank);
}
@@ -10630,7 +9577,7 @@ static void atk52_switchineffects(void)
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- BATTLE_STRUCT->scriptingActive = gActiveBank;
+ gBattleStruct->scriptingActive = gActiveBank;
BattleScriptPushCursor();
if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0)
@@ -10737,9 +9684,9 @@ void atk59_handlelearnnewmove(void)
u8* loc1 = T1_READ_PTR(gBattlescriptCurrInstr + 1);
u8* loc2 = T1_READ_PTR(gBattlescriptCurrInstr + 5);
- u16 ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], T2_READ_8(gBattlescriptCurrInstr + 9));
+ u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterID], T2_READ_8(gBattlescriptCurrInstr + 9));
while (ret == 0xFFFE)
- ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0);
+ ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterID], 0);
if (ret == 0)
{
@@ -10752,12 +9699,12 @@ void atk59_handlelearnnewmove(void)
else
{
gActiveBank = GetBankByIdentity(0);
- if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
+ if (gBattlePartyID[gActiveBank] == gBattleStruct->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) //what is else if
{
gActiveBank = GetBankByIdentity(2);
- if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
+ if (gBattlePartyID[gActiveBank] == gBattleStruct->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret);
}
gBattlescriptCurrInstr = loc1;
@@ -10781,11 +9728,11 @@ void sub_8023AD8(void)
static void atk5A_yesnoboxlearnmove(void)
{
gActiveBank = 0;
- switch (BATTLE_STRUCT->atk5A_StateTracker)
+ switch (gBattleStruct->atk5A_StateTracker)
{
case 0:
sub_8023A80();
- BATTLE_STRUCT->atk5A_StateTracker++;
+ gBattleStruct->atk5A_StateTracker++;
gBattleCommunication[1] = 0;
sub_802BC6C();
break;
@@ -10811,7 +9758,7 @@ static void atk5A_yesnoboxlearnmove(void)
{
sub_8023AD8();
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- BATTLE_STRUCT->atk5A_StateTracker++;
+ gBattleStruct->atk5A_StateTracker++;
return;
}
goto state_tracker_4;
@@ -10820,14 +9767,14 @@ static void atk5A_yesnoboxlearnmove(void)
{
PlaySE(SE_SELECT);
state_tracker_4:
- BATTLE_STRUCT->atk5A_StateTracker = 4;
+ gBattleStruct->atk5A_StateTracker = 4;
}
break;
case 2:
if (!gPaletteFade.active)
{
- ShowSelectMovePokemonSummaryScreen(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn);
- BATTLE_STRUCT->atk5A_StateTracker++;
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, gBattleStruct->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn);
+ gBattleStruct->atk5A_StateTracker++;
}
break;
case 3:
@@ -10836,15 +9783,15 @@ static void atk5A_yesnoboxlearnmove(void)
u8 move_pos = sub_809FA30();
if (move_pos == 4)
{
- BATTLE_STRUCT->atk5A_StateTracker = 4;
+ gBattleStruct->atk5A_StateTracker = 4;
}
else
{
- u16 move = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MOVE1 + move_pos);
+ u16 move = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MOVE1 + move_pos);
if (IsHMMove2(move))
{
PrepareStringBattle(0x13F, gActiveBank);
- BATTLE_STRUCT->atk5A_StateTracker = 5;
+ gBattleStruct->atk5A_StateTracker = 5;
}
else
{
@@ -10860,15 +9807,15 @@ static void atk5A_yesnoboxlearnmove(void)
ptr += 4;
}
ptr[0] = 0xFF;
- RemoveMonPPBonus(&gPlayerParty[BATTLE_STRUCT->expGetterID], move_pos);
- SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], gMoveToLearn, move_pos);
- if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED)
+ RemoveMonPPBonus(&gPlayerParty[gBattleStruct->expGetterID], move_pos);
+ SetMonMoveSlot(&gPlayerParty[gBattleStruct->expGetterID], gMoveToLearn, move_pos);
+ if (gBattlePartyID[0] == gBattleStruct->expGetterID && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED)
&& !(gDisableStructs[0].unk18_b & gBitTable[move_pos]))
{
RemoveBattleMonPPBonus(&gBattleMons[0], move_pos);
SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, move_pos);
}
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED)
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[2] == gBattleStruct->expGetterID && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED)
&& !(gDisableStructs[2].unk18_b & gBitTable[move_pos]))
{
RemoveBattleMonPPBonus(&gBattleMons[2], move_pos);
@@ -10885,7 +9832,7 @@ static void atk5A_yesnoboxlearnmove(void)
case 5:
if (gBattleExecBuffer == 0)
{
- BATTLE_STRUCT->atk5A_StateTracker = 2;
+ gBattleStruct->atk5A_StateTracker = 2;
}
break;
}
@@ -10893,11 +9840,11 @@ static void atk5A_yesnoboxlearnmove(void)
static void atk5B_yesnoboxstoplearningmove(void)
{
- switch (BATTLE_STRUCT->atk5A_StateTracker)
+ switch (gBattleStruct->atk5A_StateTracker)
{
case 0:
sub_8023A80();
- BATTLE_STRUCT->atk5A_StateTracker++;
+ gBattleStruct->atk5A_StateTracker++;
gBattleCommunication[1] = 0;
sub_802BC6C();
break;
@@ -10959,7 +9906,7 @@ static void atk5D_getmoneyreward(void)
u32 money_to_give;
if (gTrainerBattleOpponent == 0x400)
{
- money_to_give = 2 * BATTLE_STRUCT->moneyMultiplier * MONEY_UNKNOWN;
+ money_to_give = 2 * gBattleStruct->moneyMultiplier * MONEY_UNKNOWN;
}
else
{
@@ -10987,7 +9934,7 @@ static void atk5D_getmoneyreward(void)
}
for (; gTrainerMoney[i * 4] != 0xFF && gTrainerMoney[i * 4 + 1] != gTrainers[gTrainerBattleOpponent].trainerClass ; i++) {}
- money_to_give = (r5 << 2) * BATTLE_STRUCT->moneyMultiplier;
+ money_to_give = (r5 << 2) * gBattleStruct->moneyMultiplier;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
money_to_give = 2 * gTrainerMoney[i * 4 + 1] * money_to_give;
else
@@ -11207,6 +10154,76 @@ _08024190: .4byte gBattlescriptCurrInstr\n\
}
#endif //NONMATCHING
+/*
+static u32 GetTrainerMoneyToGive(u16 trainerId)
+{
+ u32 i = 0;
+ u32 lastMonLevel = 0;
+ u32 moneyReward = 0;
+
+ if (trainerId == SECRET_BASE_OPPONENT)
+ {
+ moneyReward = 20 * eSecretBaseRecord->partyLevels[0] * gBattleStruct->moneyMultiplier;
+ }
+ else
+ {
+ switch (gTrainers[trainerId].partyFlags)
+ {
+ case 0:
+ {
+ const struct TrainerMonNoItemDefaultMoves *party = gTrainers[trainerId].party.NoItemDefaultMoves;
+ lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
+ }
+ break;
+ case F_TRAINER_PARTY_CUSTOM_MOVESET:
+ {
+ const struct TrainerMonNoItemCustomMoves *party = gTrainers[trainerId].party.NoItemCustomMoves;
+ lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
+ }
+ break;
+ case F_TRAINER_PARTY_HELD_ITEM:
+ {
+ const struct TrainerMonItemDefaultMoves *party = gTrainers[trainerId].party.ItemDefaultMoves;
+ lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
+ }
+ break;
+ case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM:
+ {
+ const struct TrainerMonItemCustomMoves *party = gTrainers[trainerId].party.ItemCustomMoves;
+ lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
+ }
+ break;
+ }
+
+ for (; gTrainerMoneyTable[i].classId != 0xFF; i++)
+ {
+ if (gTrainerMoneyTable[i].classId == gTrainers[trainerId].trainerClass)
+ break;
+ }
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * 2 * gTrainerMoneyTable[i].value;
+ else
+ moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * gTrainerMoneyTable[i].value;
+ }
+
+ return moneyReward;
+}
+
+static void atk5D_getmoneyreward(void)
+{
+ u32 moneyReward = GetTrainerMoneyToGive(gTrainerBattleOpponent_A);
+ if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
+ moneyReward += GetTrainerMoneyToGive(gTrainerBattleOpponent_B);
+
+ AddMoney(&gSaveBlock1Ptr->money, moneyReward);
+
+ PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 5, moneyReward)
+
+ gBattlescriptCurrInstr++;
+}
+*/
+
static void atk5E_8025A70(void)
{
gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
@@ -11471,7 +10488,7 @@ static void atk6C_drawlvlupbox(void)
{
u8 r1 = 0;
u8 r7 = 0;
- switch (BATTLE_STRUCT->atk6C_statetracker)
+ switch (gBattleStruct->atk6C_statetracker)
{
case 0:
sub_802BBD4(0xB, 0, 0x1D, 0x7, r1);
@@ -11956,13 +10973,13 @@ static void atk73_hpthresholds(void)
result = 1;
if (result > 69 || !gBattleMons[opposing_bank].hp)
- BATTLE_STRUCT->hpScale = 0;
+ gBattleStruct->hpScale = 0;
else if (result > 39)
- BATTLE_STRUCT->hpScale = 1;
+ gBattleStruct->hpScale = 1;
else if (result > 9)
- BATTLE_STRUCT->hpScale = 2;
+ gBattleStruct->hpScale = 2;
else
- BATTLE_STRUCT->hpScale = 3;
+ gBattleStruct->hpScale = 3;
}
gBattlescriptCurrInstr += 2;
@@ -11977,17 +10994,17 @@ static void atk74_hpthresholds2(void)
{
gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
opposing_bank = gActiveBank ^ 1;
- hp_switchout = ewram160BCarr(GetBankSide(opposing_bank)); //BATTLE_STRUCT->HP_OnSwitchout[GetBankSide(opposing_bank)];
+ hp_switchout = ewram160BCarr(GetBankSide(opposing_bank)); //gBattleStruct->HP_OnSwitchout[GetBankSide(opposing_bank)];
result = (hp_switchout - gBattleMons[opposing_bank].hp) * 100 / hp_switchout;
if (gBattleMons[opposing_bank].hp >= hp_switchout)
- BATTLE_STRUCT->hpScale = 0;
+ gBattleStruct->hpScale = 0;
else if (result <= 29)
- BATTLE_STRUCT->hpScale = 1;
+ gBattleStruct->hpScale = 1;
else if (result <= 69)
- BATTLE_STRUCT->hpScale = 2;
+ gBattleStruct->hpScale = 2;
else
- BATTLE_STRUCT->hpScale = 3;
+ gBattleStruct->hpScale = 3;
}
gBattlescriptCurrInstr += 2;
@@ -12039,9 +11056,9 @@ static void atk76_various(void)
{
int i;
u16* choiced_move;
- if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID)
+ if (gBattlePartyID[0] == gBattleStruct->expGetterID)
goto ACTIVE_0;
- if (gBattlePartyID[2] != BATTLE_STRUCT->expGetterID)
+ if (gBattlePartyID[2] != gBattleStruct->expGetterID)
break;
if (gBattlePartyID[0] == gBattlePartyID[2])
{
@@ -12355,7 +11372,7 @@ bool8 UproarWakeUpCheck(u8 bank)
{
if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || gBattleMons[bank].ability == ABILITY_SOUNDPROOF) //wtf gamefreak, you should check this only once, not every time in a loop...
continue;
- BATTLE_STRUCT->scriptingActive = i;
+ gBattleStruct->scriptingActive = i;
if (gBankTarget == 0xFF)
gBankTarget = i;
else if (gBankTarget == i)
@@ -12424,7 +11441,7 @@ static void atk86_stockpiletobasedamage(void)
gSideAffecting[GetBankIdentity(gBankTarget) & 1], 0,
0, gBankAttacker, gBankTarget)
* gDisableStructs[gBankAttacker].stockpileCounter;
- BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter;
+ gBattleStruct->animTurn = gDisableStructs[gBankAttacker].stockpileCounter;
if (gProtectStructs[gBankAttacker].helpingHand)
gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
@@ -12455,7 +11472,7 @@ static void atk87_stockpiletohpheal(void)
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
gBattleMoveDamage *= -1;
- BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter;
+ gBattleStruct->animTurn = gDisableStructs[gBankAttacker].stockpileCounter;
gDisableStructs[gBankAttacker].stockpileCounter = 0;
gBattlescriptCurrInstr += 5;
gBankTarget = gBankAttacker;
@@ -12464,767 +11481,186 @@ static void atk87_stockpiletohpheal(void)
static void atk88_negativedamage(void)
{
- gBattleMoveDamage = -(gHP_dealt / 2);
+ gBattleMoveDamage = -(gHpDealt / 2);
if (gBattleMoveDamage == 0)
gBattleMoveDamage = -1;
gBattlescriptCurrInstr++;
}
-#ifdef NONMATCHING
-u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr)
+static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
{
- u8 r9 = 0;
- u8 r10 = 0;
- u8 index;
- if (flags & 0x40)
+ bool8 certain = FALSE;
+ bool8 notProtectAffected = FALSE;
+ u32 index;
+
+ if (flags & MOVE_EFFECT_AFFECTS_USER)
gActiveBank = gBankAttacker;
else
gActiveBank = gBankTarget;
- flags &= ~(0x40);
- if (flags & 0x80)
- r9++;
- flags &= ~(0x80);
- if (flags & 0x20)
- r10++;
- flags &= ~(0x20);
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 5;
- gBattleTextBuff1[2] = stat;
- gBattleTextBuff1[3] = 0xFF;
+ flags &= ~(MOVE_EFFECT_AFFECTS_USER);
+
+ if (flags & MOVE_EFFECT_CERTAIN)
+ certain++;
+ flags &= ~(MOVE_EFFECT_CERTAIN);
+
+ if (flags & STAT_CHANGE_NOT_PROTECT_AFFECTED)
+ notProtectAffected++;
+ flags &= ~(STAT_CHANGE_NOT_PROTECT_AFFECTED);
- if ((statchanger << 0x18) < 0) //stat decrease
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, statId)
+
+ if ((statValue << 0x18) < 0) // stat decrease
{
- if (gSideTimers[GetBankIdentity(gActiveBank) & 1].mistTimer && !r9 && gCurrentMove != MOVE_CURSE)
+ if (gSideTimers[GET_BANK_SIDE(gActiveBank)].mistTimer
+ && !certain && gCurrentMove != MOVE_CURSE)
{
- if (flags == 1)
+ if (flags == STAT_CHANGE_BS_PTR)
{
- if (gSpecialStatuses[gActiveBank].statloweringflag)
- gBattlescriptCurrInstr = bs_ptr;
+ if (gSpecialStatuses[gActiveBank].statLowered)
+ {
+ gBattlescriptCurrInstr = BS_ptr;
+ }
else
{
- BattleScriptPush(bs_ptr);
- BATTLE_STRUCT->scriptingActive = gActiveBank;
+ BattleScriptPush(BS_ptr);
+ gBattleStruct->scriptingActive = gActiveBank;
gBattlescriptCurrInstr = BattleScript_MistProtected;
- gSpecialStatuses[gActiveBank].statloweringflag = 1;
+ gSpecialStatuses[gActiveBank].statLowered = 1;
}
}
- return 1;
+ return STAT_CHANGE_DIDNT_WORK;
}
- else if (gCurrentMove != MOVE_CURSE && r10 != 1 && JumpIfMoveAffectedByProtect(0))
+ else if (gCurrentMove != MOVE_CURSE
+ && notProtectAffected != TRUE && JumpIfMoveAffectedByProtect(0))
{
gBattlescriptCurrInstr = BattleScript_ButItFailed;
- return 1;
+ return STAT_CHANGE_DIDNT_WORK;
}
- else if ((gBattleMons[gActiveBank].ability == ABILITY_CLEAR_BODY || gBattleMons[gActiveBank].ability == ABILITY_WHITE_SMOKE) && !r9 && gCurrentMove != MOVE_CURSE)
+ else if ((gBattleMons[gActiveBank].ability == ABILITY_CLEAR_BODY
+ || gBattleMons[gActiveBank].ability == ABILITY_WHITE_SMOKE)
+ && !certain && gCurrentMove != MOVE_CURSE)
{
- if (flags == 1)
+ if (flags == STAT_CHANGE_BS_PTR)
{
- if (gSpecialStatuses[gActiveBank].statloweringflag)
- gBattlescriptCurrInstr = bs_ptr;
+ if (gSpecialStatuses[gActiveBank].statLowered)
+ {
+ gBattlescriptCurrInstr = BS_ptr;
+ }
else
{
- BattleScriptPush(bs_ptr);
- BATTLE_STRUCT->scriptingActive = gActiveBank;
+ BattleScriptPush(BS_ptr);
+ gBattleStruct->scriptingActive = gActiveBank;
gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss;
gLastUsedAbility = gBattleMons[gActiveBank].ability;
RecordAbilityBattle(gActiveBank, gLastUsedAbility);
- gSpecialStatuses[gActiveBank].statloweringflag = 1;
+ gSpecialStatuses[gActiveBank].statLowered = 1;
}
}
- return 1;
+ return STAT_CHANGE_DIDNT_WORK;
}
- else if (gBattleMons[gActiveBank].ability == ABILITY_KEEN_EYE && !r9 && stat == STAT_STAGE_ACC)
+ else if (gBattleMons[gActiveBank].ability == ABILITY_KEEN_EYE
+ && !certain && statId == STAT_STAGE_ACC)
{
- if (flags == 1)
+ if (flags == STAT_CHANGE_BS_PTR)
{
- BattleScriptPush(bs_ptr);
- BATTLE_STRUCT->scriptingActive = gActiveBank;
+ BattleScriptPush(BS_ptr);
+ gBattleStruct->scriptingActive = gActiveBank;
gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss;
gLastUsedAbility = gBattleMons[gActiveBank].ability;
RecordAbilityBattle(gActiveBank, gLastUsedAbility);
}
- return 1;
+ return STAT_CHANGE_DIDNT_WORK;
}
- else if (gBattleMons[gActiveBank].ability == ABILITY_HYPER_CUTTER && !r9 && stat == STAT_STAGE_ATK)
+ else if (gBattleMons[gActiveBank].ability == ABILITY_HYPER_CUTTER
+ && !certain && statId == STAT_STAGE_ATK)
{
- if (flags == 1)
+ if (flags == STAT_CHANGE_BS_PTR)
{
- BattleScriptPush(bs_ptr);
- BATTLE_STRUCT->scriptingActive = gActiveBank;
+ BattleScriptPush(BS_ptr);
+ gBattleStruct->scriptingActive = gActiveBank;
gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss;
gLastUsedAbility = gBattleMons[gActiveBank].ability;
RecordAbilityBattle(gActiveBank, gLastUsedAbility);
}
- return 1;
+ return STAT_CHANGE_DIDNT_WORK;
}
else if (gBattleMons[gActiveBank].ability == ABILITY_SHIELD_DUST && flags == 0)
- return 1;
- else //decrease
{
- statchanger = -((statchanger >> 4) & (7));
- gBattleTextBuff2[0] = 0xFD;
+ return STAT_CHANGE_DIDNT_WORK;
+ }
+ else // try to decrease
+ {
+ statValue = -GET_STAT_BUFF_VALUE(statValue);
+ gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN;
index = 1;
- if (statchanger == -2)
+ if (statValue == -2)
{
- gBattleTextBuff2[1] = 0;
- gBattleTextBuff2[2] = 0xD3; //harshly
- gBattleTextBuff2[3] = 0x0;
+ gBattleTextBuff2[1] = B_BUFF_STRING;
+ gBattleTextBuff2[2] = STRINGID_STATHARSHLY;
+ gBattleTextBuff2[3] = STRINGID_STATHARSHLY >> 8;
index = 4;
}
- gBattleTextBuff2[index] = 0;
+ gBattleTextBuff2[index] = B_BUFF_STRING;
index++;
- gBattleTextBuff2[index] = 0xD4; //fell
+ gBattleTextBuff2[index] = STRINGID_STATFELL;
index++;
- gBattleTextBuff2[index] = 0;
+ gBattleTextBuff2[index] = STRINGID_STATFELL >> 8;
index++;
- gBattleTextBuff2[index] = 0xFF;
+ gBattleTextBuff2[index] = B_BUFF_EOS;
- if (gBattleMons[gActiveBank].statStages[stat] == 0)
- {
+ if (gBattleMons[gActiveBank].statStages[statId] == 0)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
- }
else
- {
- u8 stringID = 0;
- if (gBankTarget == gActiveBank)
- stringID = 1;
- gBattleCommunication[MULTISTRING_CHOOSER] = stringID;
- }
+ gBattleCommunication[MULTISTRING_CHOOSER] = (gBankTarget == gActiveBank);
+
}
}
- else //stat increase
+ else // stat increase
{
- statchanger = (statchanger >> 4) & (7);
- gBattleTextBuff2[0] = 0xFD;
+ statValue = GET_STAT_BUFF_VALUE(statValue);
+ gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN;
index = 1;
- if (statchanger == 2)
+ if (statValue == 2)
{
- gBattleTextBuff2[1] = 0;
- gBattleTextBuff2[2] = 0xD1; //sharply
- gBattleTextBuff2[3] = 0x0;
+ gBattleTextBuff2[1] = B_BUFF_STRING;
+ gBattleTextBuff2[2] = STRINGID_STATSHARPLY;
+ gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8;
index = 4;
}
- gBattleTextBuff2[index] = 0;
+ gBattleTextBuff2[index] = B_BUFF_STRING;
index++;
- gBattleTextBuff2[index] = 0xD2; //rose
+ gBattleTextBuff2[index] = STRINGID_STATROSE;
index++;
- gBattleTextBuff2[index] = 0;
+ gBattleTextBuff2[index] = STRINGID_STATROSE >> 8;
index++;
- gBattleTextBuff2[index] = 0xFF;
+ gBattleTextBuff2[index] = B_BUFF_EOS;
- if (gBattleMons[gActiveBank].statStages[stat] == 0xC)
- {
+ if (gBattleMons[gActiveBank].statStages[statId] == 0xC)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
- }
else
- {
- u8 stringID = 0;
- if (gBankTarget == gActiveBank)
- stringID = 1;
- gBattleCommunication[MULTISTRING_CHOOSER] = stringID;
- }
+ gBattleCommunication[MULTISTRING_CHOOSER] = (gBankTarget == gActiveBank);
}
- gBattleMons[gActiveBank].statStages[stat] += statchanger;
- if (gBattleMons[gActiveBank].statStages[stat] < 0)
- gBattleMons[gActiveBank].statStages[stat] = 0;
- if (gBattleMons[gActiveBank].statStages[stat] > 0xC)
- gBattleMons[gActiveBank].statStages[stat] = 0xC;
+ gBattleMons[gActiveBank].statStages[statId] += statValue;
+ if (gBattleMons[gActiveBank].statStages[statId] < 0)
+ gBattleMons[gActiveBank].statStages[statId] = 0;
+ if (gBattleMons[gActiveBank].statStages[statId] > 0xC)
+ gBattleMons[gActiveBank].statStages[statId] = 0xC;
- if (gBattleCommunication[MULTISTRING_CHOOSER] == 2)
- {
- if (flags & 1)
- gBattleMoveFlags |= MOVESTATUS_MISSED;
- if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & 1)) //what the actual fuck gamefreak...
- return 1;
- }
- return 0;
-}
+ if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && flags & STAT_CHANGE_BS_PTR)
+ gBattleMoveFlags |= MOVESTATUS_MISSED;
-#else
-__attribute__((naked))
-u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr)
-{
- 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\
- mov r8, r3\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- lsls r1, 24\n\
- lsrs r7, r1, 24\n\
- lsls r2, 24\n\
- lsrs r5, r2, 24\n\
- movs r0, 0\n\
- mov r9, r0\n\
- mov r10, r0\n\
- movs r0, 0x40\n\
- ands r0, r5\n\
- cmp r0, 0\n\
- beq _08025E54\n\
- ldr r0, _08025E4C @ =gActiveBank\n\
- ldr r1, _08025E50 @ =gBankAttacker\n\
- b _08025E58\n\
- .align 2, 0\n\
-_08025E4C: .4byte gActiveBank\n\
-_08025E50: .4byte gBankAttacker\n\
-_08025E54:\n\
- ldr r0, _08025EF8 @ =gActiveBank\n\
- ldr r1, _08025EFC @ =gBankTarget\n\
-_08025E58:\n\
- ldrb r1, [r1]\n\
- strb r1, [r0]\n\
- movs r0, 0xBF\n\
- ands r5, r0\n\
- movs r0, 0x80\n\
- ands r0, r5\n\
- cmp r0, 0\n\
- beq _08025E72\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_08025E72:\n\
- movs r0, 0x7F\n\
- ands r5, r0\n\
- movs r0, 0x20\n\
- ands r0, r5\n\
- cmp r0, 0\n\
- beq _08025E88\n\
- mov r0, r10\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
-_08025E88:\n\
- movs r0, 0xDF\n\
- ands r5, r0\n\
- ldr r1, _08025F00 @ =gBattleTextBuff1\n\
- movs r4, 0\n\
- movs r2, 0xFD\n\
- strb r2, [r1]\n\
- movs r0, 0x5\n\
- strb r0, [r1, 0x1]\n\
- strb r7, [r1, 0x2]\n\
- movs r3, 0x1\n\
- negs r3, r3\n\
- mov r12, r3\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x3]\n\
- lsls r0, r6, 24\n\
- cmp r0, 0\n\
- blt _08025EAC\n\
- b _080261B0\n\
-_08025EAC:\n\
- ldr r4, _08025F04 @ =gSideTimers\n\
- ldr r1, _08025EF8 @ =gActiveBank\n\
- ldrb r0, [r1]\n\
- bl GetBankIdentity\n\
- movs r1, 0x1\n\
- ands r1, r0\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r4\n\
- ldrb r0, [r0, 0x2]\n\
- cmp r0, 0\n\
- beq _08025F54\n\
- mov r2, r9\n\
- cmp r2, 0\n\
- bne _08025F54\n\
- ldr r0, _08025F08 @ =gCurrentMove\n\
- ldrh r0, [r0]\n\
- cmp r0, 0xAE\n\
- beq _08025F84\n\
- cmp r5, 0x1\n\
- bne _08025F74\n\
- ldr r4, _08025F0C @ =gSpecialStatuses\n\
- ldr r3, _08025EF8 @ =gActiveBank\n\
- ldrb r0, [r3]\n\
- lsls r1, r0, 2\n\
- adds r1, r0\n\
- lsls r1, 2\n\
- adds r1, r4\n\
- ldrb r0, [r1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _08025F14\n\
- ldr r0, _08025F10 @ =gBattlescriptCurrInstr\n\
- mov r4, r8\n\
- str r4, [r0]\n\
- b _08025F74\n\
- .align 2, 0\n\
-_08025EF8: .4byte gActiveBank\n\
-_08025EFC: .4byte gBankTarget\n\
-_08025F00: .4byte gBattleTextBuff1\n\
-_08025F04: .4byte gSideTimers\n\
-_08025F08: .4byte gCurrentMove\n\
-_08025F0C: .4byte gSpecialStatuses\n\
-_08025F10: .4byte gBattlescriptCurrInstr\n\
-_08025F14:\n\
- mov r0, r8\n\
- bl BattleScriptPush\n\
- ldr r0, _08025F40 @ =gSharedMem\n\
- ldr r6, _08025F44 @ =gActiveBank\n\
- ldrb r1, [r6]\n\
- ldr r2, _08025F48 @ =0x00016003\n\
- adds r0, r2\n\
- strb r1, [r0]\n\
- ldr r1, _08025F4C @ =gBattlescriptCurrInstr\n\
- ldr r0, _08025F50 @ =BattleScript_MistProtected\n\
- str r0, [r1]\n\
- ldrb r1, [r6]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r4\n\
- ldrb r1, [r0]\n\
- movs r2, 0x1\n\
- orrs r1, r2\n\
- strb r1, [r0]\n\
- b _08025F74\n\
- .align 2, 0\n\
-_08025F40: .4byte gSharedMem\n\
-_08025F44: .4byte gActiveBank\n\
-_08025F48: .4byte 0x00016003\n\
-_08025F4C: .4byte gBattlescriptCurrInstr\n\
-_08025F50: .4byte BattleScript_MistProtected\n\
-_08025F54:\n\
- ldr r0, _08025F78 @ =gCurrentMove\n\
- ldrh r0, [r0]\n\
- cmp r0, 0xAE\n\
- beq _08025F84\n\
- mov r3, r10\n\
- cmp r3, 0x1\n\
- beq _08025F84\n\
- movs r0, 0\n\
- bl JumpIfMoveAffectedByProtect\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _08025F84\n\
- ldr r1, _08025F7C @ =gBattlescriptCurrInstr\n\
- ldr r0, _08025F80 @ =BattleScript_ButItFailed\n\
- str r0, [r1]\n\
-_08025F74:\n\
- movs r0, 0x1\n\
- b _080262A4\n\
- .align 2, 0\n\
-_08025F78: .4byte gCurrentMove\n\
-_08025F7C: .4byte gBattlescriptCurrInstr\n\
-_08025F80: .4byte BattleScript_ButItFailed\n\
-_08025F84:\n\
- ldr r2, _08025FCC @ =gBattleMons\n\
- ldr r1, _08025FD0 @ =gActiveBank\n\
- ldrb r3, [r1]\n\
- movs r4, 0x58\n\
- adds r0, r3, 0\n\
- muls r0, r4\n\
- adds r0, r2\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- mov r10, r2\n\
- cmp r0, 0x1D\n\
- beq _08025FA0\n\
- cmp r0, 0x49\n\
- bne _08026040\n\
-_08025FA0:\n\
- mov r0, r9\n\
- cmp r0, 0\n\
- bne _08026040\n\
- ldr r0, _08025FD4 @ =gCurrentMove\n\
- ldrh r0, [r0]\n\
- cmp r0, 0xAE\n\
- beq _08026040\n\
- cmp r5, 0x1\n\
- bne _08025F74\n\
- ldr r4, _08025FD8 @ =gSpecialStatuses\n\
- lsls r0, r3, 2\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r4\n\
- ldrb r0, [r0]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _08025FE0\n\
- ldr r0, _08025FDC @ =gBattlescriptCurrInstr\n\
- mov r1, r8\n\
- str r1, [r0]\n\
- b _08025F74\n\
- .align 2, 0\n\
-_08025FCC: .4byte gBattleMons\n\
-_08025FD0: .4byte gActiveBank\n\
-_08025FD4: .4byte gCurrentMove\n\
-_08025FD8: .4byte gSpecialStatuses\n\
-_08025FDC: .4byte gBattlescriptCurrInstr\n\
-_08025FE0:\n\
- mov r0, r8\n\
- bl BattleScriptPush\n\
- ldr r0, _08026028 @ =gSharedMem\n\
- ldr r2, _0802602C @ =gActiveBank\n\
- ldrb r1, [r2]\n\
- ldr r3, _08026030 @ =0x00016003\n\
- adds r0, r3\n\
- strb r1, [r0]\n\
- ldr r1, _08026034 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08026038 @ =BattleScript_AbilityNoStatLoss\n\
- str r0, [r1]\n\
- ldr r1, _0802603C @ =gLastUsedAbility\n\
- ldrb r0, [r2]\n\
- movs r6, 0x58\n\
- muls r0, r6\n\
- add r0, r10\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldrb r0, [r2]\n\
- ldrb r1, [r1]\n\
- bl RecordAbilityBattle\n\
- ldr r0, _0802602C @ =gActiveBank\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r4\n\
- ldrb r1, [r0]\n\
- movs r2, 0x1\n\
- orrs r1, r2\n\
- strb r1, [r0]\n\
- b _08025F74\n\
- .align 2, 0\n\
-_08026028: .4byte gSharedMem\n\
-_0802602C: .4byte gActiveBank\n\
-_08026030: .4byte 0x00016003\n\
-_08026034: .4byte gBattlescriptCurrInstr\n\
-_08026038: .4byte BattleScript_AbilityNoStatLoss\n\
-_0802603C: .4byte gLastUsedAbility\n\
-_08026040:\n\
- ldr r1, _08026090 @ =gActiveBank\n\
- ldrb r0, [r1]\n\
- movs r4, 0x58\n\
- muls r0, r4\n\
- add r0, r10\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x33\n\
- bne _080260A8\n\
- mov r2, r9\n\
- cmp r2, 0\n\
- bne _080260A8\n\
- cmp r7, 0x6\n\
- bne _080260A8\n\
- cmp r5, 0x1\n\
- bne _08025F74\n\
- mov r0, r8\n\
- bl BattleScriptPush\n\
- ldr r0, _08026094 @ =gSharedMem\n\
- ldr r3, _08026090 @ =gActiveBank\n\
- ldrb r1, [r3]\n\
- ldr r6, _08026098 @ =0x00016003\n\
- adds r0, r6\n\
- strb r1, [r0]\n\
- ldr r1, _0802609C @ =gBattlescriptCurrInstr\n\
- ldr r0, _080260A0 @ =BattleScript_AbilityNoSpecificStatLoss\n\
- str r0, [r1]\n\
- ldr r1, _080260A4 @ =gLastUsedAbility\n\
- ldrb r0, [r3]\n\
- muls r0, r4\n\
- add r0, r10\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldrb r0, [r3]\n\
- ldrb r1, [r1]\n\
- bl RecordAbilityBattle\n\
- b _08025F74\n\
- .align 2, 0\n\
-_08026090: .4byte gActiveBank\n\
-_08026094: .4byte gSharedMem\n\
-_08026098: .4byte 0x00016003\n\
-_0802609C: .4byte gBattlescriptCurrInstr\n\
-_080260A0: .4byte BattleScript_AbilityNoSpecificStatLoss\n\
-_080260A4: .4byte gLastUsedAbility\n\
-_080260A8:\n\
- ldr r1, _080260FC @ =gActiveBank\n\
- ldrb r0, [r1]\n\
- movs r4, 0x58\n\
- muls r0, r4\n\
- add r0, r10\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x34\n\
- bne _08026114\n\
- mov r2, r9\n\
- cmp r2, 0\n\
- bne _08026114\n\
- cmp r7, 0x1\n\
- bne _08026114\n\
- cmp r5, 0x1\n\
- beq _080260CA\n\
- b _08025F74\n\
-_080260CA:\n\
- mov r0, r8\n\
- bl BattleScriptPush\n\
- ldr r0, _08026100 @ =gSharedMem\n\
- ldr r3, _080260FC @ =gActiveBank\n\
- ldrb r1, [r3]\n\
- ldr r6, _08026104 @ =0x00016003\n\
- adds r0, r6\n\
- strb r1, [r0]\n\
- ldr r1, _08026108 @ =gBattlescriptCurrInstr\n\
- ldr r0, _0802610C @ =BattleScript_AbilityNoSpecificStatLoss\n\
- str r0, [r1]\n\
- ldr r1, _08026110 @ =gLastUsedAbility\n\
- ldrb r0, [r3]\n\
- muls r0, r4\n\
- add r0, r10\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldrb r0, [r3]\n\
- ldrb r1, [r1]\n\
- bl RecordAbilityBattle\n\
- b _08025F74\n\
- .align 2, 0\n\
-_080260FC: .4byte gActiveBank\n\
-_08026100: .4byte gSharedMem\n\
-_08026104: .4byte 0x00016003\n\
-_08026108: .4byte gBattlescriptCurrInstr\n\
-_0802610C: .4byte BattleScript_AbilityNoSpecificStatLoss\n\
-_08026110: .4byte gLastUsedAbility\n\
-_08026114:\n\
- ldr r0, _080261A0 @ =gActiveBank\n\
- ldrb r1, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- add r0, r10\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x13\n\
- bne _0802612C\n\
- cmp r5, 0\n\
- bne _0802612C\n\
- b _08025F74\n\
-_0802612C:\n\
- lsls r0, r6, 24\n\
- asrs r0, 28\n\
- movs r1, 0x7\n\
- ands r0, r1\n\
- negs r0, r0\n\
- lsls r0, 24\n\
- ldr r3, _080261A4 @ =gBattleTextBuff2\n\
- movs r4, 0\n\
- movs r1, 0xFD\n\
- strb r1, [r3]\n\
- movs r2, 0x1\n\
- lsrs r6, r0, 24\n\
- asrs r0, 24\n\
- subs r1, 0xFF\n\
- cmp r0, r1\n\
- bne _08026156\n\
- strb r4, [r3, 0x1]\n\
- movs r0, 0xD3\n\
- strb r0, [r3, 0x2]\n\
- strb r4, [r3, 0x3]\n\
- movs r2, 0x4\n\
-_08026156:\n\
- adds r0, r2, r3\n\
- strb r4, [r0]\n\
- adds r2, 0x1\n\
- adds r1, r2, r3\n\
- movs r0, 0xD4\n\
- strb r0, [r1]\n\
- adds r2, 0x1\n\
- adds r0, r2, r3\n\
- strb r4, [r0]\n\
- adds r2, 0x1\n\
- adds r1, r2, r3\n\
- movs r0, 0xFF\n\
- strb r0, [r1]\n\
- ldr r1, _080261A0 @ =gActiveBank\n\
- ldrb r2, [r1]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r0, r7, r0\n\
- mov r1, r10\n\
- adds r1, 0x18\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0\n\
- beq _08026206\n\
- movs r1, 0\n\
- ldr r0, _080261A8 @ =gBankTarget\n\
- ldrb r0, [r0]\n\
- ldr r3, _080261AC @ =gBattleCommunication\n\
- mov r8, r3\n\
- cmp r0, r2\n\
- bne _0802619A\n\
- movs r1, 0x1\n\
-_0802619A:\n\
- mov r4, r8\n\
- strb r1, [r4, 0x5]\n\
- b _08026234\n\
- .align 2, 0\n\
-_080261A0: .4byte gActiveBank\n\
-_080261A4: .4byte gBattleTextBuff2\n\
-_080261A8: .4byte gBankTarget\n\
-_080261AC: .4byte gBattleCommunication\n\
-_080261B0:\n\
- asrs r6, r0, 28\n\
- movs r0, 0x7\n\
- ands r6, r0\n\
- ldr r3, _08026210 @ =gBattleTextBuff2\n\
- strb r2, [r3]\n\
- movs r2, 0x1\n\
- cmp r6, 0x2\n\
- bne _080261CA\n\
- strb r4, [r3, 0x1]\n\
- movs r0, 0xD1\n\
- strb r0, [r3, 0x2]\n\
- strb r4, [r3, 0x3]\n\
- movs r2, 0x4\n\
-_080261CA:\n\
- adds r0, r2, r3\n\
- strb r4, [r0]\n\
- adds r2, 0x1\n\
- adds r1, r2, r3\n\
- movs r0, 0xD2\n\
- strb r0, [r1]\n\
- adds r2, 0x1\n\
- adds r0, r2, r3\n\
- strb r4, [r0]\n\
- adds r2, 0x1\n\
- adds r1, r2, r3\n\
- ldrb r0, [r1]\n\
- mov r2, r12\n\
- orrs r0, r2\n\
- strb r0, [r1]\n\
- ldr r2, _08026214 @ =gBattleMons\n\
- ldr r4, _08026218 @ =gActiveBank\n\
- ldrb r3, [r4]\n\
- movs r0, 0x58\n\
- muls r0, r3\n\
- adds r0, r7, r0\n\
- adds r1, r2, 0\n\
- adds r1, 0x18\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- mov r10, r2\n\
- cmp r0, 0xC\n\
- bne _08026220\n\
-_08026206:\n\
- ldr r1, _0802621C @ =gBattleCommunication\n\
- movs r0, 0x2\n\
- strb r0, [r1, 0x5]\n\
- mov r8, r1\n\
- b _08026234\n\
- .align 2, 0\n\
-_08026210: .4byte gBattleTextBuff2\n\
-_08026214: .4byte gBattleMons\n\
-_08026218: .4byte gActiveBank\n\
-_0802621C: .4byte gBattleCommunication\n\
-_08026220:\n\
- movs r1, 0\n\
- ldr r0, _080262B4 @ =gBankTarget\n\
- ldrb r0, [r0]\n\
- ldr r2, _080262B8 @ =gBattleCommunication\n\
- mov r8, r2\n\
- cmp r0, r3\n\
- bne _08026230\n\
- movs r1, 0x1\n\
-_08026230:\n\
- mov r3, r8\n\
- strb r1, [r3, 0x5]\n\
-_08026234:\n\
- ldr r2, _080262BC @ =gActiveBank\n\
- ldrb r0, [r2]\n\
- movs r4, 0x58\n\
- adds r1, r0, 0\n\
- muls r1, r4\n\
- adds r1, r7, r1\n\
- mov r3, r10\n\
- adds r3, 0x18\n\
- adds r1, r3\n\
- lsls r0, r6, 24\n\
- asrs r0, 24\n\
- ldrb r6, [r1]\n\
- adds r0, r6\n\
- strb r0, [r1]\n\
- ldrb r0, [r2]\n\
- muls r0, r4\n\
- adds r0, r7, r0\n\
- adds r1, r0, r3\n\
- movs r0, 0\n\
- ldrsb r0, [r1, r0]\n\
- cmp r0, 0\n\
- bge _08026264\n\
- movs r0, 0\n\
- strb r0, [r1]\n\
-_08026264:\n\
- ldr r1, _080262BC @ =gActiveBank\n\
- ldrb r0, [r1]\n\
- muls r0, r4\n\
- adds r0, r7, r0\n\
- adds r1, r0, r3\n\
- movs r0, 0\n\
- ldrsb r0, [r1, r0]\n\
- cmp r0, 0xC\n\
- ble _0802627A\n\
- movs r0, 0xC\n\
- strb r0, [r1]\n\
-_0802627A:\n\
- mov r2, r8\n\
- ldrb r0, [r2, 0x5]\n\
- cmp r0, 0x2\n\
- bne _080262A2\n\
- movs r3, 0x1\n\
- ands r3, r5\n\
- cmp r3, 0\n\
- beq _08026294\n\
- ldr r0, _080262C0 @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r2, 0x1\n\
- orrs r1, r2\n\
- strb r1, [r0]\n\
-_08026294:\n\
- mov r4, r8\n\
- ldrb r0, [r4, 0x5]\n\
- cmp r0, 0x2\n\
- bne _080262A2\n\
- cmp r3, 0\n\
- bne _080262A2\n\
- b _08025F74\n\
-_080262A2:\n\
- movs r0, 0\n\
-_080262A4:\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\
-_080262B4: .4byte gBankTarget\n\
-_080262B8: .4byte gBattleCommunication\n\
-_080262BC: .4byte gActiveBank\n\
-_080262C0: .4byte gBattleMoveFlags\n\
- .syntax divided");
+ if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & STAT_CHANGE_BS_PTR))
+ return STAT_CHANGE_DIDNT_WORK;
+
+ return STAT_CHANGE_WORKED;
}
-#endif // NONMATCHING
static void atk89_statbuffchange(void)
{
u8* jump_loc = T1_READ_PTR(gBattlescriptCurrInstr + 2);
- if (ChangeStatBuffs(BATTLE_STRUCT->statChanger & 0xF0, BATTLE_STRUCT->statChanger & 0xF, T2_READ_8(gBattlescriptCurrInstr + 1), jump_loc) == 0)
+ if (ChangeStatBuffs(gBattleStruct->statChanger & 0xF0, gBattleStruct->statChanger & 0xF, T2_READ_8(gBattlescriptCurrInstr + 1), jump_loc) == 0)
gBattlescriptCurrInstr += 6;
}
@@ -13456,7 +11892,7 @@ static void atk91_givepaydaymoney(void)
{
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gPaydayMoney)
{
- AddMoney(&gSaveBlock1.money, gPaydayMoney * BATTLE_STRUCT->moneyMultiplier);
+ AddMoney(&gSaveBlock1.money, gPaydayMoney * gBattleStruct->moneyMultiplier);
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 1;
gBattleTextBuff1[2] = 2;
@@ -14142,8 +12578,8 @@ static void atk9C_setsubstitute(void)
static bool8 IsMoveUncopyable(u16 move)
{
int i;
- for (i = 0; sUnknown_081FACFE[i] != 0xFFFE && sUnknown_081FACFE[i] != move; i++) {}
- return (sUnknown_081FACFE[i] != 0xFFFE);
+ for (i = 0; sMovesForbiddenToCopy[i] != 0xFFFE && sMovesForbiddenToCopy[i] != move; i++) {}
+ return (sMovesForbiddenToCopy[i] != 0xFFFE);
}
static void atk9D_mimicattackcopy(void)
@@ -14187,13 +12623,13 @@ static void atk9D_mimicattackcopy(void)
#ifdef NONMATCHING
static void atk9E_metronome(void)
{
- // sUnknown_081FACFE
+ // sMovesForbiddenToCopy
int i;
do
{
while ((gCurrentMove = (Random() & 0x1FF) + 1) > 0x162);
- for (i = 0; sUnknown_081FACFE[i] != gCurrentMove && sUnknown_081FACFE[i] != 0xFFFF; i++);
- } while (sUnknown_081FACFE[i] != 0xFFFF);
+ for (i = 0; sMovesForbiddenToCopy[i] != gCurrentMove && sMovesForbiddenToCopy[i] != 0xFFFF; i++);
+ } while (sMovesForbiddenToCopy[i] != 0xFFFF);
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
@@ -14211,7 +12647,7 @@ static void atk9E_metronome(void)
ldr r7, _08027938 @ =gCurrentMove\n\
movs r6, 0xB1\n\
lsls r6, 1\n\
- ldr r5, _0802793C @ =sUnknown_081FACFE\n\
+ ldr r5, _0802793C @ =sMovesForbiddenToCopy\n\
ldr r0, _08027940 @ =gBattlescriptCurrInstr\n\
mov r8, r0\n\
_080278CA:\n\
@@ -14273,7 +12709,7 @@ _080278F8:\n\
bx r0\n\
.align 2, 0\n\
_08027938: .4byte gCurrentMove\n\
-_0802793C: .4byte sUnknown_081FACFE\n\
+_0802793C: .4byte sMovesForbiddenToCopy\n\
_08027940: .4byte gBattlescriptCurrInstr\n\
_08027944: .4byte 0x000001ff\n\
_08027948: .4byte 0x0000ffff\n\
@@ -14398,10 +12834,10 @@ static void atkA5_painsplitdmgcalc(void)
{
s32 hp_diff = (gBattleMons[gBankAttacker].hp + gBattleMons[gBankTarget].hp) / 2;
s32 to_store = gBattleMoveDamage = gBattleMons[gBankTarget].hp - hp_diff;
- BATTLE_STRUCT->unk16014 = sBYTE0_32(to_store);
- BATTLE_STRUCT->unk16015 = sBYTE1_32(to_store);
- BATTLE_STRUCT->unk16016 = sBYTE2_32(to_store);
- BATTLE_STRUCT->unk16017 = sBYTE3_32(to_store);
+ gBattleStruct->unk16014 = sBYTE0_32(to_store);
+ gBattleStruct->unk16015 = sBYTE1_32(to_store);
+ gBattleStruct->unk16016 = sBYTE2_32(to_store);
+ gBattleStruct->unk16017 = sBYTE3_32(to_store);
gBattleMoveDamage = gBattleMons[gBankAttacker].hp - hp_diff;
gSpecialStatuses[gBankTarget].moveturnLostHP = 0xFFFF;
@@ -14415,7 +12851,7 @@ static void atkA5_painsplitdmgcalc(void)
#ifdef NONMATCHING
static void atkA6_settypetorandomresistance(void)
{
- if (gMoveHitWith[gBankAttacker] == 0 || gMoveHitWith[gBankAttacker] == 0xFFFF || (IsTwoTurnsMove(gMoveHitWith[gBankAttacker]) && !gProtectStructs[gBankAttacker].physicalDmg && !gProtectStructs[gBankAttacker].specialDmg))
+ if (gLastLandedMoves[gBankAttacker] == 0 || gLastLandedMoves[gBankAttacker] == 0xFFFF || (IsTwoTurnsMove(gLastLandedMoves[gBankAttacker]) && !gProtectStructs[gBankAttacker].physicalDmg && !gProtectStructs[gBankAttacker].specialDmg))
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
{
@@ -14424,7 +12860,7 @@ static void atkA6_settypetorandomresistance(void)
{
while (((type = (Random() & 0x7F)) > 0x70));
type *= 3;
- if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1])
+ if (gTypeEffectiveness[type] == gLastHitByType[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1])
{
gBattleMons[gBankAttacker].type1 = type;
gBattleMons[gBankAttacker].type2 = type;
@@ -14443,7 +12879,7 @@ static void atkA6_settypetorandomresistance(void)
{
if (gTypeEffectiveness[type] == 0xFE || gTypeEffectiveness[type] != 0xFF)
{
- if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1])
+ if (gTypeEffectiveness[type] == gLastHitByType[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1])
{
gBattleMons[gBankAttacker].type1 = gTypeEffectiveness[rands + 1];
gBattleMons[gBankAttacker].type2 = gTypeEffectiveness[rands + 1];
@@ -14472,7 +12908,7 @@ static void atkA6_settypetorandomresistance(void)
mov r6, r9\n\
mov r5, r8\n\
push {r5-r7}\n\
- ldr r1, _08027FA8 @ =gMoveHitWith\n\
+ ldr r1, _08027FA8 @ =gLastLandedMoves\n\
ldr r4, _08027FAC @ =gBankAttacker\n\
ldrb r0, [r4]\n\
lsls r0, 1\n\
@@ -14518,7 +12954,7 @@ _08027F8C:\n\
str r1, [r3]\n\
b _08028110\n\
.align 2, 0\n\
-_08027FA8: .4byte gMoveHitWith\n\
+_08027FA8: .4byte gLastLandedMoves\n\
_08027FAC: .4byte gBankAttacker\n\
_08027FB0: .4byte 0x0000ffff\n\
_08027FB4: .4byte gProtectStructs\n\
@@ -14590,7 +13026,7 @@ _0802802C:\n\
adds r4, r0, r4\n\
ldr r6, _08028120 @ =gTypeEffectiveness\n\
adds r3, r4, r6\n\
- ldr r1, _08028124 @ =gUnknown_02024C44\n\
+ ldr r1, _08028124 @ =gLastHitByType\n\
ldr r2, _08028128 @ =gBankAttacker\n\
ldrb r5, [r2]\n\
lsls r0, r5, 1\n\
@@ -14651,7 +13087,7 @@ _080280AE:\n\
mov r4, r10\n\
ldrb r2, [r4]\n\
lsls r0, r2, 1\n\
- ldr r7, _08028124 @ =gUnknown_02024C44\n\
+ ldr r7, _08028124 @ =gLastHitByType\n\
adds r0, r7\n\
ldrh r0, [r0]\n\
cmp r1, r0\n\
@@ -14708,7 +13144,7 @@ _08028110:\n\
bx r0\n\
.align 2, 0\n\
_08028120: .4byte gTypeEffectiveness\n\
-_08028124: .4byte gUnknown_02024C44\n\
+_08028124: .4byte gLastHitByType\n\
_08028128: .4byte gBankAttacker\n\
_0802812C: .4byte gBattleMons\n\
_08028130: .4byte 0x000003e7\n\
@@ -14842,7 +13278,7 @@ static void atkAA_setdestinybond(void)
gBattlescriptCurrInstr++;
}
-static void DestinyBondFlagUpdate(void)
+static void TrySetDestinyBondToHappen(void)
{
u8 atk_side = GetBankSide(gBankAttacker);
u8 def_side = GetBankSide(gBankTarget);
@@ -14852,7 +13288,7 @@ static void DestinyBondFlagUpdate(void)
static void atkAB_trysetdestinybondtohappen(void)
{
- DestinyBondFlagUpdate();
+ TrySetDestinyBondToHappen();
gBattlescriptCurrInstr++;
}
@@ -14862,10 +13298,10 @@ static void atkAC_remaininghptopower(void)
int i;
for (i = 0; i < 12; i += 2)
{
- if (hp_fraction <= sUnknown_081FAD26[i])
+ if (hp_fraction <= sFlailHpScaleToPowerTable[i])
break;
}
- gDynamicBasePower = sUnknown_081FAD26[i + 1];
+ gDynamicBasePower = sFlailHpScaleToPowerTable[i + 1];
gBattlescriptCurrInstr++;
}
@@ -14941,7 +13377,7 @@ static void atkAE_healpartystatus(void)
gBattleCommunication[MULTISTRING_CHOOSER] |= 1;
}
- gActiveBank = BATTLE_STRUCT->scriptingActive = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2);
+ gActiveBank = gBattleStruct->scriptingActive = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank]))
{
if (gBattleMons[gActiveBank].ability != ABILITY_SOUNDPROOF)
@@ -15250,7 +13686,7 @@ static void atkBA_jumpifnopursuitswitchdmg(void)
}
gCurrentMove = MOVE_PURSUIT;
gBattlescriptCurrInstr += 5;
- BATTLE_STRUCT->animTurn = 1;
+ gBattleStruct->animTurn = 1;
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
}
else
@@ -16400,7 +14836,7 @@ static void atkD6_doubledamagedealtifdamaged(void)
{
if ((gProtectStructs[gBankAttacker].physicalDmg && gProtectStructs[gBankAttacker].physicalBank == gBankTarget)
|| (gProtectStructs[gBankAttacker].specialDmg && gProtectStructs[gBankAttacker].specialBank == gBankTarget))
- BATTLE_STRUCT->dmgMultiplier = 2;
+ gBattleStruct->dmgMultiplier = 2;
gBattlescriptCurrInstr++;
}
@@ -16509,13 +14945,13 @@ static void atkDC_trysetgrudge(void)
static void atkDD_weightdamagecalculation(void)
{
int i;
- for (i = 0; sWeightDamage[i] != 0xFFFF; i += 2)
+ for (i = 0; sWeightToDamageTable[i] != 0xFFFF; i += 2)
{
- if (sWeightDamage[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1))
+ if (sWeightToDamageTable[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1))
break;
}
- if (sWeightDamage[i] != 0xFFFF)
- gDynamicBasePower = sWeightDamage[i + 1];
+ if (sWeightToDamageTable[i] != 0xFFFF)
+ gDynamicBasePower = sWeightToDamageTable[i + 1];
else
gDynamicBasePower = 120;
gBattlescriptCurrInstr++;
@@ -16539,17 +14975,17 @@ static void atkDE_asistattackselect(void)
break;
if (!GetMonData(&party[i], MON_DATA_SPECIES2) || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
break;
- chooseable_moves = &BATTLE_STRUCT->assistMove[chooseable_moves_no];
+ chooseable_moves = &gBattleStruct->assistMove[chooseable_moves_no];
for (j = 0; j < 4; j++)
{
int k;
u16 move = GetMonData(&party[i], MON_DATA_MOVE1 + i);
if (IsMoveUnchoosable(move))
break;
- //sUnknown_081FACFE[k]
+ //sMovesForbiddenToCopy[k]
for (k = 0; ;k++)
{
- if (sUnknown_081FACFE[k] == 0xFFFF)
+ if (sMovesForbiddenToCopy[k] == 0xFFFF)
{
if (move)
{
@@ -16559,7 +14995,7 @@ static void atkDE_asistattackselect(void)
}
break;
}
- if (sUnknown_081FACFE[k] == move)
+ if (sMovesForbiddenToCopy[k] == move)
break;
}
}
@@ -16567,7 +15003,7 @@ static void atkDE_asistattackselect(void)
if (chooseable_moves_no)
{
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
- gRandomMove = BATTLE_STRUCT->assistMove[Random() % chooseable_moves_no];
+ gRandomMove = gBattleStruct->assistMove[Random() % chooseable_moves_no];
gBankTarget = GetMoveTarget(gRandomMove, 0);
gBattlescriptCurrInstr += 5;
}
@@ -16652,7 +15088,7 @@ _0802AAF8:\n\
adds r1, r5, 0x1\n\
cmp r0, 0\n\
bne _0802AB4E\n\
- ldr r0, _0802ABB4 @ =sUnknown_081FACFE\n\
+ ldr r0, _0802ABB4 @ =sMovesForbiddenToCopy\n\
ldrh r2, [r0]\n\
adds r3, r0, 0\n\
cmp r2, r8\n\
@@ -16727,7 +15163,7 @@ _0802ABA4: .4byte gEnemyParty\n\
_0802ABA8: .4byte gBattlePartyID\n\
_0802ABAC: .4byte 0x0000ffff\n\
_0802ABB0: .4byte gSharedMem + 0x16024\n\
-_0802ABB4: .4byte sUnknown_081FACFE\n\
+_0802ABB4: .4byte sMovesForbiddenToCopy\n\
_0802ABB8: .4byte gHitMarker\n\
_0802ABBC: .4byte 0xfffffbff\n\
_0802ABC0: .4byte gRandomMove\n\
@@ -16792,11 +15228,11 @@ static void atkE1_trygetintimidatetarget(void)
{
u8 side;
- BATTLE_STRUCT->scriptingActive = ewram160DD;
- side = GetBankSide(BATTLE_STRUCT->scriptingActive);
+ gBattleStruct->scriptingActive = ewram160DD;
+ side = GetBankSide(gBattleStruct->scriptingActive);
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 9;
- gBattleTextBuff1[2] = gBattleMons[BATTLE_STRUCT->scriptingActive].ability;
+ gBattleTextBuff1[2] = gBattleMons[gBattleStruct->scriptingActive].ability;
gBattleTextBuff1[3] = 0xFF;
for (;gBankTarget < gNoOfAllBanks; gBankTarget++)
@@ -16901,10 +15337,10 @@ static void atkE5_pickup(void)
static void atkE6_docastformchangeanimation(void)
{
- gActiveBank = BATTLE_STRUCT->scriptingActive;
+ gActiveBank = gBattleStruct->scriptingActive;
if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE)
- BATTLE_STRUCT->castformToChangeInto |= 0x80;
- EmitBattleAnimation(0, B_ANIM_CASTFORM_CHANGE, BATTLE_STRUCT->castformToChangeInto);
+ gBattleStruct->castformToChangeInto |= 0x80;
+ EmitBattleAnimation(0, B_ANIM_CASTFORM_CHANGE, gBattleStruct->castformToChangeInto);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr++;
}
@@ -16913,11 +15349,11 @@ static void atkE7_trycastformdatachange(void)
{
u8 form;
gBattlescriptCurrInstr++;
- form = CastformDataTypeChange(BATTLE_STRUCT->scriptingActive);
+ form = CastformDataTypeChange(gBattleStruct->scriptingActive);
if (form)
{
BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
- BATTLE_STRUCT->castformToChangeInto = form - 1;
+ gBattleStruct->castformToChangeInto = form - 1;
}
}
@@ -16953,17 +15389,17 @@ static void atkE9_setweatherballtype(void)
if (WEATHER_HAS_EFFECT)
{
if ((u8)(gBattleWeather))
- BATTLE_STRUCT->dmgMultiplier = 2;
+ gBattleStruct->dmgMultiplier = 2;
if (gBattleWeather & WEATHER_RAIN_ANY)
- BATTLE_STRUCT->dynamicMoveType = TYPE_WATER | 0x80;
+ gBattleStruct->dynamicMoveType = TYPE_WATER | 0x80;
else if (gBattleWeather & WEATHER_SANDSTORM_ANY)
- BATTLE_STRUCT->dynamicMoveType = TYPE_ROCK | 0x80;
+ gBattleStruct->dynamicMoveType = TYPE_ROCK | 0x80;
else if (gBattleWeather & WEATHER_SUN_ANY)
- BATTLE_STRUCT->dynamicMoveType = TYPE_FIRE | 0x80;
+ gBattleStruct->dynamicMoveType = TYPE_FIRE | 0x80;
else if (gBattleWeather & WEATHER_HAIL)
- BATTLE_STRUCT->dynamicMoveType = TYPE_ICE | 0x80;
+ gBattleStruct->dynamicMoveType = TYPE_ICE | 0x80;
else
- BATTLE_STRUCT->dynamicMoveType = TYPE_NORMAL | 0x80;
+ gBattleStruct->dynamicMoveType = TYPE_NORMAL | 0x80;
}
gBattlescriptCurrInstr++;
}
@@ -17010,8 +15446,8 @@ static void atkEC_pursuitrelated(void)
gActionsByTurnOrder[gActiveBank] = 11;
gCurrentMove = MOVE_PURSUIT;
gBattlescriptCurrInstr += 5;
- BATTLE_STRUCT->animTurn = 1;
- BATTLE_STRUCT->unk160A7 = gBankAttacker;
+ gBattleStruct->animTurn = 1;
+ gBattleStruct->unk160A7 = gBankAttacker;
gBankAttacker = gActiveBank;
}
else
@@ -17022,10 +15458,10 @@ static void atkED_snatchsetbanks(void)
{
gEffectBank = gBankAttacker;
if (gBankAttacker == gBankTarget)
- gBankAttacker = gBankTarget = BATTLE_STRUCT->scriptingActive;
+ gBankAttacker = gBankTarget = gBattleStruct->scriptingActive;
else
- gBankTarget = BATTLE_STRUCT->scriptingActive;
- BATTLE_STRUCT->scriptingActive = gEffectBank;
+ gBankTarget = gBattleStruct->scriptingActive;
+ gBattleStruct->scriptingActive = gEffectBank;
gBattlescriptCurrInstr++;
}
@@ -17038,13 +15474,13 @@ static void atkEE_removelightscreenreflect(void) //brick break
gSideAffecting[side] &= ~(SIDE_STATUS_LIGHTSCREEN);
gSideTimers[side].reflectTimer = 0;
gSideTimers[side].lightscreenTimer = 0;
- BATTLE_STRUCT->animTurn = 1;
- BATTLE_STRUCT->animTargetsHit = 1;
+ gBattleStruct->animTurn = 1;
+ gBattleStruct->animTargetsHit = 1;
}
else
{
- BATTLE_STRUCT->animTurn = 0;
- BATTLE_STRUCT->animTargetsHit = 0;
+ gBattleStruct->animTurn = 0;
+ gBattleStruct->animTargetsHit = 0;
}
gBattlescriptCurrInstr++;
}
@@ -17074,7 +15510,7 @@ void atkEF_handleballthrow(void)
u32 odds;
u8 catch_rate;
if (gLastUsedItem == ITEM_SAFARI_BALL)
- catch_rate = BATTLE_STRUCT->unk16089 * 1275 / 100; //correct the name to safariFleeRate
+ catch_rate = gBattleStruct->unk16089 * 1275 / 100; //correct the name to safariFleeRate
else
catch_rate = gBaseStats[gBattleMons[gBankTarget].species].catchRate;
if (gLastUsedItem > 5)
@@ -17386,15 +15822,15 @@ static void atkF3_trygivecaughtmonnick(void)
case 2:
if (!gPaletteFade.active)
{
- GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick);
- DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), BattleMainCB2);
+ GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, gBattleStruct->caughtNick);
+ DoNamingScreen(2, gBattleStruct->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), BattleMainCB2);
gBattleCommunication[0]++;
}
break;
case 3:
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active )
{
- SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick);
+ SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, gBattleStruct->caughtNick);
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
break;
diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c
index 1c79d7ebf..00216ce05 100644
--- a/src/battle/battle_7.c
+++ b/src/battle/battle_7.c
@@ -763,7 +763,7 @@ void sub_80324E0(u8 a)
ewram17800[a].substituteSprite = 0;
}
-void sub_80324F8(struct Pokemon *pkmn, u8 b)
+void HandleLowHpMusicChange(struct Pokemon *pkmn, u8 b)
{
u16 hp = GetMonData(pkmn, MON_DATA_HP);
u16 maxHP = GetMonData(pkmn, MON_DATA_MAX_HP);
@@ -793,7 +793,7 @@ void sub_80324F8(struct Pokemon *pkmn, u8 b)
}
}
-void BattleMusicStop(void)
+void BattleStopLowHpSound(void)
{
u8 r4 = GetBankByIdentity(0);
@@ -821,11 +821,11 @@ void sub_8032638(void)
u8 r5 = pokemon_order_func(gBattlePartyID[r9]);
if (GetMonData(&gPlayerParty[r4], MON_DATA_HP) != 0)
- sub_80324F8(&gPlayerParty[r4], r8);
+ HandleLowHpMusicChange(&gPlayerParty[r4], r8);
if (IsDoubleBattle())
{
if (GetMonData(&gPlayerParty[r5], MON_DATA_HP) != 0)
- sub_80324F8(&gPlayerParty[r5], r9);
+ HandleLowHpMusicChange(&gPlayerParty[r5], r9);
}
}
}
diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c
index 80848d2fd..2ac9df2b9 100644
--- a/src/battle/battle_ai.c
+++ b/src/battle/battle_ai.c
@@ -1422,8 +1422,8 @@ static void BattleAICmd_get_highest_possible_damage(void)
s32 i;
gDynamicBasePower = 0;
- BATTLE_STRUCT->dynamicMoveType = 0;
- BATTLE_STRUCT->dmgMultiplier = 1;
+ gBattleStruct->dynamicMoveType = 0;
+ gBattleStruct->dmgMultiplier = 1;
gBattleMoveFlags = 0;
gCritMultiplier = 1;
AI_THINKING_STRUCT->funcResult = 0;
@@ -1462,8 +1462,8 @@ static void BattleAICmd_if_damage_bonus(void)
u8 damageVar;
gDynamicBasePower = 0;
- BATTLE_STRUCT->dynamicMoveType = 0;
- BATTLE_STRUCT->dmgMultiplier = 1;
+ gBattleStruct->dynamicMoveType = 0;
+ gBattleStruct->dmgMultiplier = 1;
gBattleMoveFlags = 0;
gCritMultiplier = 1;
@@ -1669,8 +1669,8 @@ static void BattleAICmd_if_can_faint(void)
}
gDynamicBasePower = 0;
- BATTLE_STRUCT->dynamicMoveType = 0;
- BATTLE_STRUCT->dmgMultiplier = 1;
+ gBattleStruct->dynamicMoveType = 0;
+ gBattleStruct->dmgMultiplier = 1;
gBattleMoveFlags = 0;
gCritMultiplier = 1;
gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
@@ -1698,8 +1698,8 @@ static void BattleAICmd_if_cant_faint(void)
}
gDynamicBasePower = 0;
- BATTLE_STRUCT->dynamicMoveType = 0;
- BATTLE_STRUCT->dmgMultiplier = 1;
+ gBattleStruct->dynamicMoveType = 0;
+ gBattleStruct->dmgMultiplier = 1;
gBattleMoveFlags = 0;
gCritMultiplier = 1;
gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
@@ -1907,7 +1907,7 @@ static void BattleAICmd_flee(void)
static void BattleAICmd_if_random_100(void)
{
- u8 safariFleeRate = BATTLE_STRUCT->safariFleeRate * 5; // safari flee rate, from 0-20
+ u8 safariFleeRate = gBattleStruct->safariFleeRate * 5; // safari flee rate, from 0-20
if ((u8)(Random() % 100) < safariFleeRate)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c
index e39d98997..3a16e12e6 100644
--- a/src/battle/battle_controller_linkpartner.c
+++ b/src/battle/battle_controller_linkpartner.c
@@ -94,7 +94,7 @@ extern void sub_804777C();
extern void sub_8043DFC();
//extern s16 sub_8045C78();
extern void sub_80440EC();
-extern void sub_80324F8();
+extern void HandleLowHpMusicChange();
extern void nullsub_9(u16);
extern void sub_8043DB0();
extern void move_anim_start_t4();
@@ -355,7 +355,7 @@ void bx_t3_healthbar_update(void)
}
else
{
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
LinkPartnerBufferExecCompleted();
}
}
@@ -434,7 +434,7 @@ void sub_811E0CC(void)
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
CreateTask(c3_0802FDF4, 10);
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0);
sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0);
sub_804777C(gActiveBank);
@@ -1084,7 +1084,7 @@ void sub_811EC68(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]);
break;
}
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
void LinkPartnerHandlecmd3(void)
@@ -1243,7 +1243,7 @@ void LinkPartnerHandlecmd10(void)
else if (!ewram17810[gActiveBank].unk0_6)
{
ewram17810[gActiveBank].unk4 = 0;
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
PlaySE12WithPanning(SE_POKE_DEAD, -64);
gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0;
gSprites[gObjectBankIDs[gActiveBank]].data[2] = 5;
diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c
index 2bdf448db..0d05b7aed 100644
--- a/src/battle/battle_controller_player.c
+++ b/src/battle/battle_controller_player.c
@@ -87,7 +87,7 @@ extern void sub_802E220();
extern void sub_802E2D4();
extern void sub_802E004(void);
extern void sub_802DF30(void);
-extern void BattleMusicStop(void);
+extern void BattleStopLowHpSound(void);
extern void PlayerBufferExecCompleted(void);
extern void bx_t1_healthbar_update(void);
extern void nullsub_91(void);
@@ -1019,9 +1019,9 @@ void sub_802D31C(void)
m4aMPlayContinue(&gMPlay_BGM);
else
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
if (IsDoubleBattle())
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2);
ewram17810[gActiveBank].unk9 = 3;
gBattleBankFunc[gActiveBank] = sub_802D2E0;
}
@@ -1077,7 +1077,7 @@ void sub_802D730(void)
if (!ewram17810[gActiveBank].unk0_6 && !IsCryPlayingOrClearCrySongs())
{
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
PlayerBufferExecCompleted();
}
}
@@ -1118,7 +1118,7 @@ void bx_t1_healthbar_update(void)
}
else
{
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
PlayerBufferExecCompleted();
}
}
@@ -2278,7 +2278,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]);
break;
}
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
void PlayerHandlecmd3(void)
@@ -2438,7 +2438,7 @@ void PlayerHandlecmd10(void)
if (ewram17810[gActiveBank].unk0_6 == 0)
{
ewram17810[gActiveBank].unk4 = 0;
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
PlaySE12WithPanning(SE_POKE_DEAD, -64);
gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0;
gSprites[gObjectBankIDs[gActiveBank]].data[2] = 5;
@@ -2655,7 +2655,7 @@ void PlayerHandlecmd22(void)
void PlayerHandlecmd23(void)
{
- BattleMusicStop();
+ BattleStopLowHpSound();
BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0);
PlayerBufferExecCompleted();
}
diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c
index 4c0adab5e..49f530129 100644
--- a/src/battle/battle_controller_wally.c
+++ b/src/battle/battle_controller_wally.c
@@ -412,7 +412,7 @@ void sub_81376B8(void)
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
CreateTask(c3_0802FDF4, 10);
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
WallyBufferExecCompleted();
}
}
@@ -429,7 +429,7 @@ void sub_81377B0(void)
}
else
{
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
WallyBufferExecCompleted();
}
}
@@ -1066,7 +1066,7 @@ void sub_8138294(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]);
break;
}
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
void WallyHandlecmd3(void)
diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c
index d8efc09c5..18e07acf6 100644
--- a/src/battle/battle_message.c
+++ b/src/battle/battle_message.c
@@ -214,11 +214,11 @@ void BufferStringBattle(u16 stringID)
gStringInfo = (struct StringInfoBattle*)(&gBattleBufferA[gActiveBank][4]);
gLastUsedItem = gStringInfo->lastItem;
gLastUsedAbility = gStringInfo->lastAbility;
- BATTLE_STRUCT->scriptingActive = gStringInfo->scrActive;
- BATTLE_STRUCT->unk1605E = gStringInfo->unk1605E;
- BATTLE_STRUCT->hpScale = gStringInfo->hpScale;
+ gBattleStruct->scriptingActive = gStringInfo->scrActive;
+ gBattleStruct->unk1605E = gStringInfo->unk1605E;
+ gBattleStruct->hpScale = gStringInfo->hpScale;
gStringBank = gStringInfo->StringBank;
- BATTLE_STRUCT->stringMoveType = gStringInfo->moveType;
+ gBattleStruct->stringMoveType = gStringInfo->moveType;
for (i = 0; i < 4; i++)
{
gAbilitiesPerBank[i] = gStringInfo->abilities[i];
@@ -304,11 +304,11 @@ void BufferStringBattle(u16 stringID)
case 2: // sending poke to ball msg
if (GetBankSide(gActiveBank) == 0)
{
- if (BATTLE_STRUCT->hpScale == 0)
+ if (gBattleStruct->hpScale == 0)
stringPtr = BattleText_ComeBackSingle1;
- else if (BATTLE_STRUCT->hpScale == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ else if (gBattleStruct->hpScale == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
stringPtr = BattleText_ComeBackSingle2;
- else if (BATTLE_STRUCT->hpScale == 2)
+ else if (gBattleStruct->hpScale == 2)
stringPtr = BattleText_ComeBackSingle3;
else
stringPtr = BattleText_ComeBackSingle4;
@@ -332,13 +332,13 @@ void BufferStringBattle(u16 stringID)
}
break;
case 3: // switch-in msg
- if (GetBankSide(BATTLE_STRUCT->scriptingActive) == 0)
+ if (GetBankSide(gBattleStruct->scriptingActive) == 0)
{
- if (BATTLE_STRUCT->hpScale == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ if (gBattleStruct->hpScale == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
stringPtr = BattleText_SentOutSingle7;
- else if (BATTLE_STRUCT->hpScale == 1)
+ else if (gBattleStruct->hpScale == 1)
stringPtr = BattleText_SentOutSingle8;
- else if (BATTLE_STRUCT->hpScale == 2)
+ else if (gBattleStruct->hpScale == 2)
stringPtr = BattleText_SentOutSingle9;
else
stringPtr = BattleText_SentOutSingle10;
@@ -364,7 +364,7 @@ void BufferStringBattle(u16 stringID)
case 4: // pokemon used a move msg
sub_8121D1C(gBattleTextBuff1);
if (gStringInfo->currentMove > 0x162)
- StringCopy(gBattleTextBuff2, gUnknown_08401674[BATTLE_STRUCT->stringMoveType]);
+ StringCopy(gBattleTextBuff2, gUnknown_08401674[gBattleStruct->stringMoveType]);
else
StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]);
sub_8121D74(gBattleTextBuff2);
@@ -636,17 +636,17 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
HANDLE_NICKNAME_STRING_CASE(gActiveBank, gBattlePartyID[gActiveBank])
break;
case 16: // scripting active bank name with prefix
- HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, gBattlePartyID[BATTLE_STRUCT->scriptingActive])
+ HANDLE_NICKNAME_STRING_CASE(gBattleStruct->scriptingActive, gBattlePartyID[gBattleStruct->scriptingActive])
break;
case 17: // current move name
if (gStringInfo->currentMove > 0x162)
- toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType];
+ toCpy = (void*) &gUnknown_08401674[gBattleStruct->stringMoveType];
else
toCpy = gMoveNames[gStringInfo->currentMove];
break;
case 18: // last used move name
if (gStringInfo->lastMove > 0x162)
- toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType];
+ toCpy = (void*) &gUnknown_08401674[gBattleStruct->stringMoveType];
else
toCpy = gMoveNames[gStringInfo->lastMove];
break;
@@ -655,7 +655,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
{
if (gLastUsedItem == ITEM_ENIGMA_BERRY)
{
- if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank)
+ if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 == gStringBank)
{
StringCopy(text, gEnigmaBerries[gStringBank].name);
#ifdef ENGLISH
@@ -690,7 +690,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
toCpy = gAbilityNames[gAbilitiesPerBank[gBankTarget]];
break;
case 23: // scripting active ability
- toCpy = gAbilityNames[gAbilitiesPerBank[BATTLE_STRUCT->scriptingActive]];
+ toCpy = gAbilityNames[gAbilitiesPerBank[gBattleStruct->scriptingActive]];
break;
case 24: // effect bank ability
toCpy = gAbilityNames[gAbilitiesPerBank[gEffectBank]];
@@ -750,7 +750,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
toCpy = gLinkPlayers[sub_803FC34(3 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
break;
case 31: // link scripting active name
- toCpy = gLinkPlayers[sub_803FC34(BATTLE_STRUCT->scriptingActive)].name;
+ toCpy = gLinkPlayers[sub_803FC34(gBattleStruct->scriptingActive)].name;
break;
case 32: // player name
toCpy = gSaveBlock2.playerName;
@@ -759,7 +759,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
toCpy = GetTrainerLoseText();
break;
case 34: // ?
- HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, BATTLE_STRUCT->unk1605E)
+ HANDLE_NICKNAME_STRING_CASE(gBattleStruct->scriptingActive, gBattleStruct->unk1605E)
break;
case 35: // lanette pc
if (FlagGet(FLAG_SYS_PC_LANETTE))
@@ -946,7 +946,7 @@ void StrCpyDecodeBattleTextBuff(u8* src, u8* dst)
{
if (hword == ITEM_ENIGMA_BERRY)
{
- if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank)
+ if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 == gStringBank)
{
StringCopy(dst, gEnigmaBerries[gStringBank].name);
#ifdef ENGLISH
diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c
index 9dc030a1a..f93664593 100644
--- a/src/battle/battle_util.c
+++ b/src/battle/battle_util.c
@@ -21,7 +21,7 @@
#include "constants/species.h"
#include "constants/weather.h"
-extern u8* gBattlescriptCurrInstr;
+extern const u8* gBattlescriptCurrInstr;
extern u8 gActiveBank;
extern u8 gBattleBufferB[4][0x200];
extern u8* gUnknown_02024C1C[4]; //battlescript location when you try to choose a move you're not allowed to
@@ -454,7 +454,7 @@ void sub_80157C4(u8 bank)
}
}
-void BattleScriptPush(u8* BS_ptr)
+void BattleScriptPush(const u8* BS_ptr)
{
B_BATTLESCRIPTS_STACK->ptr[B_BATTLESCRIPTS_STACK->size++] = BS_ptr;
}
@@ -477,7 +477,7 @@ u8 TrySetCantSelectMoveBattleScript(void) //msg can't select a move
u16* choicedMove = CHOICED_MOVE(gActiveBank);
if (gDisableStructs[gActiveBank].disabledMove == move && move)
{
- BATTLE_STRUCT->scriptingActive = gActiveBank;
+ gBattleStruct->scriptingActive = gActiveBank;
gCurrentMove = move;
gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionDisabledMove;
limitations++;
@@ -615,7 +615,7 @@ u8 UpdateTurnCounters(void)
{
u8 sideBank;
- switch (BATTLE_STRUCT->turncountersTracker)
+ switch (gBattleStruct->turncountersTracker)
{
case 0:
for (i = 0; i < gNoOfAllBanks; i++)
@@ -631,12 +631,12 @@ u8 UpdateTurnCounters(void)
SwapTurnOrder(i, j);
}
}
- BATTLE_STRUCT->turncountersTracker++;
- BATTLE_STRUCT->turnSideTracker = 0;
+ gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
case 1:
- while (BATTLE_STRUCT->turnSideTracker < 2)
+ while (gBattleStruct->turnSideTracker < 2)
{
- gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker;
+ gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker;
if (gSideAffecting[sideBank] & SIDE_STATUS_REFLECT)
{
@@ -653,20 +653,20 @@ u8 UpdateTurnCounters(void)
effect++;
}
}
- BATTLE_STRUCT->turnSideTracker++;
+ gBattleStruct->turnSideTracker++;
if (effect)
break;
}
if (!effect)
{
- BATTLE_STRUCT->turncountersTracker++;
- BATTLE_STRUCT->turnSideTracker = 0;
+ gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
}
break;
case 2:
- while (BATTLE_STRUCT->turnSideTracker < 2)
+ while (gBattleStruct->turnSideTracker < 2)
{
- gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker;
+ gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker;
if (gSideAffecting[sideBank] & SIDE_STATUS_LIGHTSCREEN)
{
if (--gSideTimers[sideBank].lightscreenTimer == 0)
@@ -682,20 +682,20 @@ u8 UpdateTurnCounters(void)
effect++;
}
}
- BATTLE_STRUCT->turnSideTracker++;
+ gBattleStruct->turnSideTracker++;
if (effect)
break;
}
if (!effect)
{
- BATTLE_STRUCT->turncountersTracker++;
- BATTLE_STRUCT->turnSideTracker = 0;
+ gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
}
break;
case 3:
- while (BATTLE_STRUCT->turnSideTracker < 2)
+ while (gBattleStruct->turnSideTracker < 2)
{
- gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker;
+ gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker;
if (gSideTimers[sideBank].mistTimer && --gSideTimers[sideBank].mistTimer == 0)
{
gSideAffecting[sideBank] &= ~SIDE_STATUS_MIST;
@@ -708,20 +708,20 @@ u8 UpdateTurnCounters(void)
gBattleTextBuff1[4] = EOS;
effect++;
}
- BATTLE_STRUCT->turnSideTracker++;
+ gBattleStruct->turnSideTracker++;
if (effect)
break;
}
if (!effect)
{
- BATTLE_STRUCT->turncountersTracker++;
- BATTLE_STRUCT->turnSideTracker = 0;
+ gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
}
break;
case 4:
- while (BATTLE_STRUCT->turnSideTracker < 2)
+ while (gBattleStruct->turnSideTracker < 2)
{
- gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker;
+ gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker;
if (gSideAffecting[sideBank] & SIDE_STATUS_SAFEGUARD)
{
if (--gSideTimers[sideBank].safeguardTimer == 0)
@@ -731,33 +731,33 @@ u8 UpdateTurnCounters(void)
effect++;
}
}
- BATTLE_STRUCT->turnSideTracker++;
+ gBattleStruct->turnSideTracker++;
if (effect)
break;
}
if (!effect)
{
- BATTLE_STRUCT->turncountersTracker++;
- BATTLE_STRUCT->turnSideTracker = 0;
+ gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
}
break;
case 5:
- while (BATTLE_STRUCT->turnSideTracker < gNoOfAllBanks)
+ while (gBattleStruct->turnSideTracker < gNoOfAllBanks)
{
- gActiveBank = gBanksByTurnOrder[BATTLE_STRUCT->turnSideTracker];
+ gActiveBank = gBanksByTurnOrder[gBattleStruct->turnSideTracker];
if (gWishFutureKnock.wishCounter[gActiveBank] && --gWishFutureKnock.wishCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp)
{
gBankTarget = gActiveBank;
BattleScriptExecute(BattleScript_WishComesTrue);
effect++;
}
- BATTLE_STRUCT->turnSideTracker++;
+ gBattleStruct->turnSideTracker++;
if (effect)
break;
}
if (!effect)
{
- BATTLE_STRUCT->turncountersTracker++;
+ gBattleStruct->turncountersTracker++;
}
break;
case 6:
@@ -783,7 +783,7 @@ u8 UpdateTurnCounters(void)
BattleScriptExecute(BattleScript_RainContinuesOrEnds);
effect++;
}
- BATTLE_STRUCT->turncountersTracker++;
+ gBattleStruct->turncountersTracker++;
break;
case 7:
if (gBattleWeather & WEATHER_SANDSTORM_ANY)
@@ -796,12 +796,12 @@ u8 UpdateTurnCounters(void)
else
gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues;
- BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES;
+ gBattleStruct->animArg1 = B_ANIM_SANDSTORM_CONTINUES;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
}
- BATTLE_STRUCT->turncountersTracker++;
+ gBattleStruct->turncountersTracker++;
break;
case 8:
if (gBattleWeather & WEATHER_SUN_ANY)
@@ -817,7 +817,7 @@ u8 UpdateTurnCounters(void)
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
}
- BATTLE_STRUCT->turncountersTracker++;
+ gBattleStruct->turncountersTracker++;
break;
case 9:
if (gBattleWeather & WEATHER_HAIL)
@@ -830,12 +830,12 @@ u8 UpdateTurnCounters(void)
else
gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues;
- BATTLE_STRUCT->animArg1 = B_ANIM_HAIL_CONTINUES;
+ gBattleStruct->animArg1 = B_ANIM_HAIL_CONTINUES;
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
}
- BATTLE_STRUCT->turncountersTracker++;
+ gBattleStruct->turncountersTracker++;
break;
case 10:
effect++;
@@ -852,16 +852,16 @@ u8 TurnBasedEffects(void)
u8 effect = 0;
gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20);
- while (BATTLE_STRUCT->turnEffectsBank < gNoOfAllBanks && BATTLE_STRUCT->turnEffectsTracker <= TURNBASED_MAX_CASE)
+ while (gBattleStruct->turnEffectsBank < gNoOfAllBanks && gBattleStruct->turnEffectsTracker <= TURNBASED_MAX_CASE)
{
- gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->turnEffectsBank];
+ gActiveBank = gBankAttacker = gBanksByTurnOrder[gBattleStruct->turnEffectsBank];
if (gAbsentBankFlags & gBitTable[gActiveBank])
{
- BATTLE_STRUCT->turnEffectsBank++;
+ gBattleStruct->turnEffectsBank++;
}
else
{
- switch (BATTLE_STRUCT->turnEffectsTracker)
+ switch (gBattleStruct->turnEffectsTracker)
{
case 0: // ingrain
if ((gStatuses3[gActiveBank] & STATUS3_ROOTED)
@@ -875,22 +875,22 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(BattleScript_IngrainTurnHeal);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 1: // end turn abilities
if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBank, 0, 0, 0))
effect++;
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 2: // item effects
if (ItemBattleEffects(1, gActiveBank, 0))
effect++;
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 18: // item effects again
if (ItemBattleEffects(1, gActiveBank, 1))
effect++;
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 3: // leech seed
if (gStatuses3[gActiveBank] & STATUS3_LEECHSEED && gBattleMons[gStatuses3[gActiveBank] & STATUS3_LEECHSEED_BANK].hp != 0 && gBattleMons[gActiveBank].hp != 0)
@@ -899,12 +899,12 @@ u8 TurnBasedEffects(void)
gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- BATTLE_STRUCT->animArg1 = gBankTarget;
- BATTLE_STRUCT->animArg2 = gBankAttacker;
+ gBattleStruct->animArg1 = gBankTarget;
+ gBattleStruct->animArg2 = gBankAttacker;
BattleScriptExecute(BattleScript_LeechSeedTurnDrain);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 4: // poison
if ((gBattleMons[gActiveBank].status1 & STATUS_POISON) && gBattleMons[gActiveBank].hp != 0)
@@ -915,7 +915,7 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(BattleScript_PoisonTurnDmg);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 5: // toxic poison
if ((gBattleMons[gActiveBank].status1 & STATUS_TOXIC_POISON) && gBattleMons[gActiveBank].hp != 0)
@@ -929,7 +929,7 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(BattleScript_PoisonTurnDmg);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 6: // burn
if ((gBattleMons[gActiveBank].status1 & STATUS_BURN) && gBattleMons[gActiveBank].hp != 0)
@@ -940,7 +940,7 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(BattleScript_BurnTurnDmg);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 7: // spooky nightmares
if ((gBattleMons[gActiveBank].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBank].hp != 0)
@@ -952,7 +952,7 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(BattleScript_NightmareTurnDmg);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 8: // curse
if ((gBattleMons[gActiveBank].status2 & STATUS2_CURSED) && gBattleMons[gActiveBank].hp != 0)
@@ -963,7 +963,7 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(BattleScript_CurseTurnDmg);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 9: // wrap
if ((gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBank].hp != 0)
@@ -971,8 +971,8 @@ u8 TurnBasedEffects(void)
gBattleMons[gActiveBank].status2 -= 0x2000;
if (gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) // damaged by wrap
{
- BATTLE_STRUCT->animArg1 = ewram16004arr(0, gActiveBank);
- BATTLE_STRUCT->animArg2 = ewram16004arr(1, gActiveBank);
+ gBattleStruct->animArg1 = ewram16004arr(0, gActiveBank);
+ gBattleStruct->animArg2 = ewram16004arr(1, gActiveBank);
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 2;
gBattleTextBuff1[2] = ewram16004arr(0, gActiveBank);
@@ -995,7 +995,7 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 10: // uproar
if (gBattleMons[gActiveBank].status2 & STATUS2_UPROAR)
@@ -1044,7 +1044,7 @@ u8 TurnBasedEffects(void)
}
}
if (effect != 2)
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 11: // thrash
if (gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE)
@@ -1066,7 +1066,7 @@ u8 TurnBasedEffects(void)
}
}
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 12: // disable
if (gDisableStructs[gActiveBank].disableTimer1 != 0)
@@ -1089,7 +1089,7 @@ u8 TurnBasedEffects(void)
effect++;
}
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 13: // encore
if (gDisableStructs[gActiveBank].encoreTimer1 != 0)
@@ -1108,22 +1108,22 @@ u8 TurnBasedEffects(void)
effect++;
}
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 14: // lock-on decrement
if (gStatuses3[gActiveBank] & STATUS3_ALWAYS_HITS)
gStatuses3[gActiveBank] -= 0x8;
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 15: // charge
if (gDisableStructs[gActiveBank].chargeTimer1 && --gDisableStructs[gActiveBank].chargeTimer1 == 0)
gStatuses3[gActiveBank] &= ~STATUS3_CHARGED_UP;
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 16: // taunt
if (gDisableStructs[gActiveBank].tauntTimer1)
gDisableStructs[gActiveBank].tauntTimer1--;
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 17: // yawn
if (gStatuses3[gActiveBank] & STATUS3_YAWN)
@@ -1142,11 +1142,11 @@ u8 TurnBasedEffects(void)
effect++;
}
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 19: // done
- BATTLE_STRUCT->turnEffectsTracker = 0;
- BATTLE_STRUCT->turnEffectsBank++;
+ gBattleStruct->turnEffectsTracker = 0;
+ gBattleStruct->turnEffectsBank++;
break;
}
if (effect != 0)
@@ -1160,17 +1160,17 @@ u8 TurnBasedEffects(void)
bool8 HandleWishPerishSongOnTurnEnd(void)
{
gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20);
- switch (BATTLE_STRUCT->sub80170DC_Tracker)
+ switch (gBattleStruct->sub80170DC_Tracker)
{
case 0: // future sight
- while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks)
+ while (gBattleStruct->sub80170DC_Bank < gNoOfAllBanks)
{
- gActiveBank = BATTLE_STRUCT->sub80170DC_Bank;
+ gActiveBank = gBattleStruct->sub80170DC_Bank;
if (gAbsentBankFlags & gBitTable[gActiveBank])
- BATTLE_STRUCT->sub80170DC_Bank++;
+ gBattleStruct->sub80170DC_Bank++;
else
{
- BATTLE_STRUCT->sub80170DC_Bank++;
+ gBattleStruct->sub80170DC_Bank++;
if (gWishFutureKnock.futureSightCounter[gActiveBank] && --gWishFutureKnock.futureSightCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp)
{
if (gWishFutureKnock.futureSightMove[gActiveBank] == MOVE_FUTURE_SIGHT)
@@ -1191,17 +1191,17 @@ bool8 HandleWishPerishSongOnTurnEnd(void)
}
}
}
- BATTLE_STRUCT->sub80170DC_Tracker = 1;
- BATTLE_STRUCT->sub80170DC_Bank = 0;
+ gBattleStruct->sub80170DC_Tracker = 1;
+ gBattleStruct->sub80170DC_Bank = 0;
case 1: // perish song
- while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks)
+ while (gBattleStruct->sub80170DC_Bank < gNoOfAllBanks)
{
- gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->sub80170DC_Bank];
+ gActiveBank = gBankAttacker = gBanksByTurnOrder[gBattleStruct->sub80170DC_Bank];
if (gAbsentBankFlags & gBitTable[gActiveBank])
- BATTLE_STRUCT->sub80170DC_Bank++;
+ gBattleStruct->sub80170DC_Bank++;
else
{
- BATTLE_STRUCT->sub80170DC_Bank++;
+ gBattleStruct->sub80170DC_Bank++;
if (gStatuses3[gActiveBank] & STATUS3_PERISH_SONG)
{
gBattleTextBuff1[0] = 0xFD;
@@ -1241,11 +1241,11 @@ bool8 HandleFaintedMonActions(void)
do
{
int i;
- switch (BATTLE_STRUCT->sub80173A4_Tracker)
+ switch (gBattleStruct->sub80173A4_Tracker)
{
case 0:
- BATTLE_STRUCT->unk1605A = 0;
- BATTLE_STRUCT->sub80173A4_Tracker++;
+ gBattleStruct->unk1605A = 0;
+ gBattleStruct->sub80173A4_Tracker++;
for (i = 0; i < gNoOfAllBanks; i++)
{
if (gAbsentBankFlags & gBitTable[i] && !sub_8018018(i, 6, 6))
@@ -1254,54 +1254,54 @@ bool8 HandleFaintedMonActions(void)
case 1:
do
{
- gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A;
- if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(BATTLE_STRUCT->unk16113 & gBitTable[gBattlePartyID[BATTLE_STRUCT->unk1605A]]) && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A]))
+ gBank1 = gBankTarget = gBattleStruct->unk1605A;
+ if (gBattleMons[gBattleStruct->unk1605A].hp == 0 && !(gBattleStruct->unk16113 & gBitTable[gBattlePartyID[gBattleStruct->unk1605A]]) && !(gAbsentBankFlags & gBitTable[gBattleStruct->unk1605A]))
{
BattleScriptExecute(BattleScript_GiveExp);
- BATTLE_STRUCT->sub80173A4_Tracker = 2;
+ gBattleStruct->sub80173A4_Tracker = 2;
return 1;
}
- } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks);
- BATTLE_STRUCT->sub80173A4_Tracker = 3;
+ } while (++gBattleStruct->unk1605A != gNoOfAllBanks);
+ gBattleStruct->sub80173A4_Tracker = 3;
break;
case 2:
sub_8015740(gBank1);
- if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks)
- BATTLE_STRUCT->sub80173A4_Tracker = 3;
+ if (++gBattleStruct->unk1605A == gNoOfAllBanks)
+ gBattleStruct->sub80173A4_Tracker = 3;
else
- BATTLE_STRUCT->sub80173A4_Tracker = 1;
+ gBattleStruct->sub80173A4_Tracker = 1;
break;
case 3:
- BATTLE_STRUCT->unk1605A = 0;
- BATTLE_STRUCT->sub80173A4_Tracker++;
+ gBattleStruct->unk1605A = 0;
+ gBattleStruct->sub80173A4_Tracker++;
case 4:
do
{
- gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A; //or should banks be switched?
- if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A]))
+ gBank1 = gBankTarget = gBattleStruct->unk1605A; //or should banks be switched?
+ if (gBattleMons[gBattleStruct->unk1605A].hp == 0 && !(gAbsentBankFlags & gBitTable[gBattleStruct->unk1605A]))
{
BattleScriptExecute(BattleScript_HandleFaintedMon);
- BATTLE_STRUCT->sub80173A4_Tracker = 5;
+ gBattleStruct->sub80173A4_Tracker = 5;
return 1;
}
- } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks);
- BATTLE_STRUCT->sub80173A4_Tracker = 6;
+ } while (++gBattleStruct->unk1605A != gNoOfAllBanks);
+ gBattleStruct->sub80173A4_Tracker = 6;
break;
case 5:
- if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks)
- BATTLE_STRUCT->sub80173A4_Tracker = 6;
+ if (++gBattleStruct->unk1605A == gNoOfAllBanks)
+ gBattleStruct->sub80173A4_Tracker = 6;
else
- BATTLE_STRUCT->sub80173A4_Tracker = 4;
+ gBattleStruct->sub80173A4_Tracker = 4;
break;
case 6:
if (AbilityBattleEffects(9, 0, 0, 0, 0) || AbilityBattleEffects(0xB, 0, 0, 0, 0) || ItemBattleEffects(1, 0, 1) || AbilityBattleEffects(6, 0, 0, 0, 0))
return 1;
- BATTLE_STRUCT->sub80173A4_Tracker++;
+ gBattleStruct->sub80173A4_Tracker++;
break;
case 7:
break;
}
- } while (BATTLE_STRUCT->sub80173A4_Tracker != HandleFaintedMonActions_MAX_CASE);
+ } while (gBattleStruct->sub80173A4_Tracker != HandleFaintedMonActions_MAX_CASE);
return 0;
}
@@ -1320,15 +1320,15 @@ void TryClearRageStatuses(void)
u8 AtkCanceller_UnableToUseMove(void)
{
u8 effect = 0;
- s32* bideDmg = &BATTLE_STRUCT->bideDmg;
+ s32* bideDmg = &gBattleStruct->bideDmg;
do
{
- switch (BATTLE_STRUCT->atkCancellerTracker)
+ switch (gBattleStruct->atkCancellerTracker)
{
case 0: // flags clear
gBattleMons[gBankAttacker].status2 &= ~(STATUS2_DESTINY_BOND);
gStatuses3[gBankAttacker] &= ~(STATUS3_GRUDGE);
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 1: // check being asleep
if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP)
@@ -1372,7 +1372,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
}
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 2: // check being frozen
if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE)
@@ -1386,7 +1386,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
else
{
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
}
}
@@ -1399,7 +1399,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
effect = 2;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 3: // truant
if (gBattleMons[gBankAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBankAttacker].truantCounter)
@@ -1411,7 +1411,7 @@ u8 AtkCanceller_UnableToUseMove(void)
gBattleMoveFlags |= MOVESTATUS_MISSED;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 4: // recharge
if (gBattleMons[gBankAttacker].status2 & STATUS2_RECHARGE)
@@ -1423,7 +1423,7 @@ u8 AtkCanceller_UnableToUseMove(void)
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 5: // flinch
if (gBattleMons[gBankAttacker].status2 & STATUS2_FLINCHED)
@@ -1435,19 +1435,19 @@ u8 AtkCanceller_UnableToUseMove(void)
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 6: // disabled move
if (gDisableStructs[gBankAttacker].disabledMove == gCurrentMove && gDisableStructs[gBankAttacker].disabledMove != 0)
{
gProtectStructs[gBankAttacker].usedDisabledMove = 1;
- BATTLE_STRUCT->scriptingActive = gBankAttacker;
+ gBattleStruct->scriptingActive = gBankAttacker;
CancelMultiTurnMoves(gBankAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedIsDisabled;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 7: // taunt
if (gDisableStructs[gBankAttacker].tauntTimer1 && gBattleMoves[gCurrentMove].power == 0)
@@ -1458,7 +1458,7 @@ u8 AtkCanceller_UnableToUseMove(void)
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 8: // imprisoned
if (IsImprisoned(gBankAttacker, gCurrentMove))
@@ -1469,7 +1469,7 @@ u8 AtkCanceller_UnableToUseMove(void)
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 9: // confusion
if (gBattleMons[gBankAttacker].status2 & STATUS2_CONFUSION)
@@ -1499,7 +1499,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 10: // paralysis
if (gBattleMons[gBankAttacker].status1 & STATUS_PARALYSIS && (Random() % 4) == 0)
@@ -1510,12 +1510,12 @@ u8 AtkCanceller_UnableToUseMove(void)
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 11: // infatuation
if (gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION)
{
- BATTLE_STRUCT->scriptingActive = CountTrailingZeroBits((gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) >> 0x10);
+ gBattleStruct->scriptingActive = CountTrailingZeroBits((gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) >> 0x10);
if (Random() & 1)
BattleScriptPushCursor();
else
@@ -1528,7 +1528,7 @@ u8 AtkCanceller_UnableToUseMove(void)
gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 12: // bide
if (gBattleMons[gBankAttacker].status2 & STATUS2_BIDE)
@@ -1553,7 +1553,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 13: // move thawing
if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE)
@@ -1567,13 +1567,13 @@ u8 AtkCanceller_UnableToUseMove(void)
}
effect = 2;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 14: // last case
break;
}
- } while (BATTLE_STRUCT->atkCancellerTracker != ATKCANCELLER_MAX_CASE && effect == 0);
+ } while (gBattleStruct->atkCancellerTracker != ATKCANCELLER_MAX_CASE && effect == 0);
if (effect == 2)
{
@@ -1731,8 +1731,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
else
move = gCurrentMove;
- if (BATTLE_STRUCT->dynamicMoveType)
- moveType = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ if (gBattleStruct->dynamicMoveType)
+ moveType = gBattleStruct->dynamicMoveType & 0x3F;
else
moveType = gBattleMoves[move].type;
@@ -1755,8 +1755,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (!(gBattleWeather & WEATHER_RAIN_ANY))
{
gBattleWeather = (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_PERMANENT);
- BATTLE_STRUCT->animArg1 = B_ANIM_RAIN_CONTINUES;
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->animArg1 = B_ANIM_RAIN_CONTINUES;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
@@ -1764,8 +1764,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (!(gBattleWeather & WEATHER_SANDSTORM_ANY))
{
gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY);
- BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES;
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->animArg1 = B_ANIM_SANDSTORM_CONTINUES;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
@@ -1773,8 +1773,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (!(gBattleWeather & WEATHER_SUN_ANY))
{
gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY);
- BATTLE_STRUCT->animArg1 = B_ANIM_SUN_CONTINUES;
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->animArg1 = B_ANIM_SUN_CONTINUES;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
@@ -1791,7 +1791,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
{
gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY);
BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates);
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
@@ -1801,7 +1801,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
{
gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY);
BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates);
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
@@ -1811,7 +1811,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
{
gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY);
BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates);
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
@@ -1829,8 +1829,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (effect != 0)
{
BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
- BATTLE_STRUCT->scriptingActive = bank;
- BATTLE_STRUCT->castformToChangeInto = effect - 1;
+ gBattleStruct->scriptingActive = bank;
+ gBattleStruct->castformToChangeInto = effect - 1;
}
break;
case ABILITY_TRACE:
@@ -1852,8 +1852,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (effect != 0)
{
BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
- BATTLE_STRUCT->scriptingActive = target1;
- BATTLE_STRUCT->castformToChangeInto = effect - 1;
+ gBattleStruct->scriptingActive = target1;
+ gBattleStruct->castformToChangeInto = effect - 1;
break;
}
}
@@ -1897,7 +1897,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
gBattleMons[bank].status1 = 0;
// BUG: The nightmare status does not get cleared here. This was fixed in Emerald.
//gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
- BATTLE_STRUCT->scriptingActive = gActiveBank = bank;
+ gBattleStruct->scriptingActive = gActiveBank = bank;
BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates);
EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1);
MarkBufferBankForExecution(gActiveBank);
@@ -1908,10 +1908,10 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (gBattleMons[bank].statStages[STAT_STAGE_SPEED] < 0xC && gDisableStructs[bank].isFirstTurn != 2)
{
gBattleMons[bank].statStages[STAT_STAGE_SPEED]++;
- BATTLE_STRUCT->animArg1 = 0x11;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->animArg1 = 0x11;
+ gBattleStruct->animArg2 = 0;
BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates);
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
@@ -2218,7 +2218,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
}
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus;
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
gActiveBank = bank;
EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
MarkBufferBankForExecution(gActiveBank);
@@ -2238,8 +2238,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (effect)
{
BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
- BATTLE_STRUCT->scriptingActive = bank;
- BATTLE_STRUCT->castformToChangeInto = effect - 1;
+ gBattleStruct->scriptingActive = bank;
+ gBattleStruct->castformToChangeInto = effect - 1;
return effect;
}
}
@@ -2251,11 +2251,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
{
gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
- BATTLE_STRUCT->synchroniseEffect &= 0x3F;
- if (BATTLE_STRUCT->synchroniseEffect == 6)
- BATTLE_STRUCT->synchroniseEffect = 2;
- gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect + 0x40;
- BATTLE_STRUCT->scriptingActive = gBankTarget;
+ gBattleStruct->synchroniseEffect &= 0x3F;
+ if (gBattleStruct->synchroniseEffect == 6)
+ gBattleStruct->synchroniseEffect = 2;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchroniseEffect + 0x40;
+ gBattleStruct->scriptingActive = gBankTarget;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
@@ -2267,11 +2267,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
{
gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
- BATTLE_STRUCT->synchroniseEffect &= 0x3F;
- if (BATTLE_STRUCT->synchroniseEffect == 6)
- BATTLE_STRUCT->synchroniseEffect = 2;
- gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect;
- BATTLE_STRUCT->scriptingActive = gBankAttacker;
+ gBattleStruct->synchroniseEffect &= 0x3F;
+ if (gBattleStruct->synchroniseEffect == 6)
+ gBattleStruct->synchroniseEffect = 2;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchroniseEffect;
+ gBattleStruct->scriptingActive = gBankAttacker;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
@@ -2287,7 +2287,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
gLastUsedAbility = ABILITY_INTIMIDATE;
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
BattleScriptPushCursorAndCallback(gUnknown_081D978C);
- BATTLE_STRUCT->intimidateBank = i;
+ gBattleStruct->intimidateBank = i;
effect++;
break;
}
@@ -2346,7 +2346,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
{
BattleScriptPushCursorAndCallback(BattleScript_TraceActivates);
gStatuses3[i] &= ~(STATUS3_TRACE);
- BATTLE_STRUCT->scriptingActive = i;
+ gBattleStruct->scriptingActive = i;
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 4;
@@ -2373,7 +2373,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
BattleScriptPushCursor();
gBattlescriptCurrInstr = gUnknown_081D9795;
- BATTLE_STRUCT->intimidateBank = i;
+ gBattleStruct->intimidateBank = i;
effect++;
break;
}
@@ -2499,7 +2499,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
return effect;
}
-void BattleScriptExecute(u8* BS_ptr)
+void BattleScriptExecute(const u8* BS_ptr)
{
gBattlescriptCurrInstr = BS_ptr;
B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc;
@@ -2586,7 +2586,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
switch (bankHoldEffect)
{
case HOLD_EFFECT_DOUBLE_PRIZE:
- BATTLE_STRUCT->moneyMultiplier = 2;
+ gBattleStruct->moneyMultiplier = 2;
break;
case HOLD_EFFECT_RESTORE_STATS:
for (i = 0; i < 8; i++)
@@ -2599,7 +2599,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
if (effect)
{
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
gStringBank = bank;
gActiveBank = gBankAttacker = bank;
BattleScriptExecute(BattleScript_WhiteHerbEnd2);
@@ -2672,7 +2672,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
if (effect)
{
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
gStringBank = bank;
gActiveBank = gBankAttacker = bank;
BattleScriptExecute(BattleScript_WhiteHerbEnd2);
@@ -2809,9 +2809,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleTextBuff2[4] = EOS;
gEffectBank = bank;
- BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_ATK;
- BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_ATK;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->statChanger = 0x10 + STAT_STAGE_ATK;
+ gBattleStruct->animArg1 = 0xE + STAT_STAGE_ATK;
+ gBattleStruct->animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
@@ -2825,9 +2825,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleTextBuff1[3] = EOS;
gEffectBank = bank;
- BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_DEF;
- BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_DEF;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->statChanger = 0x10 + STAT_STAGE_DEF;
+ gBattleStruct->animArg1 = 0xE + STAT_STAGE_DEF;
+ gBattleStruct->animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
@@ -2841,9 +2841,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleTextBuff1[3] = EOS;
gEffectBank = bank;
- BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPEED;
- BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPEED;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->statChanger = 0x10 + STAT_STAGE_SPEED;
+ gBattleStruct->animArg1 = 0xE + STAT_STAGE_SPEED;
+ gBattleStruct->animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
@@ -2857,9 +2857,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleTextBuff1[3] = EOS;
gEffectBank = bank;
- BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPATK;
- BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPATK;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->statChanger = 0x10 + STAT_STAGE_SPATK;
+ gBattleStruct->animArg1 = 0xE + STAT_STAGE_SPATK;
+ gBattleStruct->animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
@@ -2873,9 +2873,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleTextBuff1[3] = EOS;
gEffectBank = bank;
- BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPDEF;
- BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPDEF;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->statChanger = 0x10 + STAT_STAGE_SPDEF;
+ gBattleStruct->animArg1 = 0xE + STAT_STAGE_SPDEF;
+ gBattleStruct->animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
@@ -2918,9 +2918,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleTextBuff2[7] = EOS;
gEffectBank = bank;
- BATTLE_STRUCT->statChanger = 0x21 + i;
- BATTLE_STRUCT->animArg1 = 0x21 + i + 6;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->statChanger = 0x21 + i;
+ gBattleStruct->animArg1 = 0x21 + i + 6;
+ gBattleStruct->animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
@@ -3033,7 +3033,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
if (effect)
{
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
gStringBank = bank;
gActiveBank = gBankAttacker = bank;
switch (effect)
@@ -3181,7 +3181,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
if (effect)
{
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
gStringBank = bank;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_WhiteHerbRet;
@@ -3191,7 +3191,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
if (effect)
{
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
gStringBank = bank;
gActiveBank = bank;
EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
@@ -3228,7 +3228,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
{
gLastUsedItem = atkItem;
gStringBank = gBankAttacker;
- BATTLE_STRUCT->scriptingActive = gBankAttacker;
+ gBattleStruct->scriptingActive = gBankAttacker;
gBattleMoveDamage = (gSpecialStatuses[gBankTarget].moveturnLostHP / atkQuality) * -1;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = -1;
@@ -3433,7 +3433,7 @@ u8 IsMonDisobedient(void)
gRandomMove = gBattleMons[gBankAttacker].moves[gCurrMovePos];
gBattleCommunication[3] = 0;
gDynamicBasePower = 0;
- BATTLE_STRUCT->dynamicMoveType = 0;
+ gBattleStruct->dynamicMoveType = 0;
gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove;
gBankTarget = GetMoveTarget(gRandomMove, 0);
gHitMarker |= HITMARKER_x200000;
diff --git a/src/data/battle_strings_de.h b/src/data/battle_strings_de.h
index a3d51f2a5..a19c0fc6c 100644
--- a/src/data/battle_strings_de.h
+++ b/src/data/battle_strings_de.h
@@ -1218,7 +1218,7 @@ const u8 *const gBattleStringsTable[] =
};
// below are lists of battle string enums and NOT pointers to the strings.
-const u16 gMissStrings[] =
+const u16 gMissStringIds[] =
{
BATTLE_TEXT_AttackMissed,
BATTLE_TEXT_ProtectedItself,
diff --git a/src/data/battle_strings_en.h b/src/data/battle_strings_en.h
index f29e48410..67eb70ee1 100644
--- a/src/data/battle_strings_en.h
+++ b/src/data/battle_strings_en.h
@@ -1218,7 +1218,7 @@ const u8 *const gBattleStringsTable[] =
};
// below are lists of battle string enums and NOT pointers to the strings.
-const u16 gMissStrings[] =
+const u16 gMissStringIds[] =
{
BATTLE_TEXT_AttackMissed,
BATTLE_TEXT_ProtectedItself,
diff --git a/src/pokemon/pokemon_3.c b/src/pokemon/pokemon_3.c
index 221de831a..9346031a6 100644
--- a/src/pokemon/pokemon_3.c
+++ b/src/pokemon/pokemon_3.c
@@ -1293,15 +1293,15 @@ void BoxMonRestorePP(struct BoxPokemon *boxMon)
void sub_8040B8C(void)
{
- gLastUsedAbility = BATTLE_STRUCT->unk160C0;;
+ gLastUsedAbility = gBattleStruct->unk160C0;;
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 4;
- gBattleTextBuff1[2] = BATTLE_STRUCT->unk16054;
+ gBattleTextBuff1[2] = gBattleStruct->unk16054;
gBattleTextBuff1[4] = EOS;
- if (!GetBankSide(BATTLE_STRUCT->unk16054))
- gBattleTextBuff1[3] = pokemon_order_func(gBattlePartyID[BATTLE_STRUCT->unk16054]);
+ if (!GetBankSide(gBattleStruct->unk16054))
+ gBattleTextBuff1[3] = pokemon_order_func(gBattlePartyID[gBattleStruct->unk16054]);
else
- gBattleTextBuff1[3] = gBattlePartyID[BATTLE_STRUCT->unk16054];
+ gBattleTextBuff1[3] = gBattlePartyID[gBattleStruct->unk16054];
gBattleTextBuff2[0] = 0xFD;
gBattleTextBuff2[1] = 4;
gBattleTextBuff2[2] = gBankInMenu;
diff --git a/src/rom3.c b/src/rom3.c
index 11239a681..713713162 100644
--- a/src/rom3.c
+++ b/src/rom3.c
@@ -749,9 +749,9 @@ void EmitPrintString(u8 a, u16 stringID)
stringInfo->lastMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem;
stringInfo->lastAbility = gLastUsedAbility;
- stringInfo->scrActive = BATTLE_STRUCT->scriptingActive;
- stringInfo->unk1605E = BATTLE_STRUCT->unk1605E;
- stringInfo->hpScale = BATTLE_STRUCT->hpScale;
+ stringInfo->scrActive = gBattleStruct->scriptingActive;
+ stringInfo->unk1605E = gBattleStruct->unk1605E;
+ stringInfo->hpScale = gBattleStruct->hpScale;
stringInfo->StringBank = gStringBank;
stringInfo->moveType = gBattleMoves[gCurrentMove].type;
@@ -781,8 +781,8 @@ void EmitPrintStringPlayerOnly(u8 a, u16 stringID)
stringInfo->lastMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem;
stringInfo->lastAbility = gLastUsedAbility;
- stringInfo->scrActive = BATTLE_STRUCT->scriptingActive;
- stringInfo->unk1605E = BATTLE_STRUCT->unk1605E;
+ stringInfo->scrActive = gBattleStruct->scriptingActive;
+ stringInfo->unk1605E = gBattleStruct->unk1605E;
for (i = 0; i < 4; i++)
stringInfo->abilities[i] = gBattleMons[i].ability;
diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c
index 9449ca0d1..a1b0f5ecb 100644
--- a/src/rom_800D42C.c
+++ b/src/rom_800D42C.c
@@ -52,7 +52,7 @@ void PrintLinkBattleWinLossTie(void)
{
// lp_field_18 = player position?
- switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18)
+ switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18)
{
case 0:
case 2:
@@ -70,7 +70,7 @@ void PrintLinkBattleWinLossTie(void)
else
{
- switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18)
+ switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18)
{
case 1:
case 3:
@@ -92,7 +92,7 @@ void PrintLinkBattleWinLossTie(void)
if (gBattleOutcome == 1)
{
- if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0)
+ if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 != 0)
{
PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN);
PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS);
@@ -105,7 +105,7 @@ void PrintLinkBattleWinLossTie(void)
}
else
{
- if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0)
+ if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 != 0)
{
PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN);
PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS);
diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c
index b13006c13..f991297ab 100644
--- a/src/script_pokemon_util_80C4BF0.c
+++ b/src/script_pokemon_util_80C4BF0.c
@@ -238,8 +238,8 @@ void ShowContestWinner(void)
if(gUnknown_0203856C)
{
sub_80AAF30();
- BATTLE_STRUCT->unk15DDF = 1;
- BATTLE_STRUCT->unk15DDE = sub_80B2C4C(254, 0);
+ gBattleStruct->unk15DDF = 1;
+ gBattleStruct->unk15DDE = sub_80B2C4C(254, 0);
Contest_SaveWinner(3);
gUnknown_0203856C = 0;
}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index b9c08aac6..0bb35e8c2 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -119,7 +119,7 @@ gRandomMove: @ 2024BEA
gBattleMoveDamage: @ 2024BEC
.space 0x4
-gHP_dealt: @ 2024BF0
+gHpDealt: @ 2024BF0
.space 0x4
gTakenDmg: @ 2024BF4
@@ -170,10 +170,10 @@ gUnknown_02024C2C: @ 2024C2C
gLastUsedMove: @ 2024C34
.space 0x8
-gMoveHitWith: @ 2024C3C
+gLastLandedMoves: @ 2024C3C
.space 0x8
-gUnknown_02024C44: @ 2024C44
+gLastHitByType: @ 2024C44
.space 0x8
gUnknown_02024C4C: @ 2024C4C